第13章  while文


今回は、while文の解説です。と、いってもこれも 今までに、ずいぶん出てきているので余り多くの説明は 不要でしょう。要するに、 グルグル文です。 同じことを繰り返し行います。人間なら、すぐに飽きてしまう ようなことを繰り返し、コンピュータにやらせます。 コンピュータをこき使ってやりましょう!

while(条件) { やりたいこと; やらせたいこと; }

条件が、真の間(1ということ)繰り返し、実行されます。 ところが、初めから条件が偽であれば{}内は、1度も 実行されません。逆に、条件が1であれば、いつまでたっても ループ内を抜けられません。(永久ループ) DOSのプログラミングでは、永久ループを作っておいて いろいろな条件で、ループを抜けさせるということが よく行われます。 この永久ループを抜ける方法としては、

(1)exit()で強制的に、プログラムを終了させる
(2)break文を使う
(3)goto文を使ってループの外へ脱出

などが、考えられます。(1)の方法は、すでに 第11章で行っています。 (3)の方法は、なんだか 昔のBASICみたいでいやですね。 Cでは、なるべくgoto文は使わないでください。 どうしても使いたいときは、1つのプログラム中に せいぜい1つ2つにしておいてください。従って、 当ホーム・ページではgotoの解説は行いません。 (いよいよ書くことが無くなったら、書くかもしれません (ー_ー;) )

では、while文を使って簡単なプログラムを作ってみましょう。 何か、新しいことを覚えたら、実際にプログラムを 作ってみることが大事です。

頭より、体で覚える!

と、いうのが当ホーム・ページのモットーです。 このホーム・ページに掲載されている プログラムは、すべて筆者のオリジナルです。 (「どうりで、へたくそなプログラムだと思った!」) それはともかく、今回は1から5000までの整数を 画面に表示して、どのくらいの時間がかかるか測定する プログラムを考えてみましょう。

ところで、時間はどうやって計ればいいの?

はい、time()関数を使います。

#include <time.h> time_t time(time_t *timer);

うーーん、これじゃさっぱりわからん!
time()関数は、標準時間の1970年1月1日0時0分0秒からの、 経過時間を秒で返す関数です。また同時に、引数のtimerにもこの 秒数が、格納されます。 ところで、time_tって一体何? VC++1.51のヘルプによると、「カレンダー時間を秒単位で表した型」 と説明されています。これじゃわかりませんね。 この関数は、time.hをインクルードする必要があるので、 これをのぞいてみましょう。VC++を使っているならば、 includeディレクトリのtime.hをエディタに開いて 眺めてください。

typedef long time_t;

と、いうのがありませんか。typedefというのは、当ホーム・ページ ではまだ解説していませんが、

typedef すでにある型 自分で作った新しい型;

というように使います。自分で勝手に新しいデータ型を作っちゃうのです。 新しいデータ型といっても、すでにある型を別な呼び方にするだけですが・・。
と、いうことでtime_tは、long型だということがわかりました。 どうして、こんなめんどうくさいことをするのか?その答えは、 だんだんプログラミングが上達してくればわかります。 特に、ウィンドウズのプログラムは、聞いたこともない型ばっかり 出てきます。でも、元を正せばintとか、charなどの基本的な型です。 と、いうことで基本が大事です。(当たり前です)

これで、目的のプログラムはできたも同然ですね。

今回は、すべてmain関数の中に書いてしまいました。 この程度の短いプログラムならmain関数のみにしても いいですね。(特に、どうしろという決まりはありません。) 最後のprintfの中で、かかる時間(秒)は%dで受けていますが コンパイラからは特に文句を言われませんでした。

筆者のコンピュータでは7秒かかりました。 何回か繰り返して、実行すると1秒くらいまで 短縮されます。これは、キャッシュなどが働いて CPUがまじめに働いてないためと思います。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Oct/28/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。