*繰り返し条件の後置判定(おまけ) [#o50dd1fe]
繰り返し条件は、繰り返し行う処理の後に置くこともできます。
1から10まで繰り返し出力するプログラムを、繰り返し条件を後に置いてフローチャートで描くと、次のようになります。
#ref(./while3.png,50%)
*do-while文(おまけ) [#y9eacfa5]
繰り返し条件を後に置いた繰り返し処理は、do-while文を使って書くことができます。
do-while文は、次の形をしています。
#geshi(c){{
do {
処理
} while (繰り返し条件);
}}
do-while文は、次のように実行されます。
+波括弧 { } の中の「処理」を行う
+「繰り返し条件」を評価する
--条件を満たしていれば、1へ戻る
--そうでなければ、while文の次の処理に移る
do-while文を使って、1から10までの値を繰り返し出力するプログラムを作ると、次のようになります(プログラム1)。
#geshi(c){{
int i = 1;
do {
printf("%d\n", i);
i++;
} while (i <= 10);
}}
繰り返し条件を後に置くと、do-while文の波括弧 { } の中の処理は、少なくとも1回は実行されることに注意しましょう。
繰り返し条件が前に置に置いてあるwhile文では、波括弧の中の処理を一度も行わないというプログラムも作れますが、繰り返し条件が後に置いてあるdo-while文では、波括弧の中の処理を一度も行わないというプログラムは書けません。
次のような、繰り返し回数nをキーボードから入力し、1からnまで繰り返し出力するプログラムを、while文とdo-while文を使ってそれぞれ考えてみましょう(プログラム2, 3)。
#geshi(c){{
int i = 1;
printf("繰り返し回数を入力: \n");
scanf("%d", &n)
while (i <= n) {
printf("%d\n", i);
i++;
}
}}
#geshi(c){{
int i = 1;
printf("繰り返し回数を入力: \n");
scanf("%d", &n)
do {
printf("%d\n", i);
i++;
} while (i <= n);
}}
これを実行し、0と入力すると、どのようになるでしょうか。
繰り返し条件が後に置いてあるdo-while文は、どのようなものであっても繰り返し条件を工夫することによってwhile文に書き換えることができますが、繰り返し条件が前に置いてあるwhile文の中には、do-while文に書き換えることができないものがあります。
また、上で説明したように、for文はwhile文でも書けます。
ですから、本当は繰り返し処理はwhile文だけいいのです。
しかし、便利なfor文はよく使われますので、実際には、for文とwhile文を覚えておきましょう。
**演習1 [#x5ef91a1]
プログラム1-3を作成し、実行結果を確認せよ。
*まとめ [#iba395be]
while文が繰り返し条件を繰り返し行う処理の前に置くのに対し、''do-while''文は繰り返し条件を繰り返し行う処理の後に置きます。
while文では繰り返し処理を1度も実行しないことができますが、do-while文では繰り返し処理が必ず1度は実行されます。
繰り返し条件を工夫すればどのようなdo-while文でもwhile文に書き換えることができますが、繰り返し処理を1度も実行しない可能性があるwhile文をdo-while文に書き換えることはできません。
したがって、while文だけを覚えておけば十分です。
*練習問題 [#ea91359a]
**06B-1 do-while文(難易度★) [#r415beaf]
次の空欄部分を補って、Hello World!と5回出力するプログラムを完成させよ。
#geshi(c){{
int main(void) {
int i = 1;
do {
printf("Hello World!\n");
i++;
} while ( )
return 0;
}
}}