C语言中的多维数组

你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索C语言中的多维数组。如果你是编程新手,不用担心——我会成为你的友好向导,我们会一步步攻克这个主题。在本教程结束时,你将能熟练地处理这些强大的数据结构!

C - Multi-Dimensional Arrays

C语言中的多维数组

让我们从基础开始。想象你有一堆盒子,每个盒子里又有更多的盒子。这就是多维数组的基本概念——一种在多个级别或维度上组织数据的方式。

在C语言中,我们可以创建超过一个维度的数组。最常见的是2D(二维)和3D(三维)数组,但理论上,你可以拥有任意多的维度,只要你的电脑内存允许!

以下是一个简单的声明2D数组的方法:

int matrix[3][4];

这创建了一个名为matrix的2D数组,包含3行和4列。你可以将其想象为一个3行4列的网格或表格。

C语言中的二维数组

让我们通过一个实际例子更深入地了解2D数组。想象你正在创建一个简单的井字棋游戏板:

#include <stdio.h>

int main() {
char board[3][3] = {
{'_', '_', '_'},
{'_', '_', '_'},
{'_', '_', '_'}
};

// 打印游戏板
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}

return 0;
}

在这个例子中,我们创建了一个3x3的井字棋游戏板。每个单元格都初始化为下划线'_',代表空位。然后我们使用嵌套循环来打印游戏板。

外循环for(int i = 0; i < 3; i++)遍历每一行,而内循环for(int j = 0; j < 3; j++)遍历该行的每一列。

C语言中的三维数组

现在,让我们升级难度,探索3D数组。想象你正在设计一个简单的3D游戏世界:

#include <stdio.h>

int main() {
int gameWorld[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};

// 打印游戏世界
for(int i = 0; i < 2; i++) {
printf("层级 %d:\n", i+1);
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 4; k++) {
printf("%2d ", gameWorld[i][j][k]);
}
printf("\n");
}
printf("\n");
}

return 0;
}

在这里,我们创建了一个3D数组gameWorld,包含2个层级,每个层级有3行和4列。你可以将其想象为两个2D网格堆叠在一起。

我们使用三个嵌套循环来打印这个3D世界。最外层循环遍历每个层级,中间的循环遍历层级中的每一行,最内层循环遍历行中的每一列。

多维数组元素的行和

现在,让我们尝试一些更实际的内容。我们将计算2D数组中每一行的和:

#include <stdio.h>

int main() {
int grades[3][4] = {
{85, 92, 78, 88},
{91, 87, 93, 89},
{76, 82, 95, 90}
};

printf("学生  数学  科学  英语  历史  总分\n");
printf("----------------------------------------------\n");

for(int i = 0; i < 3; i++) {
int sum = 0;
printf("%7d", i+1);
for(int j = 0; j < 4; j++) {
printf("%8d", grades[i][j]);
sum += grades[i][j];
}
printf("%8d\n", sum);
}

return 0;
}

在这个例子中,我们有一个2D数组grades,代表3个学生在4门科目中的成绩。我们计算每个学生(行)的成绩总和,并打印出来。

矩阵乘法

最后,让我们执行矩阵乘法——这是许多科学和工程应用中的常见操作:

#include <stdio.h>

int main() {
int matA[2][3] = {{1, 2, 3}, {4, 5, 6}};
int matB[3][2] = {{7, 8}, {9, 10}, {11, 12}};
int result[2][2] = {{0, 0}, {0, 0}};

// 执行矩阵乘法
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
for(int k = 0; k < 3; k++) {
result[i][j] += matA[i][k] * matB[k][j];
}
}
}

// 打印结果
printf("矩阵乘法的结果:\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}

return 0;
}

在这里,我们乘以两个矩阵matA(2x3)和matB(3x2),得到一个result矩阵(2x2)。三个嵌套循环执行乘法:外两层循环迭代结果矩阵的每个元素,而最内层循环计算该元素的值。

就是这样!我们已经涵盖了C语言中多维数组的基础知识,从2D到3D,甚至处理了一些实际应用。记住,熟能生巧,所以不要犹豫,自己动手尝试这些概念吧。编程愉快!

Credits: Image by storyset