C语言二维数组与字符数组详解

C语言二维数组与字符数组详解

目录

C语言二维数组

一、二维数组

1、二维数组的定义

2、二维数组的引用

3、二维数组的初始化

​编辑

二、字符数组

1、字符数组的定义

2、字符数组的初始化

​编辑3、字符数组的结束标志

4、输出字符串

5、输入字符串

三、总结

C语言二维数组

一、二维数组

1、二维数组的定义

定义二维数组的一般形式为: 类型名: 数组名[常量表达式][常量表达式]

float data[1][2]

float 表明定义了一个浮点型的数组,data 是数组名;根据定义时的顺序,[1] 表示第1维数据,[2] 表示第2维数据。同样也直接用常量来表达,pay[2][3]; 也可以用常量和符号组合表达,pay[1+1][2]; 但 pay[n][3] 是不合法的,因为计算机不知道 n 是多少。

data[1][2]中第一维表示行第二维表示列,这里就是一行两列。data[0][0],data[0][1]

二维数组的行列,也会称作0行,0列。

二维数组定义时,指定数组长度的是常量表达式。

2、二维数组的引用

二维数组元素的引用形式为:数组名[下标][下标]

#include

int main()

{

int data[2,3];//定义 data为2×3的二维数组

data[1][2]=2;//数组中最后一个元素

return 0;

}

3、二维数组的初始化

在定义二维数组时,可以直接赋值,这个过程称为数组的初始化。 与一维数组类似,二维数组也有多种写法。

二维数组初始化时,一般有四种写法: 1)分行给二维数组赋初值; 2)将所有数据写在一个花括号内; 3)可以对部分元素赋初值; 4)对全部元素赋初值,1维的长度不指定,2维的长度不能省。(tips:当元素不能整除时,例,int a[][2]={1,2,3,4,5}; 计算结果为 5 / 2 = 2.5。此时,会向上取整,即结果为3,表示数组为3行2列,最后一个元素补0。)

int a[2][3] = {{1,2,3},{4,5,6}};//把第1个花括号内的数据给第1行的元素,第2个花括号内的数据赋给第2行元素

int a[2][3] = {1,2,3,4,5,6};//系统会按顺序对各元素赋初值

int a[2][3] = {{1},{5}};//使用按行赋值 int a[2][3]={{1},{5}} ,默认给每行第一个元素,余下值为0;

int a[][3] = {1,2,3,4,5,6};//系统会根据总个数和第2维长度计算出第1维的长度。

小结:(1)若定义了数组长度,赋值的元素不能超过数组长度; (2)若定义时不指定第1维数组长度,系统会根据总个数和第2维长度计算1维长度。

编程题1:依次输出二维数组 int a[3][4]={{1,2,3,4},{4,5,6,7},{8,9,10,11}};中的元素。试编程

#include

int main()

{

int a[3][4]={{1,2,3,4},{4,5,6,7},{8,9,10,11}};

int i,j;

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

printf("%d\t",a[i][j]);

}

printf("\n");

}

return 0;

}

编程题2:将一个二维数组行和列的元素互换,存在另一个二维数组中。试编程。

#include

int main()

{

int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

for(i=0;i<=1;i++)

for(j=0;j<=2;j++)

b[j][i] = a[i][j];

/* 利用for循环输出数组b */

for(j=0;j<=2;j++)

{

for(i=0;i<=1;i++)

printf("%d\t",b[j][i]);

printf("\n");

}

return 0;

}

二、字符数组

1、字符数组的定义

定义字符数组的一般形式为: char 数组名[常量表达式]

2、字符数组的初始化

在定义时,可以直接赋值,这个过程称为字符数组的初始化。

字符数组初始化有四种写法: 1)定义数组时,对全部数组元素赋予初值; 2)定义数组时,只给部分元素赋值; 3)不定义数组长度,对全部数组元素赋予初值; 4)使用双引号,将字符串赋值给数组。

char c[4]={'m','e','t','a'};//定义字符数组 c ,有4个元素,依次赋值4个元素。

char c[5]={'m','e','t','a'};//定义字符数组 c 长度为5,但只有4个初值,其余的系统会自动赋值为 '\0'(空字符)。

char c[]={'m','e','t','a'};//定义字符数组 c 时,省略了数组长度,系统会自动根据初值个数确定长度。

char c[]={"meta"};//定义数组时,用双引号,将整个字符串赋值给数组,花括号可以省略不写。

3、字符数组的结束标志

C语言使用字符'\0'作为字符串的终止标志,当程序遇到该字符时即判定字符串结束。

程序运行时,第一次遇到该字符就表示结束,把它前面的组成一个字符串。 '\0' 也占一个位置

用字符串来初始化字符数组时,在不指定数组长度的情况下,会默认加一个 '\0'。

4、输出字符串

字符数组的输出,可以有多种写法:1. 逐个输出; 2. 整体输出。

1.逐个输出需要使用 for 循环,配合格式符 %c ,每循环一次,输出一个字符。

#include

int main()

{

char c[]={"I am fine"};

int i;

for(i=0;i<=8;i++)

printf("%c",c[i]);

printf("\n");

return 0;

}

2.此外,printf 也支持整体输出一般形式为:printf("%s\n", 数组名) 注意,输出整个字符串时,使用格式符为 %s,配合数组名。

C语言提供了一些执行功能的函数,例如,输出字符串的函数 puts(). 一般形式为:puts(字符数组名)

#include

int main()

{

char c[]={"I am lucky"};

puts(c);

return 0;

}

5、输入字符串

字符数组的输入有2种写法:1. 逐个输入;2. 整体输入。

1.使用 scanf() 输入字符串的格式为,scanf("%s", a)在定义字符数组长度时,一定要大于字符串的长度

#include

int main()

{

char a[5];

scanf("%s",a); //输入字符"good"

return 0;

}

注意,使用 scanf 输入字符数组时,不加地址符 &。

2.C语言也提供了输入字符串的函数,一般形式为:gets(字符数组名),gets函数中只能放一个数组名,不能写成 gets(a,b);

#include

int main()

{

char a[10];

gets(a);

return 0;

}

三、总结

相关推荐