3 配列の例

3.1 1次元配列

添字(インデックス)がひとつのものを一次元配列と言う.例えば,
	
	int ab[1000000], cd[1000];
	double xy[1000000], z[60];

である.これで, -4pt が確保できた.

このデータ構造で,個々の内容にアクセスするためには,配列名と自然数である添え字 (インデックス)を指定する.次のようにする.

	
	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度まで計算できる.

3.2 2次元配列

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次元配列にアクセ ス屡ときには,二重ループが使われることが多い.

3.3 多次元配列

配列の添字の数を次元と言う.それが1個だと1次元配列,2個だと2次元配列,それ以上の ものも考えられる.先程の最高気温を年月日で処理する場合,3次元配列が適当であろう.


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年12月15日


no counter