大量のデータを扱いたいとき

1つの変数には、1つのデータしか入れることは出来ません。しかしこれでは、ある学生たちの平均点を出したいときのように、同じ性質や意味を持つ大量のデータを処理するときに困ってしまいます。

今までの知識で上の問題を解こうとすると、こんな感じになるでしょうか。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main(void)
{
        // 生徒1から生徒5の点数
        int st1 = 60;
        int st2 = 89;
        int st3 = 32;
        int st4 = 98;
        int st5 = 78;

        int sum;        // 合計点
        float ave;      // 平均点

        sum = st1 + st2 + st3 + st4 + st5;
        ave = sum / 5.0;

        printf("平均点は%0.1f点です。\n", ave);

        return 0;
}

では、今度はクラス40人分の平均点を……となると、とてもやっていられません。

配列

配列は、こういう時に便利です。

配列は、同じ型の変数(箱)が連なって組になっているようなものです。組になった変数全体につける名前を配列名といい、個々の変数は添え字という番号で区別します。添え字は、「0, 1, 2, …」という具合に付けていきます。

また、配列を使うには、組になる変数をいくつ用意すればよいか、あらかじめ決めておく必要があります。その数の事を、要素数といいます。

配列も変数と同じで、「宣言」してから使います。

// 配列宣言の書式
型 配列名[要素数];

// 例
int student_numbers[40];

それでは、実際にC言語で「配列」を使ってみましょう。以下のコードを書いてください。ファイル名は、array.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
        int a[3];

        a[0] = 1;
        a[1] = 2;
        a[2] = 3;

        printf("a[0] = %d\n", a[0]);
        printf("a[1] = %d\n", a[1]);
        printf("a[2] = %d\n", a[2]);

        return 0;
}

実行結果は、以下のようになるはずです。

a[0] = 1
a[1] = 2
a[2] = 3

配列

私達人間は通常1から数字を数えますが、C言語の配列の添え字は0から数えると覚えておいてください。

配列と繰り返し

配列は、先日学んだ繰り返し、特にfor文と相性が良いです。

以下のコードを書いてみてください。ファイル名は、for_array.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
        int i;
        int point[5];

        point[0] = 4;
        point[1] = 0;
        point[2] = 2;
        point[3] = 5;
        point[4] = 1;


        for (i = 0; i < 5; i++) {
                printf("point[%d]: %d\n", i, point[i]);
        }

        return 0;
}

このように、配列の要素を順番に参照したい時に、for文が便利です。

2次元配列

配列は、横だけでなく縦にも並べることができます。このような配列を2次元配列といいます。

2次元配列を使ったプログラム例をみてみましょう。ファイル名は、kuku_array.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(void)
{
        int i, j;
        int a[9][9];

        for (i = 0; i < 9; i++) {
                for (j = 0; j < 9; j++) {
                        a[i][j] = (i + 1) * (j + 1);
                }
        }

        for (i = 0; i < 9; i++) {
                for (j = 0; j < 9; j++) {
                        printf("%3d", a[i][j]);
                }
                printf("\n");
        }

        return 0;
}

このように、2次元配列は表や面のように広がるデータを扱うのに便利です。

printf("%3d");

では表示するフォーマットを指定しています。この場合は3桁でそろえて表示しています。詳しくはフォーマット指定子一覧を参照してください。

さらに、3次元配列、4次元配列とありますが、今回は省略します。

練習問題

次のように画面に出力するコードをint型の配列a[]と繰り返しを使って書いてください。ファイル名は、11_ren1.cとします。

a[0] = 0
a[1] = 20
a[2] = 40
a[3] = 60
a[4] = 80
a[5] = 100