c语言保姆级笔记五-创新互联

字符串处理函数

为大理州等地区用户提供了全套网页设计制作服务,及大理州网站建设行业解决方案。主营业务为网站建设、网站设计、大理州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

其实c语言中提供了字符串处理的相应函数,我们直接调用即可

求字符串长度 strlen //string length

字符串copy strcpy //string copy

字符串连接 strcat

字符串比较 strcmp //string compare

例:

#include

#include

int main()

{

chara[] = "hello";

printf("lenis %d\n", strlen(a)); //打印字符串长度 (strlen(a) 可以求字符串长度)

charb[100] = { 0 };

strcpy(b, a); //strcpy 能将a copy 给 b

char c[100] ="world";

printf("bis %s\n", b); //????? Hello

strcat(b, c); //strcat 能将c连接到b后面 (字符串连接)

printf("bis %s\n", b); //b ????? helloworld

}

strcmp 比较字符串时,strcmp(s1,s2),

如果s1 >s2返回1,s1< s2 返回-1,s1 =s2返回0

"abcd">"abc"

"abcd"< "bc" //字符串比较先比第一个字母, 'a'< 'b' 那么 "abcd"< "bc"

"abcd">"ABCD" //'a'(97) >'A'(65)

"abcd">"1234" //'a'(97) >'1'(49)

例:

#include

#include

int main()

{

inta = strcmp("abcd", "abc");

printf("abcdabc %d\n", a);

printf("abcdbc %d\n", strcmp("abcd", "bc"));

printf("abcdABCD %d\n", strcmp("abcd", "ABCD"));

printf("abcdabcd %d\n", strcmp("abcd", "abcd"));

}

练习3

将字符串char a[] = "Hello World!"中的小写字母转大写

#include

int main()

{

chara[] = "Hello World!";

inti = 0;

while(a[i]!= '\0')

{

if(a[i]>= 'a' && a[i]<= 'z')

{

a[i]= a[i] - 32;

}

i++;

}

printf("%s\n",a);

}

一维数组

int a[5];

int a[5] = {1,2,3,4,5}; //定义数组同时初始化

char b[5];

float c[5];

sizeof(a) ? 20 (每个是int 5个)

sizeof(b) ? 5

sizeof(c) ? 20

for(i = 0; i< 5; i++)

{

a[i]= i;

}

字符串

"hello"------>sizeof("hello") ? 6

char s[] = "hello"; //用字符数组存字符串

printf("%s\n", s); //%s 表示输出一个字符串

scanf("%s", s); //输入的时候不要写

3 作业讲解

练习

1. 围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,

兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。

你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,

再隔3个…以后在这个圆圈中如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。

问:兔子可能在哪个洞里?

思路: 定义一个有10个元素的数组,初始值全是0,狐狸进某个洞(可以通过计算数组下标),进入一个值为1

1000之后,可能有n个洞被进入,n个1

从第一个洞开始,检索是否还为0,是0的,输出

#include

int main()

{

inta[10] = { 0 };

inti, j = 0; //i 是隔的洞数,j是进入的洞号(从0开始)

for(i= 1; i<= 1000; i++)

{

a[j]= 1;

j= j + i + 1; //隔i个洞,最后j是洞号

j= j % 10;

}

for(i= 0; i< 10; i++)

{

if(a[i]== 0)

printf("%d\n",i + 1);

}

}

