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("Level %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