11 配列
大量のデータを扱いたいとき
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