【C言語】第3章第6回:多次元配列の基礎
多次元配列は、行列や表形式のデータを格納するために使われるデータ構造です。この章では、2次元配列を中心に、多次元配列の宣言、初期化、操作方法を解説します。
1. 多次元配列とは?
多次元配列は、配列の中にさらに配列を持つ構造を持ちます。特に2次元配列は、行と列で構成され、表形式のデータを管理するのに適しています。
例:2次元配列の宣言
int matrix[3][4]; // 3行4列の2次元配列
上記の例では、matrix
は3行4列(合計12個の要素)を持つ2次元配列を表します。
2. 2次元配列の初期化
2次元配列は、以下のように初期化できます。
例:2次元配列の初期化と表示
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3}, // 1行目
{4, 5, 6} // 2行目
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
}
return 0;
}
解説:
- 各行のデータを
{}
で囲み、配列を初期化します。 matrix[i][j]
:配列の行i
、列j
に対応する要素にアクセスします。
3. 部分初期化とデフォルト値
部分的に初期化した場合、未初期化の要素はデフォルト値(整数型では0
)になります。
例:部分初期化の例
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2}, // 1行目の3列目は自動的に0
{4} // 2行目の2列目と3列目は自動的に0
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
}
return 0;
}
解説:
- 部分的に初期化された要素以外は
0
に初期化されます。 - 未使用の要素は明示的に
0
と設定しなくても問題ありません。
4. 2次元配列の応用例:行列の加算
2次元配列を使って、行列の加算を行うプログラムを作成します。
例:2つの行列の加算
#include <stdio.h>
int main() {
int matrix1[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int matrix2[2][3] = {
{7, 8, 9},
{10, 11, 12}
};
int result[2][3];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("result[%d][%d] = %d\n", i, j, result[i][j]);
}
}
return 0;
}
解説:
- 対応する要素を加算して、新しい行列
result
に格納します。 - 2重ループを使い、行と列を効率的に操作します。
5. 練習問題
以下の課題に挑戦して、多次元配列の基本を練習しましょう。
- 3行2列の2次元配列を初期化し、すべての要素を表示するプログラムを作成してください。
- 2つの3行3列の行列を加算し、結果を表示するプログラムを作成してください。
- 2次元配列内の最大値を探し、その行と列を表示するプログラムを作成してください。
6. 練習問題の解答と解説
問1の解答
#include <stdio.h>
int main() {
int matrix[3][2] = {
{1, 2},
{3, 4},
{5, 6}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
}
return 0;
}
問2の解答
#include <stdio.h>
int main() {
int matrix1[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int matrix2[3][3] = {
{9, 8, 7},
{6, 5, 4},
{3, 2, 1}
};
int result[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("result[%d][%d] = %d\n", i, j, result[i][j]);
}
}
return 0;
}
問3の解答
#include <stdio.h>
int main() {
int matrix[3][3] = {
{1, 2, 3},
{9, 8, 7},
{4, 5, 6}
};
int max = matrix[0][0];
int row = 0, col = 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 = i;
col = j;
}
}
}
printf("Maximum value: %d at row %d, column %d\n", max, row, col);
return 0;
}
7. まとめ
多次元配列は、複雑なデータを効率的に管理するための重要なツールです。基本的な操作を理解し、実際の課題で応用してみましょう。