二级C语言考试辅导教程第四章:数组[3]

二级C语言考试辅导教程第四章:数组[3],第1张

二级C语言考试辅导教程第四章:数组[3],第2张

字符数组

用来存储字符数量的数组称为字符数组。字符类型描述的形式与前面介绍的数值数组相同。例如:char c[10];因为字符型和整型比较常见,所以也可以定义为int c[10],但此时每个数组元素占用2个字节的内存单元。字符也可以是二维或多维数组,例如:char cc语言提供了丰富的字符串处理函数,大致可以分为字符串输入、输出、合并、修改、比较、转换、复制和搜索。使用这些函数可以大大减轻编程的负担。用于输入输出的字符串函数在使用前应包含头文件“stdio . h”;其他字符串函数应该包括头文件“string.h”。以下是一些最常用的字符串函数。
[10];即二维字符数组。字符还允许在类型描述期间进行初始化赋值。例如:static char c [10] = {` c ',`` ',` p ',` r `,o `,g `,r `,` a `,` m ` };赋值元素的值为:数组C C C[0]C[1]C[2]C[3]C常见字符串函数C[5]C[6]C[7]C[8]c[9],其中C[9]未赋值,系统自动赋值为0。当所有元素都给定初始值时,长度描述也可以省略。例如:静态char c [] = {` c ',`` ',` p ',` r ',` o ',` g ',` r ',` a ',` m ` };此时,C数组的长度自动设置为9。
main()
{
int i,j;
char a[][5]={{'B ',' A ',' S ',' I ',' C ',},{'d ',' B ',' A ',' S ',' E ' } }
for(I = 0;I {
for(j = 0;j printf("%c ",a[I][j]);
printf(" \ n ");
}
}
因为本例中二维字符数组的所有元素在初始化时都被赋予了初始值,所以一维下标的长度可以省略。C语言中没有特殊的字符串变量。通常,字符数组用于存储字符串。在2.1.4节介绍字符串常量时,已经解释过字符串总是以' [3] '作为字符串的结尾。因此,当字符串存储在数组中时,终止符' [3] '也存储在数组中,用作字符串结束的标志。有了' [3] '标志,就不再需要根据字符数组的长度来判断字符串的长度。
C语言允许以字符串的形式对数组进行初始化赋值。比如:
static char c [] = {'c ',' p ',' r ',' o ',' g ',' r ',' a ',' m ' };可以写成:
static char c [] = {"c程序" };或者去掉{},写成:
sratic char c[]="C程序";
按字符串赋值比按字符逐个赋值多一个字节,用于存储字符串结束标志' [3] '。上述数组C在内存中的实际存储是:C程序\ 0` \ 0 `由C编译系统自动添加。由于采用了“\ 0”标志,在用字符串赋值初始值时一般不需要指定数组的长度,系统会自行处理。使用字符串模式后,字符数组的输入输出会变得简单方便。除了上述给字符串赋初值的方法,还可以使用printf函数和scanf函数一次性输出输入一个字符数组中的字符串,而不是使用循环语句逐个输入输出每个字符。
void main()
{
static char c[]= " BASIC \ nd base ";
printf("%s\n ",c);
}
注意,在这个例子的printf函数中,使用的格式字符串是" %s ",这表示输出是一个字符串。而在输出表列中给出数组名即可。不能写成:printf("%s ",c[]);
void main()
{
char ST[15];
printf("输入字符串:\ n ");
scanf("%s ",ST);
printf("%s\n ",ST);
}
在本例中,由于数组长度被定义为15,因此输入字符串长度必须小于15,以便为字符串标志`\ 0 '的结尾保留一个字节。需要注意的是,对于一个字符数组,如果没有进行初始化赋值,就必须声明数组长度。还需要特别注意的是,用scanf函数输入字符串时,字符串不能包含空格,否则将以空格作为字符串的结尾。比如运行例4.8,当输入字符串包含空单元格时,运行情况是:输入字符串:这是本书本。从输出结果可以看出空单元格之后的字符没有输出。为了避免这种情况,可以设置几个字符数组来存储段中带有空单元格的字符串。程序可以重写如下:
lesson
void main()
{
charst 1[6],st2 [6],st3 [6],st4[6];
printf("输入字符串:\ n ");
scanf("%s%s%s%s ",st1,st2,st3,st4);
printf("%s %s %s %s\n ",st1,st2,st3,st4);
}
这个程序分别有四个数组,一行输入字符的空个网格段分别加载到四个数组中。然后分别输出这四个数组中的字符串。如前所述,scanf的条目必须以地址的形式出现,如&a,&b等。但在示例4.8中,它以数组名的形式出现。为什么?这是因为在C语言中,数组名代表数组的第一个地址。整个数组是从第一个地址开始的连续内存单元。如果有一个字符数组char c[10],可以在内存中表示出来,如图4.2所示。设数组C的第一个地址是2000,也就是说单元c[0]的地址是2000。数组名c代表第一个地址。所以地址运算符&不能加在C. Write scanf("%s ",&c)之前;是错误的。函数printf("%s ",C)执行时,通过数组名C找到第一个地址,然后逐个输出数组中的每个字符,直到遇到字符串标志' [3] '结束。

[4]

[5]

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C语言考试辅导教程第四章:数组[3]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情