今回は以前作った最大値を求めるプログラムを配列を使って作り直してみます。
前回と同じく、初期値は最初から設定されているものとします。
では最初の問題です。
次のプログラムを見てください。
<sample program 066-00>
#include <stdio.h> #define COUNT 10 int main(void) { int data[COUNT] = { 23, 45, 9, 67, 98, 55, 32, 76, 12, 88 }; int i; int max; /* ここにプログラムを追加 */ printf("最大値は%dです。\n", max); return 0; } |
見ての通り、配列中の最大値は「98」です。
しかし、何度も書きましたがコンピュータがこれを最大値として認識するにはこちらが手順(アルゴリズム)を教えなければなりません。
以前書いたプログラムを参考に最大値を求めるプログラムを考えてください。
<実行結果>
最大値は98です。 続行するには何かキーを押してください・・・
解答例です。
<sample program 066-01>
#include <stdio.h> #define COUNT 10 int main(void) { int data[COUNT] = { 23, 45, 9, 67, 98, 55, 32, 76, 12, 88 }; int i; int max; max = data[0]; for (i = 1; i < COUNT; i++) { if (max < data[i]) { max = data[i]; } } printf("最大値は%dです。\n", max); return 0; } |
<実行結果>
最大値は98です。 続行するには何かキーを押してください・・・
配列の最初のデータを仮の最大値としておいて、他の要素と比較する方法です。
最初のデータが仮の最大値ですから、調べるのは次のデータからで構いません。
そのため、for文の初期値は、
i = 1; |
となっています。
では、このプログラムに最小値を求めるプログラムを追加して、最大値と最小値が表示されるよう改良してみましょう。
最小値は「min」という変数に入れることにしましょう。
<実行結果>
最大値は98です。 最小値は9です。 続行するには何かキーを押してください・・・
解答例です。
<sample program 066-02>
#include <stdio.h> #define COUNT 10 int main(void) { int data[COUNT] = { 23, 45, 9, 67, 98, 55, 32, 76, 12, 88 }; int i; int max; int min; max = data[0]; min = data[0]; for (i = 1; i < COUNT; i++) { if (max < data[i]) { max = data[i]; } if (min > data[i]) { min = data[i]; } } printf("最大値は%dです。\n", max); printf("最小値は%dです。\n", min); return 0; } |
<実行結果>
最大値は98です。 最小値は9です。 続行するには何かキーを押してください・・・
最小値を求めるにはif文の不等号の向きを変えるだけでできます。
次のように最大値を求めるループと最小値を求めるループを分ける方法もありますね。
<sample program 066-03>
#include <stdio.h> #define COUNT 10 int main(void) { int data[COUNT] = { 23, 45, 9, 67, 98, 55, 32, 76, 12, 88 }; int i; int max; int min; max = data[0]; for (i = 1; i < COUNT; i++) { if (max < data[i]) { max = data[i]; } } min = data[0]; for (i = 1; i < COUNT; i++) { if (min > data[i]) { min = data[i]; } } printf("最大値は%dです。\n", max); printf("最小値は%dです。\n", min); return 0; } |
<実行結果>
最大値は98です。 最小値は9です。 続行するには何かキーを押してください・・・
短いですが、今回はこれで終わりです。
次回は、別の方法で最大値を求めてみます。