★データ構造(配列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;
}

<実行結果>

数値を入力してください: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」が入ります

ただし、初期化しなかった場合の要素の中身は変数と同じく「不定」です。


次へ

戻る

目次へ