以下のような表を保存したい場合、どうすればいいでしょうか?

 

  太郎さん 次郎さん 三郎さん ペケ男くん 花子さん ペケ子さん
英語 88 98 74 54 83 99
数学 83 100 85 23 64 21
国語 93 95 72 43 87 34
理科 91 88 68 38 74 32
社会 89 94 95 21 90 13

 

方法① 5教科×6人分の値を保存するための変数を1個ずつ30個作成

方法② 英語を保存する配列、数学を保存する配列…を作成

方法③ 太郎さんの5教科分を保存する配列、次郎さんの5教科分を保存する配列、…を作成

 

全部面倒なので、一括で保存する方法が多次元配列です。

int int_array[10][6];

と宣言すれば、このような配列が簡単に作れます。

  [0]列目 [1]列目 [2]列目 [3]列目 [4]列目 [5]列目
[0]行目 [0][0] [0][1] [0][2] [0][3] [0][4] [0][5]
[1]行目 [1][0] [1][1] [1][2] [1][3] [1][4] [1][5]
[2]行目 [2][0] [2][1] [2][2] [2][3] [2][4] [2][5]
[3]行目 [3][0] [3][1] [3][2] [3][3] [3][4] [3][5]
[4]行目 [4][0] [4][1] [4][2] [4][3] [4][4] [4][5]
[5]行目 [5][0] [5][1] [5][2] [5][3] [5][4] [5][5]
[6]行目 [6][0] [6][1] [6][2] [6][3] [6][4] [6][5]
[7]行目 [7][0] [7][1] [7][2] [7][3] [7][4] [7][5]
[8]行目 [8][0] [8][1] [8][2] [8][3] [8][4] [8][5]
[9]行目 [9][0] [9][1] [9][2] [9][3] [9][4] [9][5]

 

 

<多次元配列の扱い方>

上記の成績表を多次元配列として初期化、及び表示をしてみます。

 

#include <stdio.h>

int main(){

//多次元配列の初期化

int int_array[5][6] = {

{88, 98, 74, 54, 83, 99},

{83, 100, 85, 23, 64, 21},

{93, 95, 72, 43, 87, 34},

{91, 88, 68, 38, 74, 32},

{89, 94, 95, 21, 90, 13}

};

 

//取り出し方

//for文のネストを利用する

 

//外側のループ:行のループ

for(int i = 0; i<5; ++i){

 

//内側のループ:列のループ

for(int j =0; j<6; ++j){

printf("%d\t", int_array[i][j]);

}

printf("\n");

 

}

 

return 0;

}

 

//演習問題

以下の表を多次元配列で初期化・及び表示を行なってください。

  太郎さん 次郎さん 三郎さん ペケ男くん 花子さん ペケ子さん
午前 72 61 67 32 65 63
午後 58 63 72 35 59 61

また、合格者が何名いるのかも表示してください。