一维数组
(1)定义一个含有10个元素的数组,依次赋值为1,2,3,4,5,6,7,8,9,10,然后按逆序输出
(2)现在输入10个用户的有效学习时间,要求对它们按由小到大的顺序排序
一开始输入数组的时候加了\n:
scanf("%d\n",&a[i]);
导致每次都得输入第11个数才能执行。
二维数组
有一个3*4的矩阵,求出其中的最大值并输出最大值和其所在的行号和列号。
字符数组
c语言中没有字符串类型,字符串都是存储在字符型数组中的
字符串和字符串结束标志
在c语言中,是将字符串作为字符数组来处理的。在平时的应用中,人们往往关心的是字符串的有效长度而不是字符数组的长度。例如,定义一个字符数组长度50,而实际有效字符只有30个。为了测定字符串的实际长度,c语言规定了一个“字符串结束标志(’\0’)”,以字符’\0’作为结束标志。如果字符数组中存在若干字符,前面9个字符都不是空字符(’\0’),而第10个字符是’\0’,则认为数组中有一个字符串,其有效字符为9个。
c系统在用字符数组存储字符串常量时会自动加一个’\0’作为结束符。
例如:
printf("Shiyanlou");
在执行次语句时系统怎么知道该输出到哪里为止呢?实际上,在向内存中存储时,系统自动在最后一个字符’u’后面加一个’\0’作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为’\0’,遇到’\0’就停止输出。
有了上述理解,在对字符数组初始化的方法上面我们做出一些补充。例如:
char[]={"I love shiyanlou"};
我们也可以直接省去花括号:
char[]="I love shiyanlou";
这里不像之前单个字符作为字符数组的初值,而是用字符串作为初值(字符串做初值是用双撇号而不是单撇号)。这种方法更直观、更方便。
注意:此时数组的长度是17,而不是16,因为字符串常量的最后系统自动加了一个’\0’。上面的初始化与下面的初始化等价的。
char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'};
和下面的这个不等价:
char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'};
字符数组的输入输出
字符数组的输入输出可以有两种方法。
(1)逐个字符输入输出,用格式“%c”输入或者输出一个字符。
(2)将整个字符串一次输入或者输出,用“%s”格式符,例如:
字符串处理函数
puts函数-输出字符串的函数
gets函数-输入字符串的函数
strcat函数-字符串连接函数
strlen函数-测字符串长度的函数
strcpy和strncpy——字符串复制函数
strcmp——字符串比较函数
任意键入3个字符串,编程找出最小的一个。
#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{ char string[30];
char ch[3][30];
int i;
for(i=0;i<3;i++)
gets(ch[i]);
strcpy(string,ch[0]);
for(i=1;i<3;i++)
if(strcmp(ch[i],string)<0)
strcpy(string,ch[i]);
printf("The result is :\n%s\n",string);
return 0;
}
练习题
(1)输入20个实数存放在一维数组中,输出它们的平均值以及高于平均的数的个数。
(2)围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限,若能找到我你就可以饱餐一顿,在没找到我之前不能停止,狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件,结果狐狸跑得昏了过去也没找到兔子,请问兔子躲在哪个洞里。程序中可假定狐狸找了1000次。
本文介绍了C语言中一维数组、二维数组及字符数组的基本操作,包括定义、初始化、输入输出、排序以及字符串处理函数的使用,并通过实例加深理解。
6892

被折叠的 条评论
为什么被折叠?



