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