C言語 配列の2次元配列の使い方を解説

プログラミング

 

前回は配列の基本的な考え方と書き方、そして配列を使った簡単なプログラム例を紹介しました。配列は種類のまとまった変数のグループをまとめて扱いするときにとても便利です。いちいち変数名を考える必要もなくfor文でまとめて処理することもできるため、扱うデータ量が多ければ多いほど活躍します。

 

今まで使ってきた配列、a[100]などは1つの変数のグループを扱う1次元配列と呼ばれるものです。1次元があるからには当然2次元以上もあり、それら2次元以上の配列は多次元配列と呼ばれます。これから紹介するのは、多次元配列の中の2次元配列についてです。

 

2次元配列の考え方と書き方

 

2次元配列は、配列を要素とする新しい配列です。配列を要素とするということの意味がいまいち分からないという人がいると思うので、簡単に解説しておきます。今までの1次元配列は、1や0.1などの整数や浮動点少数などの単一型の値でした。そしてそれらの値をa[0]といった配列の中に入れていました。

 

今度の2次元配列では、そのa[0]といった配列自体を要素とします。わかりやすいように図であらわすと以下のようになります。一般的な例を出すと行列のような感じをイメージしてもらった方がわかりやすいでしょう。

上の画像でいえば、1次元配列のa[]配列とb[]配列が2次元配列のc[][]配列にまとめられていて1段目がa[]配列で、2段目がb[]配列に当たります。

 

また、2次元配列を構成する要素は、一直線上に「a[0][0]→a[0][1]→a[0][2]」という風に右側の要素から並び、それが終わったら「a[0][2]→a[1][0]」という風に左側の要素が並びます。なので、基本的にfor文で2次元配列をループする処理では以下のように書きます。

2次元配列を使ったプログラム例

 

それでは、実際に2次元配列を使ったプログラム例を書いていきます。今回作るプログラムは、「4人の生徒の数学、国語、英語の3教科の点数を入力してその合計を求める」プログラムです。

 

一応プログラムコードには解説的なものを書きましたが、少し長くて全体をとらえにくいかもしれません。なので、ざっくりと全体の構成だけ解説します。まず、理想として2次元配列を用いて作っていくのは下のような科目別の点数表です。int tensu[4][3]で宣言していることから、tensu[0][0]~tensu[3][2]までで4×3の配列が用意されています。

数学 国語 英語
1人目 tensu[0][0] tensu[0][1] tensu[0][2]
2人目 tensu[1][0] tensu[1][1] tensu[1][2]
3人目 tensu[2][0] tensu[2][1] tensu[2][2]
4人目 tensu[3][0] tensu[3][1] tensu[3][2]

上のプログラムでは、2重のfor文を使い一人一人の全3教科を順番に入力してもらっています。その時、上の表でもわかる通り、tensu[i][j]のjの部分が0の時は数学、1の時は国語、2の時は英語が入力されるようにif文で識別しています。

 

その後tensu配列に点数が入力し終わったら、それらの合計を出します。合計はあらかじめ用意しておいた1次元goukei配列に4人分のを格納しますが、このとき、goukei[i]+=tensu[i][j]と書いていますが、goukei配列をあらかじめ0に初期化しておかないと値のない配列で計算をすることになるので、goukei配列の初期化(int goukei[4]={0};)は忘れないでください。

 

実行結果以下のようになります。

今回は2次元配列を使った簡単なプログラムなので細かいことは設定にいれていませんが、これに「点数は0点以上100点以下」という条件を付けたり、「テストをうける人数を任意に決めることができる」といった仕様を加えるともっと長くなります。そう聞くとかなりめんどくさいように感じるかもしれませんが、2次元配列を使うことにより実は普通の変数を使うよりはるかに簡単になっています。

 

配列はこれからも、値だけでなく文字列を入れるときに必ず使うものです。なので、「配列の初期化」と「配列をまとめて表示したり入力したりするときはfor文を使う」という決まったやり方はある程度覚えてしまいましょう。その方があとあと便利です。

コメント