6.
配列
配列
・*:..☆ プロローグ ☆..:*・
白雪姫は7人のドワーフのために夕食を作り、ひとりひとりに配っていました。
「みなさん、夕食の時間よ。スープを配るわ。“教授”はどこ?、そっちね。“くいしんぼ”さんは?、そこね。“困った”さんはどこなの?、そこの隅ね。まったくもう、どうしてみんな、いつも好き勝手な所にいるの?、それに、どうしていつも、決まった順番じゃないといけないの?、食事を配るのが大変なのよ。」
「姫さんよ。俺たちゃ木こりだ。それも、自由な木こりだ。誰に雇われてるわけじゃない。あの意地悪な女王だって俺たちを束縛できない。森の自由人なのさ。いつ、どこにいるかも自由なのさ。」
「もちろん、あなたたちが自由であることは認めるし、尊重もするわ。それじゃあ、食事を配る順番が決まってるのはどうしてなの?」
「姫さんよ。俺たちは自由だ。そして平等なんだ。誰が特別、偉いって事はない。だがなあ、姫さん。平等ではあるが、同時に、年長者や先輩を敬うって気持ちもあるわけだ。そこでだ姫さん。食事の順番くらいには敬意を払おうってことにしたわけさ。たいした問題じゃないが、重要な問題でもあるのさ。」
「もちろん、あなたたちが自由で平等であることは認めるし、尊重もするし、年長者を敬う気持ちは立派だと思うわ。でもねえ。少しは私の労働についても考えて欲しいの。あなたたちの自由と平等と年長者への敬意の為に、私の労働が増えるとしたら、それは合理的と言えるの? あなたたちの自由その他は、誰かの負担の上に成り立つの?」
「姫さんよ。もっともな言い分だ。あんたの労働のことまでは考えてなかったよ。すまなかったね。ここは、俺たちが妥協すべきだろう。どうすればいいか言ってくれないか。」
「そうね。別に難しいことはないわ。順番に並んでくれればいいだけよ。次の夕食からお願いするわ。」
...そして、次の夕食
「はい、順番に並んでね。最初は“教授”、次は“くいしんぼ”、その次は...う~ん、この際だから、名前じゃなくて数字でもいいわよね。はい、0番さんね、次は1番さん、2番さん、3番さん...はい、6番さん。次は7番さん、おや、7番さんは?、おかしいわね、7人のはずなのに。あ、そうか!、0番から始めたから、最後は6番さんね。」
配列とは、データの集合となっている変数です。同じ型のデータが単純に並んでいる姿をイメージしてください。
intのデータが8つ並んでいる
#0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 | |
---|
34 | 56 | 2 | 478 | 9 | 774 | -23 | 43 | ←int型データ |
---|
プログラムで、たくさんの変数を必要とする場合、それぞれに名前を付けて扱うのはたいへんです。配列を使用すれば、ひとつの名前で複数の変数を扱うことができます。また、繰り返し処理により変数を順番にアクセスするようなこともできます。
例:6個の整数型変数に、3を代入する
配列を使用しない場合 |
|
配列を使用した場合 |
int x1,x2,x3,x4,x5,x6;
x1 = 3;
x2 = 3;
x3 = 3;
x4 = 3;
x5 = 3;
x6 = 3;
|
|
int x[6]; int i;
for( i=0 ; i < 6 ; i++ ) x[i] = 3;
|
配列に含まれる1つ1つのデータを、配列の要素と言い、要素にアクセスするためには、0 番から始まる数字を使用します。この数字のことを、配列の添え字と言います。
6.1. 配列の宣言
配列の宣言
配列を使用するには、通常の変数と同様に、宣言をする必要があります。
配列の宣言は、次のように記述します。
データ型 変数名[ 要素数 ];
通常の変数宣言と異なるのは、変数名の後ろに角カッコ [ ] が付くところです。この角カッコの中には、配列の要素数を記述します。
配列の初期化
配列の初期化
次のように記述することによって、宣言と同時に要素を初期化することができます。
int a[] = { 12, 95, 3, 42, 64 };
配列には、波カッコ { } の中の初期化子が順番通りに代入されます。角カッコの中に要素数を書く必要はありません。要素数は初期化子の数と等しくなります。要素数を書いた場合には、その要素数の配列が作成されますが、初期化子の数より小さい数にすることは出来ません。
6.2. 配列の要素
配列の要素
配列の要素にアクセスするためには、変数名の後ろに角カッコ [ ] を記述します。角カッコの中には、何番目の要素かを示す添え字を記述します。添え字は 0 から始まり、上限は要素数-1となります。
添え字には定数だけではなく、整数型の変数も使用できます。
配列の要素は、指定した型の1つの変数と同様に、値の代入や参照ができます。
例:
int a[3];
a[0] = 3;
a[1] = 5;
a[2] = a[0] * a[1];
printf( "%d × %d = %d", a[0], a[1], a[2] );
添え字は、配列の要素数を超えて指定してはいけません。要素数を超えた添え字を使用すると、プログラムは正しく動作しません。
int a[2];
a[2] = 7;
配列の要素数は 2 ですから、添え字として使用できるのは 0 と 1 です。このプログラムが正しく動作する保障はありません。
プログラム例:配列の内容を表示する。
int numbers[] = { 23, 63, 54, 82, 96 };
int i;
for( i = 0 ; i < 5 ; i++ )
printf( "%d, ", numbers[i] );
プログラム例:10 個の数値を入力して、表示する。
int values[10];
int i;
for( i = 0 ; i < 10 ; i++ )
scanf( "%d", &values[i] );
for( i = 0 ; i < 10 ; i++ )
printf( "%d, ", values[i] );
プログラム例:配列に、九九3の段(3の倍数)を設定し、表示する。
int kukusan[9];
int i;
for( i = 0 ; i < 9 ; i++ )
kukusan[i] = 3 * ( i + 1 );
for( i = 0 ; i < 9 ; i++ )
printf( "%d, ", kukusan[i] );
6.3. 多次元配列
多次元配列
多次元配列とは、複数の添え字を持つ配列です。通常の配列(1次元配列)が、要素が直線状に並んだイメージであるならば、2次元配列は平面状、3次元配列は立体のイメージです。(4次元以上は、イメージするのが難しいかもしれません。)
1次元配列
2次元配列
#0, 0 |
#0, 1 |
#0, 2 |
#0, 3 |
#1, 0 |
#1, 1 |
#1, 2 |
#1, 3 |
#2, 0 |
#2, 1 |
#2, 2 |
#2, 3 |
多次元配列の宣言
多次元配列の宣言
多次元配列を宣言するには、角カッコ [ ] を次元の数だけ記述します。
int a[4][5];
上記の場合、要素数が 4 と 4 の2次元配列です。全要素数は、4 × 5 で 20 です。
多次元配列の要素
多次元配列の要素
多次元配列の要素にアクセスするには、添え字を次元の数だけ指定します。
プログラム例:
int a[2][2];
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;