KID's World
 

おしながき
トップページ
プログラミング
研究
いんすぴ
色日記
ソフトウェア
KID's Worldの歴史
リンク
小出俊夫について


制御文その1−while文

条件が成り立つあいだくり返す文、whileの性質を知る

 

while文 〜条件が成り立つあいだくり返す〜

 
while(式)
  文

 while文は「式」が「真」であるあいだ、「文」をくり返す制御文です。この文は制御文の中で一番単純で、かつ多く使われます。では、次の例はどうなるでしょう。まだルールも良く分かっていませんが、実行結果からwhile文を理解してみましょう。

 
#include <stdio.h>

main()
{
  int i = 0;

  while(i < 10)
    i++;

  printf("%d\n", i);
}
  1. まず、式を評価します。式は「i < 10」つまり「iが10未満」です。
  2. 最初はiには0が入っているのでこの条件は満たされている、つまり「真」です。
  3. 真なので、文「i++;」が評価されます。つまり、iの数は1つ増えます。
  4. [1.]にもどって式を評価し、条件に合わないつまり「偽」になるまでくり返します。

 つまり、iの値が10になったら条件にあわなくなるのでくり返しをやめます。つまり、「i++;」を10回評価したことになります。そのため、画面には「10」が表示されます。では、もし最初から条件にあわなかったらどうなるでしょうか。

 
#include <stdio.h>

main()
{
  int i = 10;

  while(i < 10)
    printf("while loop\n");

}

 iには最初から10が入っているので、「i<10」は偽になります。画面には何も表示されませんでしたね? つまりwhile文は、次のルールに従って動いていることが分かります。

  1. 式を評価し、偽だったら終わる
  2. 文を実行
  3. [1.]へ戻る

 このルールのため、[1.]でいきなりはね飛ばされ、文を実行できなかったので、画面には何も表示されなかったのです。このようになっては不都合がある場合のために、式を最後に評価する制御文もあります。

 

whileのもう一つの顔、do while文

 
do
  文
while(式);

 do while文では、まず最初に文が実行され、その後に式が評価されます。前のページでやったように、ブロックを使って文を2つ以上実行させることができます。

 
/* while文の例 */

#include <stdio.h>

main()
{
  int i = 0;

  while(i < 10){
    i++;
    printf("%d\n", i);
  }
}
 
/* do while文の例 */

#include <stdio.h>

main()
{
  int i = 0;

  do{
    i++;
    printf("%d\n", i);
  }while(i < 10);
}

 プログラムを実行すると、1から10までの数字が縦に並びます。ここで、「inti = 0;」を「int i = 10;」と書きかえるとどうなるでしょう。do while文の例では、1度だけ「11」という文字が表示されるはずです。これがwhile文と、do while文の違いです。「えーいどうでもいいじゃんか、そんな事ぉ」と思わないでくださいね。どうしてもdo while文じゃないと、効率的に処理できない、そんな場面にいつか出くわすはずです。

書き方についての余談:

 while文などの場合、ブロックの始まりを意味する「{」は、「while(式)」や「do」のすぐ後に書くのが一般的です。また、コードの中に「/*」「*/」がありますが、C言語では「/*」と「*/」で囲まれた文字を無視するので、このように好きなことを書く事ができます。これをコメントと言います。あまりにもコメントを入れるのは考えものですが、必要な場所に必要なコメントを書いておくと、プログラムを後で見なおしたときに非常に楽にないようを把握することができるようになります。

 

「式」の意味を再確認

 ところで、条件式を書くところには「式」を書けばいいわけですから、こんな書き方もできる、と気づきましたか?

 
#include <stdio.h>

main()
{
  int i = 0;

  while(1)
    printf("while loop\n");
}

 勘のいい方ならすぐに想像がつくでしょう。これを実行すると画面に永遠に文字を表示しつづけます。なぜなら式が「1」、つまり常に「真」だからです。しかしこの技法はよく用いられるので、覚えておくとためになります。ただしこれだけ紹介しても、いつまでたっても抜け出せない無限ループしか作れないので、そこから抜け出す文も紹介しておきましょう。それはbreak文です。上の例を少し書き換えてみます。

 
#include <stdio.h>

main()
{
  int i = 0;

  while(1){
    printf("while loop\n");
    break;
  }
}

 この例では文字が一度しか表示されません。文字を表示した後に、「break;」があるために、while文のループから抜け出しているからです。

 

まとめ。

  1. while文は、条件が成り立つあいだ文をくり返す制御文。
  2. while文は、条件が成り立たない場合は文は実行しない。
  3. 文を実行した後に条件がなりたつかを調べるのがdo while文
  4. 式に「1」を指定すると無限ループになる。
  5. while文から抜け出すにはbreak文を使う。
 

質問

(1997/01/31 公開, 1999/03/13 改)

[目次へ] [次へ]

 

ちょっと休憩のコーナー

ここをクリックしてください。  今回は、宿泊関係でいってみましょう。こちらのサイト「Tocoo!」は、「やばい」ぐらい安い宿が紹介されてます。なんでこんな安い宿が提供できるのかというと、「空室の利用」をしているからなんだそうです。それは普通の旅行代理店も同じなんじゃないかと思いきや…。社長が熱く語るページ(ごあいさつ)を見てみてください。いやはやすごいな、と私は思ってしまいました。なんと今年(2001年)の6月から航空券の「原価販売」をスタートするそうで。なんともすごい話です。

 著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.

 対応ブラウザについて