TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜20時限目〜 キーボードから入力する(配列)・・・

〜目次〜

 

 

 

キーボードから入力する(配列)

19時限目の続きで、

テストの点数をキーボードから入力して配列に格納し、

まとめて出力するコードを記述します。

以下のコードを入力してください。

sample44.c

f:id:YuyaTerayama:20180907231152p:plainー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

f:id:YuyaTerayama:20180907232906p:plain

ーsample45の実行画面ー

1番目の人の点数は99点です。

2番目の人の点数は70点です。

3番目の人の点数は35点です。

4番目の人の点数は77点です。

5番目の人の点数は13点です。

これは19時限目のsample42と同じ実行画面になっています。

コードがスッキリしているのが確認できます。

配列を初期化することで、

宣言と値の格納が同時に行えます。

 

初期化子が足りない場合

配列の要素数よりも少ない初期化子を記述した場合、

余った要素については、0が自動的に格納されることになっています。

一応ですが、覚えておいてください。

 

マクロを利用する

これまでのコードでは、

繰り返し文を使い配列を扱ってきました。

しかし、もし異なるテストについてのコードを作成する場合、

テストの点数を書き換え、

テストの受験者数に訂正して…

ということをしなくてはいけません。

これは意外と大変な作業です。

そんなときには、以下のようにコードを記述することで

たいへん便利になります。

sample46.c

f:id:YuyaTerayama:20180907233739p:plainーsample46の実行画面ー

1番目の人の点数は99点です。

2番目の人の点数は70点です。

3番目の人の点数は35点です。

4番目の人の点数は77点です。

5番目の人の点数は13点です。

このコードの実行結果は今までと同じです。

しかしここでは、

配列の要素数に「NUM」という名前を指定していることに、

注目してください。

コードの先頭部分で、

コードの中の「NUM」という識別子を「5」に、

置き換えるように指定しているためです。

この、

#define

という指定は、

コードを翻訳する前に、「置き換え」をする

という機能を持っています。

つまり、このコードでは「NUM」と指定した部分が全て、

「5」に置き換えられてからコードが翻訳されるのです。

コードの先頭の#defineの行を書き換えるだけで、

受験者数などを変更することができるのです。

共通の数字を全て書き換える手間が減るので、

たいへん便利なコードになります。

尚、#defineを使って指定する名前を

マクロ(macro)

と呼びます。

#defineは、

コード内のマクロを、数値や文字などを含めた文字列に

単純に書き換える機能を持っています。

マクロ名には全て大文字を使うことが慣習になっています。

最後に「;」はつけませんので注意してください。

 

〜END〜