C语言二维数组详解(非常详细)
C语言中的二维数组可以看作是特殊的一维数组,其各个元素仍然是一个数组。
定义二维数组的形式如下:
不管是行下标还是列下标,其索引都是从 0 开始的。因此,一个 m 行 n 列的二维数组 array[m][n],其行下标取值范围为 0~m−1,列下标取值范围为 0~m−1,最大下标元素是 array[m−1][n−1]。
例如,定义一个 3 行 4 列的整型数组,代码如下:
和一维数组一样,二维数组也要注意下标越界的问题。例如:
1) 将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。例如:
2) 为所有元素赋初值时,可以省略行下标,但不能省略列下标。例如:
3) 分行给数组元素赋值。例如:
4) 直接对数组元素赋值。例如:
【实例】一个 3×3 的网格,将 1~9 的数字放入方格中(矩阵中心元素为 5),使得每行、每列以及每条对角线上的 3 个数相加都相同。通过键盘为二维数组元素赋值,并显示二维数组。
运行程序,输出结果为:
运行程序,显示效果为:
定义二维数组的形式如下:
数据类型 数组名[常量表达式1][常量表达式2];其中,“常量表达式1”定义了二维数组的行数,“常量表达式2”定义了二维数组的列数。
不管是行下标还是列下标,其索引都是从 0 开始的。因此,一个 m 行 n 列的二维数组 array[m][n],其行下标取值范围为 0~m−1,列下标取值范围为 0~m−1,最大下标元素是 array[m−1][n−1]。
例如,定义一个 3 行 4 列的整型数组,代码如下:
int array[3][4];二维数组 array[3][4] 共包含 12 个数组元素(3×4),分别为:
array[0][0]、array[0][1]、array[0][2]、array[0][3]
array[1][0]、array[1][1]、array[1][2]、array[1][3]
array[2][0]、array[2][1]、array[2][2]和array[2][3]
C语言二维数组的引用
二维数组元素的引用形式为“数组名[下标][下标]”。例如,array[1][2] 表示对 array 数组的第 2 行第 3 个元素进行引用。和一维数组一样,二维数组也要注意下标越界的问题。例如:
int array[2][4]; ... array[2][4]=9; //错误,下标越界!
C语言二维数组的初始化
二维数组赋初值,有以下 4 种情况。1) 将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。例如:
int array[2][2] = {1,2,3,4};如果大括号内的数据少于数组元素的个数,则系统会默认后面未被赋值的元素值为 0。
2) 为所有元素赋初值时,可以省略行下标,但不能省略列下标。例如:
int array[][3] = {1,2,3,4,5,6};系统会根据数据的个数进行分配,一共有 6 个数据,而数组分为 3 列,因此数组有 2 行。
3) 分行给数组元素赋值。例如:
int a[2][3] = {{1,2,3},{4,5,6}};在分行赋值时,可以只对部分元素赋值。例如,下面的代码中:
int a[2][3] = {{1,2},{4,5}};
- a[0][0] 的值是 1;
- a[0][1] 的值是 2;
- a[0][2] 的值是 0;
- a[1][0] 的值是 4;
- a[1][1] 的值是 5;
- a[1][2] 的值是 0。
4) 直接对数组元素赋值。例如:
int a[2][3]; a[0][0] = 1; a[0][1] = 2;
【实例】一个 3×3 的网格,将 1~9 的数字放入方格中(矩阵中心元素为 5),使得每行、每列以及每条对角线上的 3 个数相加都相同。通过键盘为二维数组元素赋值,并显示二维数组。
#include<stdio.h> int main() { int a[3][3]; /*定义二维数组*/ int i,j; /*定义循环控制变量*/ for(i=0;i<3;i++) /*先行后列,依次输入数据,为数组元素赋值*/ { for(j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); } } printf("输出二维数组:\n"); /*信息提示*/ for(i=0;i<3;i++) /*先行后列,循环输出所有数组元素的值*/ { for(j=0;j<3;j++) { printf("%d\t",a[i][j]); /*使用制表符控制间距,可排列更整齐*/ } printf("\n"); /*使数组元素分行显示*/ } return 0; }程序先依次输入相应的数组元素值,然后将这个 3 行 3 列的数组输出:
- 给数组赋值时,使用了 for 循环嵌套,第一层循环行,第二层循环列,用 printf() 函数输出元素名,用 scanf() 函数输入数据,赋给对应的数组元素。
- 输出数组时,也使用了 for 循环嵌套,第一层循环行,第二层循环列,用 printf() 函数逐行输出数组元素。为了使输出的数据更整齐,使用制表符“\t”来控制间距。
运行程序,输出结果为:
a[0][0]=2 a[0][1]=7 a[0][2]=6 a[1][0]=9 a[1][1]=5 a[1][2]=1 a[2][0]=4 a[2][1]=3 a[2][2]=8输出二维数组:
2 7 6
9 5 1
4 3 8
C语言二维数组的应用
【实例】本实例中,把二维数组中各行的元素换成列元素,各列的元素换成行元素,生成一个新的二维数组。代码如下:#include<stdio.h> int main() { int a[2][3],b[3][2]; /*定义两个数组*/ int i,j; /*定义循环控制变量*/ for(i=0;i<2;i++) /*先行后列,输入数据,为数组元素赋值*/ { for(j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); } } printf("输出二维数组:\n"); /*信息提示*/ for(i=0;i<2;i++) /*先行后列,循环输出二维数组 a 中的元素*/ { for(j=0;j<3;j++) { printf("%d\t",a[i][j]); } printf("\n"); /*使数组元素分行显示*/ } for(i=0;i<2;i++) /*将数组 a 转置后存入数组 b 中*/ { for(j=0;j<3;j++) { b[j][i] = a[i][j]; /*通过行列互换,b 为 a 的转置数组*/ } } printf("输出转换后的二维数组:\n"); for(i=0;i<3;i++) /*先行后列,循环输出转置数组 b 中的元素*/ { for(j=0;j<2;j++) { printf("%d\t",b[i][j]); } printf("\n"); /*使数组元素分行显示*/ } return 0; }
- 利用双重 for 循环为 2 行 3 列的数组赋值,然后分行显示其元素。
- 通过一个双重 for 循环,将二维数组 a 中的元素赋值到转置后的二维数组 b 中。
- 通过循环控制,将转置后的二维数组 b 中的元素输出。
运行程序,显示效果为:
a[0][0]=12 a[0][1]=34 a[0][2]=25 a[1][0]=78 a[1][1]=65 a[1][2]=95 输出二维数组: 12 34 25 78 65 95 输出转换后的二维数组: 12 78 34 65 25 95