では、5つのデータを入力し、合計を表示するプログラムを考えてみます。
以前、for文の説明で作りましたが、配列を使って書き換えます。
<sample program 062-01>
#include <stdio.h> int main(void) { int data[5]; int i; int sum = 0; for (i = 0; i < 5; i++) { printf("整数を入力してください:"); scanf("%d", &data[i]); sum += data[i]; } printf("合計は%dです。\n", sum); return 0; } |
<実行結果>
数値を入力してください:5 数値を入力してください:3 数値を入力してください:5 数値を入力してください:3 数値を入力してください:5 合計は21です。 続行するには何かキーを押してください・・・
配列の各要素にscanfを使ってキーボードから入力する際には、通常の変数と同じように「&」を付けます。
このプログラムでは、入力しながら同時に合計も計算していますが、下のように書き換えることもできます。
<sample program 062-02>
#include <stdio.h> int main(void) { int data[5]; int i; int sum = 0; for (i = 0; i < 5; i++) { printf("整数を入力してください:"); scanf("%d", &data[i]); } for (i = 0; i < 5; i++) { sum += data[i]; } printf("合計は%dです。\n", sum); return 0; } |
<実行結果>
数値を入力してください:5 数値を入力してください:3 数値を入力してください:5 数値を入力してください:3 数値を入力してください:5 合計は21です。 続行するには何かキーを押してください・・・
実行結果は同じように表示されますが、入力のループとは別に合計のループが作ってあります。
配列を使わない場合、入力と同時に合計も計算しなければ、次のデータが入力されるため、変数の中に入っている値が消えてしまいます。
しかし、配列を使った場合、入力したデータはすべて残っていますので、後から計算することもできるようになります。
今回は合計計算なので、入力しながら計算も可能ですが、入力と処理を分けてプログラムを書く必要がある場合、入力データを残しておかなければなりません。
そのような場合、配列が役に立つのです。(具体的には後々説明します)
では、次に配列の初期化について書きます。
変数を初期化する場合、次のように書くことができます。
<sample program 062-03>
#include <stdio.h> int main(void) { int a = 13; printf("変数aの中身は%dです。\n", a); return 0; } |
<実行結果>
変数aの中身は13です。 続行するには何かキーを押してください・・・
変数宣言のすぐ後に「=」を付けて、値を代入します。
配列も同じように初期化が可能です。
<sample program 062-04>
#include <stdio.h> int main(void) { int i; int data[5] = { 3, 6, 4, 2, 1 }; for (i = 0; i < 5; i++) { printf("data[%d] = %d\n", i, data[i]); } return 0; } |
<実行結果>
data[0] = 3 data[1] = 6 data[2] = 4 data[3] = 2 data[4] = 1 続行するには何かキーを押してください・・・
配列の宣言のすぐ後に「{}」を付けて、各要素に代入する値を「,(コンマ)」で区切って書きます。
次のように書いた場合はエラーになります。
<sample program 062-05>
#include <stdio.h> int main(void) { int i; int data[5] = { 3, 6, 4, 2, 1, 5 }; for (i = 0; i < 5; i++) { printf("data[%d] = %d\n", i, data[i]); } return 0; } |
<実行結果>
error C2078: 初期化子の数が多すぎます。
配列の要素数は「5」なのに、6個分のデータを入れようとしているためです。
それでは、次のように書いた場合はどうなるのでしょうか。
<sample program 062-06>
#include <stdio.h> int main(void) { int i; int data[5] = { 3, 6 }; for (i = 0; i < 5; i++) { printf("data[%d] = %d\n", i, data[i]); } return 0; } |
<実行結果>
data[0] = 3 data[1] = 6 data[2] = 0 data[3] = 0 data[4] = 0 続行するには何かキーを押してください・・・
初期化の部分には「3」と「6」しか書いていませんが、中身を見ると残りの部分には「0」が入っています。
初期化するデータが多い場合はエラーになりますが、少ない場合は残った部分に「0」が入ります。
ただし、初期化しなかった場合の要素の中身は変数と同じく「不定」です。