C语言程序设计:二维数组
1. 引入
二维数组是C语言中一个非常常用的数据结构,通常用来表示矩阵、表格等数据结构。二维数组本质上是由多个一维数组组成的数组,可以用于存储具有行和列的矩阵数据。学习如何定义、操作、访问二维数组是掌握C语言数组操作的重要一环。
本文将介绍如何在C语言中定义、初始化和操作二维数组,包括向二维数组中添加、修改、查询数据以及如何遍历二维数组。
2. 二维数组的定义与初始化
2.1 二维数组的定义
二维数组的定义形式如下:
type array_name[row_size][col_size];
type:数组元素的类型,如int、float等。array_name:数组名称。row_size:数组的行数。col_size:数组的列数。
示例:定义一个二维整数数组
int matrix[3][4]; // 定义一个3行4列的二维数组
在这个例子中,matrix 是一个 3 行 4 列的二维数组。
2.2 二维数组的初始化
二维数组可以通过两种方式进行初始化:
1. 显式初始化(手动指定每个元素的值)
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
在这个例子中,matrix 是一个 2 行 3 列的二维数组,元素按照指定的顺序初始化。
2. 隐式初始化(省略行数或列数)
如果在初始化时省略了行数或列数,编译器会根据数组初始化时的元素数量自动推断:
int matrix[][3] = {
{1, 2, 3},
{4, 5, 6}
};
在这种情况下,编译器会推断出数组有 2 行 3 列。
3. 二维数组的操作
3.1 向二维数组添加数据
二维数组的大小在定义时已经固定,不能动态扩展。但是,可以通过更新特定位置的元素来模拟“添加”数据的操作。
示例:向二维数组添加数据
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 向第二行第三列添加数据
matrix[1][2] = 10;
// 输出修改后的二维数组
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
输出:
1 2 3
4 5 10
3.2 修改二维数组中的数据
通过访问二维数组的元素位置(使用行和列的索引),可以修改其中的值。
示例:修改二维数组中的数据
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 修改第一行第二列的元素
matrix[0][1] = 20;
// 输出修改后的二维数组
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
输出:
1 20 3
4 5 6
3.3 查询二维数组中的数据
查询二维数组中的数据可以通过索引访问来实现。可以用循环遍历数组中的所有元素,或者直接访问特定的元素。
示例:查询二维数组中的数据
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int value = 5; // 要查询的值
int found = 0; // 查询结果标志
// 遍历二维数组查找目标值
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
if (matrix[i][j] == value) {
printf("值 %d 在数组的位置是:(%d, %d)\n", value, i, j);
found = 1;
break;
}
}
if (found) break;
}
if (!found) {
printf("未找到值 %d\n", value);
}
return 0;
}
输出:
值 5 在数组的位置是:(1, 1)
3.4 遍历二维数组
遍历二维数组时,通常使用两层嵌套的 for 循环:第一层遍历行,第二层遍历列。
示例:遍历二维数组并打印所有元素
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 遍历二维数组并打印元素
printf("二维数组的所有元素是:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
输出:
二维数组的所有元素是:
1 2 3
4 5 6
4. 总结
- 定义二维数组:通过
type array_name[row_size][col_size]的方式定义二维数组。 - 初始化二维数组:可以使用显式或隐式初始化的方法,明确指定数组的每个元素。
- 添加数据:通过索引访问特定位置,修改其值来实现“添加”元素的效果。
- 修改数据:可以直接访问指定索引的元素进行修改。
- 查询数据:通过遍历数组或直接访问某个元素来查询数据。
- 遍历数组:通常使用嵌套循环来遍历二维数组中的所有元素。
5. 练习题
1. 题目:编写一个程序,计算二维数组中所有元素的和。
答案:
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int sum = 0;
// 计算二维数组元素的和
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
sum += matrix[i][j];
}
}
printf("二维数组元素的和是:%d\n", sum);
return 0;
}
2. 题目:编写一个程序,查找二维数组中最大的元素并输出其位置。
答案:
#include <stdio.h>
int main() {
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int max = matrix[0][0];
int row_pos = 0, col_pos = 0;
// 查找最大元素的位置
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
row_pos = i;
col_pos = j;
}
}
}
printf("最大元素是:%d,位置是:(%d, %d)\n", max, row_pos, col_pos);
return 0;
}
3. 题目:编写一个程序,按行输出二维数组的每一行。
答案:
#include <stdio.h>
int main() {
int matrix[2][3] = {
{10, 20, 30},
{40, 50, 60}
};
// 按行输出二维数组
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
评论区