プログラミング言語Ⅰ・講義メモ4

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;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です