第三章 while


while
ある条件が真である間、繰り返し { } 内の処理をおこないます。
ある条件が偽になると、繰り返し処理を終了します。

繰り返したい処理、つまり { } 内の処理が一行の場合、{ } を省略することもできます。       
     while(条件)
       繰り返したい処理;
のような感じです。

<while>
#include<stdio.h>
main()
{
    int x=1;
    while(x<5)   /* x<5ならば真、そうでなければ偽となる */
    {
        printf("繰り返し処理%d回目\n",x);
        x=x+1;    /* xに1を足したものをxに代入 */
    }
    printf("終わり\n");
}
<実行結果>
繰り返し処理1回目
繰り返し処理2回目
繰り返し処理3回目
繰り返し処理4回目
終わり

まず int x=1; で、整数を入れられる箱 x を作って、そのなかに 1 を入れています。

while(x<5) において、条件 x<5 が真なら { } 内の処理をおこなうので、
今 x は 1 なので、条件が真となり { } 内の処理をおこないます。

printf のところで、現在の x の値、つまり 1 を %d の位置へ代入しています。

その後、x=x+1; で、x が 2 になります。
c言語では数学とは異なり、= はすべて、右辺を左辺に代入するという意味です。
つまり、x=x+1 は x が 1 のとき、1=1+1 という意味ではなく、x=1+1 という意味です。
このことから、c言語では(数式)=(数式)の形はできないことになります。


そして、またwhile(x<5) に戻り、条件の真偽を確かめ、繰り返しをおこなうか判断します。
この場合 x は 2 なので、また { } 内の処理がおこなわれます。

繰り返しの最後が4回目になるのは、
x が 4 のとき、printf で4回目を表示した後、
x=x+1; で、x は 5 になり、while(x<5) の判定に戻るため、
条件で偽になって、{ } 内の処理がおこなわれなくなり、
{ } の次にある printf("終わり\n"); を実行してプログラムが終了するからです。

(注意)while 内にある x=x+1; は忘れないでください。
     これがないと、いつまでたっても x は 1 なので、while の条件が偽になることがなく
     無限に繰り返してしまいます。(無限ループ)

     間違って無限ループに入ってしまった場合、
     Ctrl と C の同時押しでプログラムを止めることができると思います。

関係演算子,等値演算子について                                                                                     
while の条件式にでてきた < のような演算子は、他にも次のようなものがあります。        

a < b a が b より小さいならば
a <= b a が b 以下ならば
a > b a が b より大きいならば
a >= b a が b 以上ならば
a == b a が b と等しいならば
a != b a が b と等しくないならば

a == b は、とくに a = b と間違えやすいので注意してください。
a = b だと、a に b の値を代入していることになります。

論理演算子について
while など、条件が複数ある場合、次のような論理演算子を用います。

a && b a かつ b
a || b a または b

これらを含め、演算子には優先順位というのがあり、
書き方によっては予定通りの処理をおこなってくれない場合があります。

優先順位とは、計算問題で、足し算より掛け算の方が先に計算されるのと同じことです。   

大丈夫な場合の方が多いのですが、予定通りいかないときや、
複雑になり、わかりにくくなったときなどには、
それぞれまとまった条件や式を ( ) でまとめてください。

<前に戻る  |目次|  次へ進む>