第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
当ホーム・ページの一部または全部を無断で複写、複製、
転載あるいはコンピュータ等のファイルに保存することを禁じます。