/*

//1. 消除一句话中所有的原音字母,例如

//I am a student!

// 输出: m stdnt!

#include

#include

int main()

{

chars[] = "I am aaa student";

inti, j;

intlen = strlen(s); //先求出字符串长度,为了后面移动用

for(i= 0; i< len; i++)

{

if(s[i]== 'A' || s[i] == 'a' || s[i] == 'E' || s[i] == 'e'

||s[i] == 'I' || s[i] == 'i' || s[i] == 'O' || s[i] == 'o'

||s[i] == 'U' || s[i] == 'u')

{

for(j= i; j< len; j++) //后面的都往前移

{

s[j]= s[j + 1];

}

i--; //为了避免出现连续的元音字母

}

}

printf("%s\n",s);

}

二维数组(存储矩阵)

如果存储 (这些数有3行 4列)

1 2 3 4

5 6 7 8

9 1011 12

如果存储,有行,有列的数,就用二维数组

int a[3][4]; //3 行 4 列

同时也可以

int a[3][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12}}; //也可以int a[3][4] ={1,2,3,4,5,6,7,8, 9,10,11,12}};

a[0][0] 第一行第一列

a[0][1] 第一行第二列

a[1][1] 第二行第二列

a[2][3] 第三行第四列

a[3][4] 第四行第五列 (不存在)

//数组用2重for 循环赋值

例: 如何输出二维数组所有元素

#include

int main()

{

inti, j;

inta[3][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12}};

for(i= 0; i< 3; i++)

{

for(j= 0; j< 4; j++)

{

printf("%5d",a[i][j]);

}

printf("\n");

}

}

练习

1. 查询一个二维数组当中是否存在某个数,如果存在计算有多少个这样的数

int a[3][4] = {{1,2,3,4},{5,3,7,8},{9,10,11,12}};

3---->2

5---->1

6---->0

#include

int main()

{

inti, j, x, n = 0;

inta[3][4] = {{1,2,3,4}, {5,3,7,8},{9,10,11,12}};

scanf("%d",&x);

for(i= 0; i< 3; i++)

{

for(j= 0; j< 4; j++)

{

if(a[i][j]== x)

{

n++;

}

}

}

printf("nis %d\n", n);

}

2. 求两个矩阵之和放在第三个矩阵中(3行4列)

inta[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

intb[3][4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3}};

#include

int main()

{

inti, j;

inta[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

intb[3][4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3}};

intc[3][4];

for(i= 0; i< 3; i++)

{

for(j= 0; j< 4; j++)

{

c[i][j]= a[i][j] + b[i][j];

}

}

for(i= 0; i< 3; i++)

{

for(j= 0; j< 4; j++)

{

printf("%5d",c[i][j]);

}

printf("\n");

}

}

二维数组的初始化

完全初始化(所有元素都赋初值)

int a[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

部分初始化(未赋初值的,默认为0)

int a[3][4] = {{1,2}, {5}, {9,10,11}};

a[0][0] -->1

a[0][1] -->2

a[0][2] -->0

a[1][0] -->5

a[1][1] -->0

....

省略行数(行数不写,编译器能自动计算出行数是3)

int a[][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

不可以这样

int a[3][] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //错,列不可以省略

int a[3][] = {{1,2}, {5}, {9,10,11}}; //如果这样写,编译器就不知道有多少列

3. 输出杨辉三角形 输出10阶即可

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

思路:可以用一个有10行10列的二维数组, 第一列固定值 1

计算 a[i][j] = a[i - 1][j] + a[i - 1][j - 1];

#include

int main()

{

inta[10][10] = {{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};

inti,j;

for(i= 1; i< 10; i++)

{

for(j= 1; j< 10; j++)

{

a[i][j]= a[i - 1][j - 1] + a[i - 1][j];

}

}

for(i= 0; i< 10; i++)

{

for(j= 0; j< 10; j++)

{

if(a[i][j]!= 0)

printf("%5d",a[i][j]);

}

printf("\n");

}

}

///如何产生随机数: 未知的数

例:

#include

int main()

{

while(1)

{

inta = rand() % 35 + 1; //rand 能产生随机数

printf("ais %d\n", a);

getchar(); //等按下回车键

}

}

验证,并调出bug(重复运行)

面试题: c语言如何产生随机数? (rand函数)

rand 是真随机数还是伪随机数 ? (伪随机数)

为什么是伪随机数? rand 是通过一个计算公式算出的随机数,并且通过一个随机种子算的

默认随机种子是1,所以随机数序列总是一样的

处理随机数: 用一个不同的随机种子

#include

int main()

{

srand(5); //srand 能为rand函数提供一个随机种子

while(1)

{

inta = rand() % 35 + 1; //rand 能产生随机数

printf("ais %d\n", a);

getchar(); //等按下回车键

}

}

改进

#include

int main()

{

intn;

scanf("%d",&n);

srand(n); //srand 能为rand函数提供一个随机种子

while(1)

{

inta = rand() % 35 + 1; //rand 能产生随机数

printf("ais %d\n", a);

getchar(); //等按下回车键

}

}

继续改进,种子应该是谁都不知道的,变化的

#include

int main()

{

while(1)

{

inta = time(0); //从1970.1.1 0:0:0到目前经过的秒值

printf("ais %d\n", a);

getchar();

}

}

#include

int main()

{

srand(time(0)); //srand 能为rand函数提供一个随机种子, srand只执行一次即可

while(1)

{

inta = rand() % 35 + 1; //rand 能产生随机数

printf("ais %d\n", a);

getchar(); //等按下回车键

}

}

1. 随机生成一个1-10的数,让对方猜5次,如果猜对了,提示"congratulations !!"

如果猜错了,提示"bigger" 或 "smaller"

#include

int main()

{

srand(time(0)); //srand 能为rand函数提供一个随机种子, srand只执行一次即可

inta = rand() % 10 + 1;

inti, n;

for(i= 0; i< 5; i++)

{

scanf("%d",&n);

if(n>a)

printf("bigger\n");

elseif(n< a)

printf("smaller\n");

else

{

printf("congratulations!!\n");

break; //结束整个循环

}

}

}

2. 中国福利彩票35选7

随机生成1-35内不重复的7个数字

然后让用户选择自己的一组号码

中奖规则:猜中

7个500万

6个100万

5个1万

4个5000

3个500

0,1,2个没中奖

分步:

1. 产生7个随机数(随机数用数组存) , 最好不重复(后做)

2. 输入7个数

3. 交叉比较,计算出中了几个

4. 计算中奖规则

#include

int main()

{

inta[7] = { 0 }, b[7] = { 0 };

inti, j, c = 0;

srand(time(0));

for(i= 0; i< 7; i++) //产生7个随机数

{

a[i]= rand() % 35 + 1;

//去重复(每个新出的数和原来的数比较 )

for(j= 0; j< i; j++)

{

if(a[i]== a[j])

{

i--;

break;

}

}

}

printf("pleaseinput 7 number:"); //输入7个数

scanf("%d%d%d%d%d%d%d",&b[0], &b[1], &b[2], &b[3], &b[4], &b[5], &b[6]);

printf("rand:%d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6]);

for(i= 0; i< 7; i++) //交叉比较中了几个数

{

for(j= 0; j< 7; j++)

{

if(b[i]== a[j])

{

c++;

break;

}

}

}

printf("cis %d\n", c);

switch(c) //判断中奖规则

{

case7:

printf("500wan\n");

break;

case6:

printf("100wan\n");

break;

case5:

printf("1wan\n");

break;

case4:

printf("5000\n");

break;

case3:

printf("500\n");

break;

default:

printf("sorryagain\n");

break;

}

}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:c语言保姆级笔记五-创新互联
分享链接:http://scyanting.com/article/ppdps.html