在C语言中,二维数组是一种可以存储表格数据的数组结构。二维数组的每个元素本身也是一个数组,可以通过行和列的索引来访问。
定义二维数组
二维数组的定义语法如下:
data_type array_name[rows][columns];
- data_type 是数组中元素的类型,例如 int、float、char 等。
- array_name 是数组的名称。
- rows 和 columns 分别表示数组的行数和列数。
1. 整数类型的二维数组:
int matrix[3][4];
这个定义了一个名为 matrix 的二维数组,它有 3 行 4 列。每个元素都是一个 int 类型的整数。
2. 字符类型的二维数组:
char grid[2][5];
这个定义了一个名为 grid 的二维数组,它有 2 行 5 列。每个元素都是一个字符。
3. 带初始值的二维数组:
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
这个定义了一个 2 行 3 列的数组,并初始化了其元素。
引用二维数组的元素
引用二维数组中的元素需要使用两个下标:一个表示行索引,另一个表示列索引。语法如下:
array_name[row_index][column_index]
示例
假设我们有以下数组定义:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
1. 访问单个元素:
要访问数组中的某个元素,例如第二行第三列的元素,可以使用:
int value = matrix[1][2]; // value = 7
在C语言中,数组的索引从 0 开始,因此 `matrix[1][2]` 实际上是第二行第三列的元素。
2. 修改元素:
可以通过索引直接修改数组中的元素,例如:
matrix[0][0] = 10; // 将第一行第一列的元素设置为 10
3. 遍历二维数组:
可以使用嵌套的 for 循环遍历整个二维数组:
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
以上将打印整个 matrix 数组的内容。
总结
- 定义二维数组:指定数据类型、数组名称以及行列数。
- 引用二维数组:使用两个下标,分别代表行和列。
- 遍历和操作二维数组:可以使用循环和索引来访问和修改数组中的元素。
二维数组的初始化可以在声明时直接赋值,或者在运行时逐个赋值。
初始化二维数组
1. 在声明时初始化
在声明二维数组时可以直接赋值给数组中的元素。这种方法最常见于数组元素已知的情况。
// 定义并初始化一个 3x4 的整数二维数组
int matrix[3][4] = {
{1, 2, 3, 4}, // 第一行
{5, 6, 7, 8}, // 第二行
{9, 10, 11, 12} // 第三行
};
在这种初始化方法中,数组的每一行可以用一个大括号 `{}` 包括起来,元素之间用逗号隔开。如果省略内层的花括号,编译器会按顺序填充数组。
2. 部分初始化
如果只想初始化部分元素,剩下的元素会自动初始化为 0(对数值类型的数组)。
int matrix[3][4] = {1, 2, 3}; // 只有第一个元素被显式初始化为1,其他默认为0
3. 运行时初始化
二维数组也可以在运行时逐个元素进行赋值。这通常通过循环实现。
int matrix[3][4];
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
matrix[i][j] = i * j; // 赋值操作
}
}
示例程序
以下是几个使用二维数组的示例程序。
示例 1:求和二维数组的所有元素
#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int sum = 0;
// 遍历所有元素,计算总和
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
sum += matrix[i][j];
}
}
printf("Sum of all elements: %d\n", sum);
return 0;
}
定义并初始化了一个 3x4 的整数二维数组,然后计算并打印所有元素的总和。
示例 2:矩阵转置
#include <stdio.h>
int main() {
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int transpose[3][3];
// 计算矩阵的转置
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
transpose[j][i] = matrix[i][j];
}
}
// 输出转置后的矩阵
printf("Transpose of the matrix:\n");
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
return 0;
}
计算了一个 3x3 矩阵的转置,并输出转置后的矩阵。转置操作是交换矩阵的行和列。
示例 3:查找二维数组中的最大值
#include <stdio.h>
int main() {
int matrix[2][3] = {
{3, 5, 7},
{2, 8, 6}
};
int max = matrix[0][0];
// 查找最大值
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
}
}
}
printf("Maximum value: %d\n", max);
return 0;
}
该程序查找并打印二维数组中的最大值。