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

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言語で「配列」を使ってみましょう。以下のコードを書いてください。ファイル名は、11_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文と相性が良いです。

以下のコードを書いてみてください。ファイル名は、11_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次元配列を使ったプログラム例をみてみましょう。ファイル名は、11_kuku.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次元配列は表や面のように広がるデータを扱うのに便利です。

さらに、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