C言語における多次元配列

こんにちは、未来のプログラマーたち!今日は、C言語における多次元配列の世界に興味深く飛び込みましょう。プログラミングが初めてであっても心配しないでください。私はあなたの親切なガイドとして、このトピックをステップバイステップで取り上げます。このチュートリアルの終わりまでに、これら強力なデータ構造を扱うプロになるでしょう!

C - Multi-Dimensional Arrays

C言語における多次元配列

まず基本から始めましょう。あなたがたくさんの箱を持っていて、それぞれの箱の中にさらに箱が入っていると想像してみてください。それはまさに多次元配列です。データを複数のレベルや次元で組織化する方法です。

C言語では、1次元以上の配列を作成できます。最も一般的なのは2次元(二次元)と3次元(三次元)の配列ですが、理論的にはコンピューターのメモリに许可されるだけ多くの次元を持つことができます!

以下は2次元配列を簡単に宣言する方法です:

int matrix[3][4];

これは3行4列の2次元配列 matrix を作成します。これを3行4列のグリッドまたはテーブルと考えてください。

C言語における2次元配列

2次元配列についてさらに深く掘り下げるための実践的な例を見てみましょう。シンプルなタic-tac-toeのゲームボードを作成すると仮定します:

#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のタic-tac-toeボードを作成します。各セルはアンダースコア '_' で初期化され、空きスペースを表します。次に、ネストされたループを使用してボードを表示します。

外側のループ for(int i = 0; i < 3; i++) は各行を反復し、内側のループ for(int j = 0; j < 3; j++) はその行の各列を反復します。

C言語における3次元配列

次にレベルアップして3次元配列を見てみましょう。シンプルな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;
}

ここでは、3次元配列 gameWorld を作成し、2レベル、各レベルに3行4列を持っています。これを2つの2次元グリッドが重ね合っていると考えてください。

外側のループは各レベルを反復し、中間のループはレベル内の各行を反復し、最内側のループは各行の各列を反復します。

多次元配列の要素の行ごとの合計

もう少し実践的なことを試みましょう。2次元配列の各行の合計を計算します:

#include <stdio.h>

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

printf("Student  Math  Science  English  History  Total\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;
}

この例では、3人の学生の4科目の成績を表す2次元配列 grades を持っています。各学生(行)の成績の合計を計算し、個別の成績とともに表示します。

矩阵乗法

最後のアクトで、矩阵乗法を行います。これは多くの科学や工学応用で一般的な操作です:

#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("Result of matrix multiplication:\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}

return 0;
}

ここでは、2x3の矩阵 matA と3x2の矩阵 matB を乗算して2x2の矩阵 result を得ます。3つのネストされたループが乗算を行います:外側の2つのループは結果矩阵の各要素を反復し、最内側のループはその要素の値を計算します。

そして、ここまででC言語における多次元配列の基本から2D、3Dまで、そしていくつかの実用的な応用をカバーしました。練習は完璧を生むもので、これらの概念を自分で試してみてください。ハッピーコーディング!

Credits: Image by storyset