*C言語* 〜20時限目〜 キーボードから入力する(配列)・・・
〜目次〜
キーボードから入力する(配列)
19時限目の続きで、
テストの点数をキーボードから入力して配列に格納し、
まとめて出力するコードを記述します。
以下のコードを入力してください。
sample44.c
ーsample44の実行画面ー
5人のテストの点数を入力してください。
99
70
35
77
13
1番目の人の点数は99点です。
2番目の人の点数は70点です。
3番目の人の点数は35点です。
4番目の人の点数は77点です。
5番目の人の点数は13点です。
上記のコードでは、
まずキーボードから繰り返し入力した値を、
配列に格納しています。
変数と同じように、配列要素に&記号をつけ、
変換仕様には%d指定しています。
次の繰り返し文では、
格納された値を1つずつ出力しています。
後でまとめて点数を出力するのに、
配列が役立っているのが確認できます。
配列の添字に注意する
配列を使う場合には、以下のことに注意します。
配列の大きさを超えた要素を利用できない
ということです。
今までの配列を使ったコードでは、
5つの要素をもつ配列を宣言しました。
この配列を使うときは、
test[10]などの添字を指定して、
値を代入してはいけません。
誤った添字を使っても、コンパイルはエラーになりません。
誤った添字を使ったプログラムを実行すると、
コンピュータが暴走してエラーが起こることがあります。
なので、配列の添字には気をつけてください。
配列を初期化する
配列には色々な記述方法があります。
そこで、配列の初期化についてみていきます。
「配列の宣言」と「値の代入」の作業を、
まとめて行うことができます。
配列の初期化は以下の通りです。
型名 配列名[要素数] = {値0, 値1…};
sample43のテストの点数を使うプログラムは、
以下のようにできます。
int test[5] = {99, 70, 35, 77, 13}
{ }の中に値を並べて各要素の値を記述します。
すると、配列が準備されたときに、
99, 70,…という値が要素に格納されます。
{ }の中に指定する値は、
初期化子(initializer)
と呼ばれています。
また、配列を初期化する場合には、
[ ]の中に配列要素の数を指定しなくても構いません。
要素数を指定しない場合は、
初期化子の数に応じた要素が自動的に準備される
ということになっています。
以上で説明した方法を使い、コードを書いてみます。
sample45.c
ーsample45の実行画面ー
1番目の人の点数は99点です。
2番目の人の点数は70点です。
3番目の人の点数は35点です。
4番目の人の点数は77点です。
5番目の人の点数は13点です。
これは19時限目のsample42と同じ実行画面になっています。
コードがスッキリしているのが確認できます。
配列を初期化することで、
宣言と値の格納が同時に行えます。
初期化子が足りない場合
配列の要素数よりも少ない初期化子を記述した場合、
余った要素については、0が自動的に格納されることになっています。
一応ですが、覚えておいてください。
マクロを利用する
これまでのコードでは、
繰り返し文を使い配列を扱ってきました。
しかし、もし異なるテストについてのコードを作成する場合、
テストの点数を書き換え、
テストの受験者数に訂正して…
ということをしなくてはいけません。
これは意外と大変な作業です。
そんなときには、以下のようにコードを記述することで
たいへん便利になります。
sample46.c
ーsample46の実行画面ー
1番目の人の点数は99点です。
2番目の人の点数は70点です。
3番目の人の点数は35点です。
4番目の人の点数は77点です。
5番目の人の点数は13点です。
このコードの実行結果は今までと同じです。
しかしここでは、
配列の要素数に「NUM」という名前を指定していることに、
注目してください。
コードの先頭部分で、
コードの中の「NUM」という識別子を「5」に、
置き換えるように指定しているためです。
この、
#define
という指定は、
コードを翻訳する前に、「置き換え」をする
という機能を持っています。
つまり、このコードでは「NUM」と指定した部分が全て、
「5」に置き換えられてからコードが翻訳されるのです。
コードの先頭の#defineの行を書き換えるだけで、
受験者数などを変更することができるのです。
共通の数字を全て書き換える手間が減るので、
たいへん便利なコードになります。
尚、#defineを使って指定する名前を
マクロ(macro)
と呼びます。
#defineは、
コード内のマクロを、数値や文字などを含めた文字列に
単純に書き換える機能を持っています。
マクロ名には全て大文字を使うことが慣習になっています。
最後に「;」はつけませんので注意してください。
〜END〜