配列

まず、5人の点数を入力してもらい、その最大値を見つけるプログラムを作成してみましょう。

1

100人や500人になった時にはifの部分が多く大変なことになります。ところがよく見てみれば、

  printf("1人目:"); scanf("%d", &point1);

  if(point2 > max){
    imax = 2; max = point2;
  }

のような行は、同じようなものがたくさんあります。これを前回の記事で書いた「反復制御文」 を使えば簡単になります。そのためには、普通の変数ではなく、配列というものを使います。

↓↓続きから↓↓ 

 
配列とは、同じ型の変数を複数個あつめたもので、数字をつけて表します。簡単なイメージを説明します。

2
アパートは同じ形の「部屋」 を集めてできています。その一部屋一部屋を表すのに「..号室」と形で表示することが多いものです。つまり、「一刻館」というアパート(配列)の5号室(配列番号4)に五代君はいることになります。

 プログラム風に書けば次のようになります。

3
配列番号は[ と ] で囲み示します。また、必ず0から始まります。ですから、ここの例では大きさ6の配列を宣言しているのですから、使える部屋番号は0から5までということになります。
 ここではアパートを住人という関係で話をしましたが、プログラムの場合は

 コンピュータ内のメモリ と int, double などの値

ということとなります。メモリー内に、宣言された数だけの連続した領域が確保されるのです。
では配列を利用したプログラムに書き換えます。
 またこのように配列番号を使って扱いますので、for文を使った繰り返しと同時に使うことが一般的です。
4

もし、範囲以外を使おうとしたらどうなるでしょうか?

5

配列は、「int k[2]」で宣言していますから使えるのは、k[0], k[1]の2つだけのはずです。しかし、上のプログラムではk[2],k[3]を使っています。しかし、コンパイルの時にはエラーになりません。だからといって使えるかというと、上で見たようにまったく別のものであるはずのxの値を破壊しています。同様に「double y[2]」で宣言していますから使えるのはy[0],y[1]の二つだけのはずです。しかし、上のプログラムではy[2]を使っています。これはk[0],k[1]を破壊しています。

このようにCでは配列の大きさのチェックをいうものは行われていません。コンパイルの段階でエラーになりませんから、このような誤りは発見が難しくなります。配列の大きさというものに十分に気を付けましょう。

プログラムのエラーは大きく分けて次の二種類あります。

文法エラー

スペルミスや「;」を忘れていた、書き方が違うなど文法的なエラー。これはコンパイルするときに発見されます。つまり、この種のエラーがあればプログラムを実行できません。

論理エラー

文法的にまったく問題ないけど、実行するとおかしな動きをするエラー。配列の範囲外を使おうとすると、このエラーになります。この発見は難しいのです。

では練習問題です。
①最大値の探索(配列使用)のプログラムを参考にして、最小値を求めるプログラムを完成せよ。
②大きさ10の整数型の配列にすべて値を入力してもらい、配列番号0の値より大きい値がいくつ含まれるか表示するプログラムを作成しなさい。









解答例

6

7
 最後に、C言語を初めて書こうと思っているかたにおすすめの技術書を紹介します。
こちらです↓↓

スポンサーリンク