★データ構造(配列2)★
では、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;
}
|
<実行結果 VC++ Express Edition>
数値を入力してください: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;
}
|
<実行結果 VC++ Express Edition>
数値を入力してください: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;
}
|
<実行結果 VC++ Express Edition>
変数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;
}
|
<実行結果 VC++ Express Edition>
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;
}
|
<実行結果 VC++ Express Edition>
エラー内容 main.cpp(7) : 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;
}
|
<実行結果 VC++ Express Edition>
data[0] = 3
data[1] = 6
data[2] = 0
data[3] = 0
data[4] = 0
続行するには何かキーを押してください・・・
初期化の部分には「3」と「6」しか書いていませんが、中身を見ると残りの部分には「0」が入っています。
初期化するデータが多い場合はエラーになりますが、少ない場合は残った部分に「0」が入ります。
ただし、初期化しなかった場合の要素の中身は変数と同じく「不定」です。