在编程中,二维数组适合用于需要按行和列组织数据的场景,尤其当数据具有二维结构时(如表格、矩阵、棋盘等)。
1.定义二维数组
1.二维数组的基本语法如下:
数据类型 数组名[行数][列数];
数据类型
:表示数组中元素的类型,例如int
、float
、char
等。数组名
:是自定义的数组名称,要符合 C 语言标识符的命名规则。行数(column)
:指定二维数组有多少行。列数(row)
:指定二维数组每一行有多少列。
2.c语言是特殊的一维数组
2.初始化二维数组
#include <stdio.h>
int main()
{
// 定义一个 2 行 3 列的二维数组,并进行初始化
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};//全部初始化
int arr3[2][3] = {{1},{0,11,0}};//部分初始化
int arr2[][3] = {{2,2,3},{4,0,6}};//省略行数,行可不写,列要写数值
// 定义两个整型变量 i 和 j,用于作为循环的计数器
int i, j;
// 外层循环控制行数,从第 0 行到第 1 行
for (i = 0; i < 2; i++) {
// 内层循环控制列数,从第 0 列到第 2 列
for (j = 0; j < 3; j++) {
// 使用制表符分隔元素,使输出更整齐
printf("%d\t",arr3[i][j]);
// printf("%d,%p ", arr3[i][j], &arr3[i][j]); // 打印当前元素的值和该元素的内存地址
}
// 每打印完一行元素后,换行
putchar('\n');
}
// 程序正常结束,返回 0
return 0;
}
案例:有一个 3×4 的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#include <stdio.h>
int main()
{
// 定义用于循环计数的变量 i 和 j
int i, j;
// 定义变量 max 用于存储最大值
int max;
// 定义变量 行 用于记录最大值所在的行
int row;
// 定义变量 列 用于记录最大值所在的列
int col;
// 定义并初始化一个 3 行 4 列的二维数组
int arr[3][4] = {1, 2, 4, 6, 7, 9, 45, 56, 78, 98, 34, 46};
// 遍历二维数组并打印每个元素
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
// 使用制表符分隔元素,使输出更整齐
printf("%d\t", arr[i][j]);
}
// 每行元素打印完后换行
printf("\n");
}
// 假设数组的第一个元素为最大值
max = arr[0][0];
// 再次遍历二维数组,找出最大值
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
// 如果当前元素比 max 大
if (max < arr[i][j]) {
// 更新最大值
max = arr[i][j];
// 记录最大值所在的行
row = i;
// 记录最大值所在的列
col = j;
}
}
}
// 输出最大值所在的行、列以及最大值本身,行和列从 1 开始计数
printf("输出最大在第%d行,第%d列,最大值为%d", row + 1, col + 1, max);
return 0;
}
- 定义并初始化矩阵:
int arr[3][4]
创建 3 行 4 列的二维数组,存储矩阵数据。 - 初始化最大值及位置:先把矩阵第一个元素arr
[0][0]
设为初始最大值,记录其行列。 - 双重循环遍历:
- 外层循环控制行(
i
从 0 到 2,共 3 行)。 - 内层循环控制列(
j
从 0 到 3,共 4 列)。 - 每次比较当前元素arr
[i][j]
和记录的max
,若更大,就更新max
及对应的row
、col
。
- 外层循环控制行(
- 输出结果:用
printf
打印最大值及其行列号。