您的当前位置:首页8.2二维数组和字符串

8.2二维数组和字符串

2024-07-16 来源:爱问旅游网



例:一个专业当中同学分为不同的班级,引进二维数组
一、二维数组
(一)二维数组的定义
1.定义方式:
数据类型数组名[常量表达式][常量表达式]
其中,第一个常量表达式代表数组的行数,第二个表达式代表数组的列数,元素个数=行数*列数
注意:第一个常量表达式可以为空,但第二个常量表达式不能为空

例:int a[3][4]; /*表示整型二维数组,有34 */ 该数组下标共有3×4个,即:

a[0]





a[1]





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()
{
inta[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("\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=

1 2 3

b=

1 4

2 5

4 5 6

3 6

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]

输出:


程序:
main() #include<stdio.h>

{
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf(“arraya:\n”);
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)

{

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






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.定义:用来存放字符数据的数组是字符数组。字符数组中的一个元素存 放一个字符。

例:charc[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)用字符串常量
charch[6]={“hello”};
charch[6]=”hello”;
charch[]=”hello”;

h

e

l

l

o

\0

ch[0]

ch[1]

ch[2]

ch[3]

ch[4]

ch[5]

注意:把字符串赋给字符数组时,该数组定义的大小一定要比所赋予的字符串

的长度要多一个空间,用来存储字符串结束标志“\0”。如果所赋予的字符串长度比数组所定义的大小要小,那么没有被赋予的字符的数组元素将会被直接赋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

(二)字符串的输入输出



1.逐个字符输入输出。用“%c”输入或输出一个字符。

例:用%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()
{
charstr[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()
{



}

结果为:

总结:用%s输出时,遇到”\0”结束;数组中有多个”\0”时,遇到第一个结束。

(三)字符串输入输出函数
包含在头文件stdio.h
1.字符串输出函数puts

格式:puts(字符数组)





功能:向显示器输出字符串
说明:字符数组必须以”\0”结束
2.字符串输入函数gets
格式:gets(字符数组)
功能:从键盘输入一个以回车结束的字符串放入字符数组中,并自动 加“\0”
说明:输入串长度应小于字符数组维数
#include <stdio.h>
main( )
{ char string[80];
printf(“Input a string:”);
}
输入: Jin Hua
输出: Jin Hua
三、字符处理函数(包含在头文件string.h
(一)字符串连接函数strcatSTRingCATenate 字符串连接)
例子:charstr1[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’
(二)字符串拷贝函数strcpySTRingCoPY 字符串复制)
例子:charstr1[10],str2[]={“china”};
strcpy(str1,str2);

执行后,str1 状态为:

功能:将字符串2,拷贝到字符数组1 中去格式:strcpy(字符数组1,字符串2)

返值:返回字符数组1的首地址
说明:(1)字符数组1必须足够大
2)拷贝时‘\0’一同拷贝
3)不能使用赋值语句为一个字符数组赋值
(三)字符串比较函数strcmpSTRingCoMPare 字符串比较) 例子:strcmp(“beijing”,”Sheng yang”);
格式:strcmp(字符串1,字符串2)

功能:比较两个字符串



比较规则:对两串从左向右逐个字符比较(ASCII 码),直到遇到不同字符



或‘\0’为止
返值:返回int型整数,(1)若字符串1< 字符串2,返回负整数 2)若字符串1> 字符串2,返回正整数 3)若字符串1= = 字符串2,返回零
说明:字符串比较不能用“==”,必须用strcmp
(四)字符串长度函数strlenSTRingLENgth 字符串长度)
例子:charstr[10]={“China”};
printf(“%d”,strlen(str));
结果为:5
格式:strlen(字符数组)
功能:计算字符串长度
返值:返回字符串实际长度,不包括‘\0’在内



显示全文