第7講 for文以外の繰り返し処理
第1話 while文
この講では、for文以外のループ文のwhile文とdo while文を見ていきましょう。
まず、while文から。
while文とは、次の命令処理です。
while(条件式){
・
・
・
}
if文と同じで条件式が真のとき実施されます。
if文と違う点は、条件式が真である間は繰り返されるという点です。
つまり、for文と同じ繰り返し処理です。
例えば、次のようにプログラムを組むと、
int w;i;
w=0;
i=1;
while(i<=10){
w=w+i;
i++;
}
label1->Text=w.ToString();
実行結果
1から10までの和
1+2+3+45+6+7+8+9+10
が計算されます。
つまり、
int w,i
w=0;
for(i=1;i<=10;i++){
w=w+i;
}
label1->Text=w.ToString();
と同じプログラムになります。
トレースしてみましょう。
w=0;
i=1;
より、
i<=10をクリアして、while文が実行されます。
w=w+i;
i++;
から
w=0+1=1
i=1+1=2
これで1回目の処理が終わります。
ここで、再び条件式i<=10の判定が行われますが、
i=2でもちろんクリアされ、2回目の処理が実行されます。
w=w+i;
i++;
から
w=1+2=3
i=2+1=3
2回目の処理が終わり、条件式i<=10の判定が行われクリアして、
3回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=3+3=6
i=3+1=4
3回目の処理が終わり、条件式i<=10の判定が行われクリアして、
4回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=6+4=10
i=4+1=5
4回目の処理が終わり、条件式i<=10の判定が行われクリアして、
5回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=10+5=15
i=5+1=6
5回目の処理が終わり、条件式i<=10の判定が行われクリアして、
6回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=15+6=21
i=6+1=7
6回目の処理が終わり、条件式i<=10の判定が行われクリアして、
7回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=21+7=28
i=7+1=8
7回目の処理が終わり、条件式i<=10の判定が行われクリアして、
8回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=28+8=36
i=8+1=9
8回目の処理が終わり、条件式i<=10の判定が行われクリアして、
9回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=36+9=45
i=9+1=10
9回目の処理が終わり、条件式i<=10の判定が行われクリアして、
10回目の繰り返し処理が行われます。
w=w+i;
i++;
から
w=45+10=55
i=10+1=11
10回目の処理が終わります。
そして、条件式i<=10の判定が行われますが、
今回は11<=10で条件式を満たしません。
これでwhile文は処理を終了します。
もう一度wとiの動きだけとりだしてみましょう。
ループ前
w=0
i=1
1回目
w=0+1=1
i=1+1=2
2回目
w=1+2=3
i=2+1=3
3回目
w=3+3=6
i=3+1=4
4回目
w=6+4=10
i=4+1=5
5回目
w=10+5=15
i=5+1=6
6回目
w=15+6=21
i=6+1=7
7回目
w=21+7=28
i=7+1=8
8回目
w=28+8=36
i=8+1=9
9回目
w=26+9=45
i=9+1=10
10回目
w=45+10=55
i=10+1=11
ここでi<=10は11<=10となり真ではないのでwhile文を抜けます。
となるのです。
確かに、
1+2+3+45+6+7+8+9+10=55
が計算されてみます。
そして、実行結果
皆さんも
Form1を作り、コードをタイピングされ確認して下さい。
それでは、問題を3つ出してこの話を閉じましょう。
@ 1+2+3+・・・+100
A 2+4+6+・・+100
B 2+5+8+・・・+98
が計算できるようにコードをそれぞれ変更してください。
第6講第7話へ 第2話へ