添字(インデックス)がひとつのものを一次元配列と言う.例えば,
int ab[1000000], cd[1000];
double xy[1000000], z[60];
である.これで,
-4pt
- 整数が格納できるab[0]〜ab[999999]の100万個の記憶場所
- 整数が格納できるcd[0]〜cd[999999]の100万個の記憶場所
- 倍精度実数が格納できるxy[0]〜xy[999999]の100万個の記憶場所
- 倍精度実数が格納できるz[0]〜xy[59]の60個の記憶場所
が確保できた.
このデータ構造で,個々の内容にアクセスするためには,配列名と自然数である添え字
(インデックス)を指定する.次のようにする.
a = ab[12345];
ab[23456] = 654321;
scanf("%d",&ab[34567]);
printf("%d\n",ab[45678]);
今まで,使ってきた単純型と同じである.
大量のデータを配列を使って取り扱うとき,繰り返し文(ループ)を使うのが普通である.
たとえば,つぎのようにすると,短い文で大量のデータを処理するプログラムが書ける.
for(i=0; i<=360; i++){
s[i] = sin(i*M_PI/180);
c[i] = cos(i*M_PI/180);
}
これで,三角関数の値が0〜360度まで計算できる.
1次元配列は,配列名とひとつの添字(自然数)でデータにアクセスする.それに対して,
配列名と2つの添字を用いるものを2次元配列と言う.
たとえば,1日の最高気温のデータを年間にわたって格納したい場合,
double max_temp[13][32];
というように配列を宣言する.これで,
max_temp[0][0]〜
max_temp[12][31]
まで使える.最初の添字(インデックス)が月を表し,次の添字が日を表す.分かり易いデー
タ構造となっている.これに,日々の最高気温をキーボードから入力する場合,次のよう
にプログラムを書く.
double max_temp[13][32];
int dates[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i,j;
for(i=1; i<=12; i++){
for(j=1; j<=dates[i]; j++){
printf("%d月%d日の最高気温\t", i, j);
scanf("%lf", &max_temp[i][j]);
}
}
配列
dates[]には,月の日数を入れておく.閏年は考えていない.2次元配列にアクセ
ス屡ときには,二重ループが使われることが多い.
配列の添字の数を次元と言う.それが1個だと1次元配列,2個だと2次元配列,それ以上の
ものも考えられる.先程の最高気温を年月日で処理する場合,3次元配列が適当であろう.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年12月15日