p.132 多次元配列
・C言語では配列を要素とする配列が多次元配列
・2次元配列の場合、縦横に箱が並んだイメージになり、要素が1次元配列。
・2次元配列の宣言書式: 型 配列名[要素数①][要素数②] //要素数①×要素数②になる
例: 小学校6学年で各3クラスの児童数の配列: int num[6][3];
・2次元配列の要素へのアクセスには、配列名[添字①][添字②]となる。どちらも0からなので注意。
例: 2次元配列 int a[3][2]の要素は a[0][0],a[0][1],a[1][0],a[1][1],a[2][0],a[2][1]の6個
・この順番に値を並べて初期化も可能。この時、{}を2重にしてグルーピングすると見やすい
例: int a[3][2] = {{10, 11}, {20, 21}, {30, 31}};
p.135 演習5-10、5-11
・自由参加課題とします。行列の積の公式はWeb検索などで調べてみよう。
p.135 演習5-12 ヒント
・p.134 list0515.cppのアレンジ演習になっている
・2次元配列tensu1[4][3]とtensu2[4][3]をくっつけて3次元配列tensu[2][4][3]にすれば良い
int tensu[2][4][3] = {
{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},
{{97,67,82},{73,43,42},{97,56,21},{85,46,35}}
}
・すると、1回目の点数はtensu[0][i][j]で、2回目の点数はtensu[1][i][j]で得られる。
・これで合計点を求めよう
・それから、点数の表示を3重ループにしよう
for (int k = 0; k < 2; k++) {
printf("%d回目の点数\n", k);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
printf("%4d, tensu[k][i][j]);
}
putchar('\n');
}
}
作成例
//p.135 演習5-12
#include <stdio.h>
int main(void)
{
int tensu[2][4][3] = { //3次元配列(2回分の4人の3科目の点数)
{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},
{{97,67,82},{73,43,46},{97,56,21},{85,46,35}}
};
int sum[4][3]; //2次元配列(4人の3科目の合計点数)
//2回分の点数の合計を求める
for (int i = 0; i < 4; i++) { //4人の
for (int j = 0; j < 3; j++) { //3科目の
sum[i][j] = tensu[0][i][j] + tensu[1][i][j]; //2回分の和
}
}
//2回分の点数を表示
for (int k = 0; k < 2; k++) { //2回分の
printf("%d回目の点数\n", k);
for (int i = 0; i < 4; i++) { //4人の
for (int j = 0; j < 3; j++) { //3科目の
printf("%4d", tensu[k][i][j]);
}
putchar('\n'); //3科目表示したら改行
}
}
//合計を表示
puts("合計点");
for (int i = 0; i < 4; i++) { //4人の
for (int j = 0; j < 3; j++) { //3科目の
printf("%4d", sum[i][j]);
}
putchar('\n'); //3科目表示したら改行
}
return 0;
}