次の実行結果のように、3つの入力で最も小さいデータを表示させるプログラムを考えます。
(最も小さいデータが0ならプログラムを終了させています。)
小さいデータが0なら終了します aの入力>10 bの入力>20 cの入力>30 小さいデータは、10です aの入力>50 bの入力>40 cの入力>20 小さいデータは、20です aの入力>60 bの入力>10 cの入力>30 小さいデータは、10です aの入力>0 bの入力>3 cの入力>6 小さいデータは、0です 終わり
プログラムを考える時、少ないデータで考えて、わかったら 拡張するように作るのが最初のコツです。
まず次のように2つのデータの入力で考えてみます。
aの入力>10 bの入力>20 小さいデータは、10です
aの入力>30 bの入力>20 小さいデータは、20です
この部分の部分のプログラムは、次のようになるでしょう。
printf("aの入力>"); scanf("%d", &a); printf("bの入力>"); scanf("%d", &b); if(b < a){ printf("小さいデータは、%dです\n", b); } else { printf("小さいデータは、%dです\n", a); }
このような場合、小さい方のデータを記憶する変数を用意すると、目標の表示を後で行う考え方ができます。 (変数は、small と名前をつけました)
printf("aの入力>"); scanf("%d", &a); printf("bの入力>"); scanf("%d", &b); if(b < a){ small = b; } else { small = a; } printf("小さいデータは、%dです\n", small);
このようにsmall の変数を用意したことで、ifが終わってから、記憶しておいたsmallで表示できます。
プログラムでは、見えない内部でさまざま処理を行って、最後に表示させることがよくあります。
すぐに出力せずに、変数に記憶しておいて、後で利用するわけです。
何の変数を用意して、どこで記憶させ、どこで利用するかという
手順の違いでプログラムは簡単で分かりやすくなったり、長く分かり難くなったりします。
クイズや頭の体操と考えて、
十分に考えてプログラム分かりやすくなるよう検討して作るようにしてください。
そうして考えると、前述のプログラム部分は、次のようにelseを使わない書き方もできます。
printf("aの入力>"); scanf("%d", &a); small = a; /* bの入力がなければ、aが最も小さい */ printf("bの入力>"); scanf("%d", &b); if(b < small){ /* bの入力の方が小さいか */ small = b; } printf("小さいデータは、%dです\n", small);
このスタイルでプログラミングしてあると、入力数が次のように3つへ増えても簡単にできます。
太字赤の部分が、3つ目の変数に対する追加部分です。
#include <stdio.h> main() { int a, b, c; /* 入力用 */ int small; /* 小さいデータの記憶用 */ printf("小さいデータが0なら終了します\n"); do{ printf("aの入力>"); scanf("%d", &a); small = a; printf("bの入力>"); scanf("%d", &b); if(b < small){ small = b; } printf("cの入力>"); scanf("%d", &c); if(c < small){ small = c; } printf("小さいデータは、%dです\n", small); } while(small != 0); printf("終わり\n"); }
さてこのプログラム、実は、変数をa,b,c と3つも必要とせずに、
一つの変数で済むことに気が付いたでしょうか?
a,b,c は入力に使っているだけなので、最小かを判定して、最小ならsmallに記憶した後は使っていません。
つまり入力用として一つの変数があれば済む訳です。
入力用メッセージ表示が次のように同じであれば、2番目入力と3番目入力に対するプログラムは同じになります。
小さいデータが0なら終了します 入力>10 入力>20 入力>30 小さいデータは、10です 入力>50 入力>40 入力>20 小さいデータは、20です 入力>60 入力>10 入力>30 小さいデータは、10です 入力>0 入力>3 入力>6 小さいデータは、0です 終わり
上記は、3つの入力を行って、その3つ入力の最小値が0になるまで、3入力の処理を繰り返す処理です。
以下がこのソースで、上で示した変数をa,b,c を一つ変数aだけ使うよう変更したものです。
これを4つの入力を行って、その4つ入力の最小値が0になるまで、4入力の処理を繰り返す処理に変更しなさい。
(部分的にソース内で、コピー貼り付け操作の変更をしてください。)
←目標が得られるように修正してからクリックください。
(分からない場合もクリックください)
←わからない場合は、クリックして覚え、再びチャレンジしましょう。