では、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」が入ります。
ただし、初期化しなかった場合の要素の中身は変数と同じく「不定」です。