8.2二维数组和字符串
- 格式:doc
- 大小:87.50 KB
- 文档页数:10
例:一个专业当中同学分为不同的班级,引进二维数组 一、二维数组 (一)二维数组的定义 1.定义方式: 数据类型 数组名[常量表达式][常量表达式]; 其中,第一个常量表达式代表数组的行数,第二个表达式代表数组的列数,元素个数=行数*列数 注意:第一个常量表达式可以为空,但第二个常量表达式不能为空。 例:int a[3][4]; /*表示整型二维数组,有3行4列*/ 该数组下标共有3×4个,即:
a[0] a[0][0] a[0][1] a[0][2] a[0][3] a[1] a[1][0] a[1][1] a[1][2] a[1][3] a[2] a[2][0] a[2][1] a[2][2] a[2][3] 说明:在声明二维数组int[3][4]以后,可以把二维数组a认为含有3个元素的一维数组,这3个元素就是a[0],a[1],a[2],每一个元素就相当于一行,每一个元素又是含有4个元素的一维数组。 存储方式:在C语言中,二维数组是按行序优先存放的,先存放a[0]行元素,再存放a[1]行元素,最后存放a[2]行元素。 (二)二维数组元素的引用 形式:数组名[下标][下标] 其中,第一个下标为行下标,第二个下标为列下标。 例:引用第2行第3列的数组,即a[1][2](数组的行列下标从0开始) 注意:在二维数组中,不能整体引用整个数组,只能对单个元素进行操作。 main() { int a[2][3],i,j; for(i=0;i<2;i++) /*引用二维数组的行*/ for(j=0;j<3;j++) /*引用二维数组的列*/ scanf("%d",&a[i][j]); for(i=0;i<2;i++) { for(j=0;j<3;j++) /*加上{},实现每输出一行就换行的操作*/ printf("%d ",a[i][j]); printf("\n"); } } (三)二维数组元素的初始化 分行初始化 按元素排列顺序初始化 全部初始化 int a[2][3]={{1,2,3},{4,5,6}}; int a[2][3]={1,2,3,4,5,6}; 部分初始化 int a[2][3]={{1,2},{4}}; int a[2][3]={1,2,4}; 第一维长度省略初始化 int a[][3]={{1},{4,5}}; int a[][3]={1,2,3,4,5};
(四)二维数组举例 将一个二维数组行和列的元素互换,存到另一个二维数组中。 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 6 b[0][0] b[1][0] b[2][0] b[0][1] b[1][1] b[2][1] 输出: b[0][0] b[0][1] b[1][0] b[1][1] b[2][0] b[2][1] 程序: #include main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf(“array a:\n”); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { printf(“%5d”,a[i][j]);
a= 1 2 3 4 5 6 b= 1 4
2 5 3 6 b[j][i]=a[i][j]; } printf(“\n”); } printf(“array b:\n”); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) printf(“%5d”,b[i][j]); printf(“\n”); } } 二、字符数组和字符串 (一)字符数组 1.定义:用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。 例:char c[7]; c[0]=’j’;c[1]=’i’;c[2]=’n’;c[3]=’ ’;c[4]=’h’;c[5]=’u’;c[6]=’a’; 2.字符数组的初始化 (1)逐个字符赋值 char ch[5]={‘h’,’e’,’l’,’l’,’o’}; h e l l o ch[0] ch[1] ch[2] ch[3] ch[4] (2)用字符串常量 char ch[6]={“hello”}; char ch[6]=”hello”; char ch[]=”hello”; h e l l o \0 ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] 注意:把字符串赋给字符数组时,该数组定义的大小一定要比所赋予的字符串的长度要多一个空间,用来存储字符串结束标志“\0”。如果所赋予的字符串长度比数组所定义的大小要小,那么没有被赋予的字符的数组元素将会被直接赋予“\0”。例:char ch[5]=”boy”; 二维字符数组初始化 char fruit[][7]={“apple”,”orange”,”grape”,”pear”,”peach”}; a p p l e \0 \0 o r a n g e \0 g r a p e \0 \0 p e a r \0 \0 \0 p e a c h \0 \0 (二)字符串的输入输出 1.逐个字符输入输出。用“%c”输入或输出一个字符。
b o y \0 \0 例:用%c main() { char str[5]; int i; for(i=0;i<5;i++) scanf(“%c”,&str[i]); for(i=0;i<5;i++) printf(“%c”,str[i]); } 2.将整个字符串一次输入或输出。用“%s”对字符串(string)输入或输出。 例:用%s main() { char str[5]; scanf(“%s”,str); printf(“%s”,str); } 例1 main( ) { char a[5]={‘H’,’e’,’l’,’l’,’o’}; printf(“%s\n”,a); } 结果为: 例2 main( ) { char a[ ]=“Hello”; printf(“%s\n”,a); }
结果为: 例3 main() { char a[]={'h','e','l','\0','l','o','\0'}; printf("%s\n",a); }
结果为: 总结:用%s输出时,遇到”\0”结束;数组中有多个”\0”时,遇到第一个结束。 (三)字符串输入输出函数 包含在头文件stdio.h 1.字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串 说明:字符数组必须以”\0”结束 2.字符串输入函数gets 格式:gets(字符数组) 功能:从键盘输入一个以回车结束的字符串放入字符数组中,并自动加“\0” 说明:输入串长度应小于字符数组维数 例 #include main( ) { char string[80]; printf(“Input a string:”); gets(string); puts(string); } 输入: Jin Hua 输出: Jin Hua 三、字符处理函数(包含在头文件string.h) (一)字符串连接函数strcat(STRing CATenate字符串连接) 例子:char str1[30]={“I am ”}; char str2[]={“Jin Hua”}; printf(“%s”,strcat(str1,str2)); 结果为:I am Jin Hua 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:(1)字符数组1必须足够大 (2)连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,新串 最后加‘\0’ (二)字符串拷贝函数strcpy(STRing CoPY字符串复制) 例子:char str1[10],str2[]={“china”}; strcpy(str1,str2); 执行后,str1状态为:
格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:(1)字符数组1必须足够大 (2)拷贝时‘\0’一同拷贝 (3)不能使用赋值语句为一个字符数组赋值 (三)字符串比较函数strcmp(STRing CoMPare字符串比较) 例子:strcmp(“bei jing”,”Sheng yang”); 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
c h i n a \0 \0 \0 \0 \0