インターネットエクスプローラで学ぶC言語(入門編)

レッスン18:配列の応用例2(最大値を求める)

このレッスンで学ぶことは?
配列に入っている値の中で一番大きい値を探してみましょう。次の順で簡単に説明します。
クイックジャンプ: プログラム | プログラム説明 | 
練習 | 動作確認 | 次は?

プログラム
次のプログラムでは、配列を宣言し、配列の要素に値を代入し、その値の合計を求めています。
[注意]左端の番号は、プログラムの一部ではありません。各行を区別するために付けた番号です。

  1. void main(void)
  2. {
  3.    int i, value, index;
  4.    int data[.5];
  5.    data[0]=10;
  6.    data[1]=15;
  7.    data[2]=6;
  8.    data[3]=15;
  9.    data[4]=12;
  10.    value=data[0];
  11.    index=1;
  12.    for(i=1; i<=4; i=i+1)
  13.      if (data[i]>value)
  14.      {
  15.        value=data[i];
  16.        index=i;
  17.      }
  18. }


 
3行目で、3つの変数i、value、indexを宣言しています。iはfor文の制御変数として使われます。valueは最大値を記憶する変数、indexは最大値の要素の添え字番号を記憶する変数です。
 4行目で、データの値を記憶する配列を宣言しています。ここでは、配列の要素数を5としています。5行目から9行目までで、配列のそれぞれの要素に値を代入しています。
 最大値の探し方は次のようにします。まず、1番目の要素の値と添え字番号をvalueとindexに入れます。次に、2番目の要素の値とvalueを比較して、大きい方の値と添え字番号をvalueとindexに入れます。次に、3番目の要素とvalueの比較を行うというように、最後の要素まで同様の操作を行います。valueには、調べ終わった要素の中での最大値が入っていますので、最後に得られたvalueとindexに最大値とその添え字番号が入ります。
 上記の方法をプログラムでどうなっているか見てみましょう。10行目11行目で1番目の要素の値と添え字番号(0)をvalueとindexに代入し、初期化しています。12行目から18行目forブロックで、i番目の要素の値data[i]とvalueの比較を行っています。最後の要素の添え字番号が4ですので、12行目forでは、制御変数iを1から4まで変えています。13行目でdata[i]とvalueを比較します。valueの方が大きければ、valueとindexは変更する必要がありません。data[i]の方が大きければ、15行目16行目のように、今調べている要素の値と添え字番号をvalueとindexに入れます。


ヒントは下の動作確認にあります。

  1. 13行目の不等号を>から>=に変更すると結果はどのように変わるでしょうか?
  2. 最小値を求めるにはどのようにプログラムを変更すればいいでしょうか?

動作確認
Cシミュレータを使って、上のプログラムの動作を確認してみましょう。

Cシミュレータ
Cシミュレータによる動作確認をするときは上の絵をクリック
[注意]このリンク先のページはInternet Explore 3.0以降で正しく表示されます。


これで入門は終わりました。本学習ページで触れていないことは多数ありますが、簡単なプログラムは書けるようになったことでしょう。本学習ページで触れていないことを見るにはここをクリックしてください。
最後に、それでは、どの程度理解できたか、簡単な問題を解いて調べてみましょう。[ポストテスト]へ


TitleLineAnim.gif (2453 バイト)
http://or-lab.asahi-u.ac.jp/

このページの最終更新日は 00/01/27 です。
このページに関するご意見・コメントは板谷雄二(itaya@alice.asahi-u.ac.jp)までお願いします。

(C) 板谷雄二