D.do - while文
do - while文はwhile文同様繰り返しを制御します。while文との違いはwhile文が「式」の判定をしてから「文」を実行するのに対し、do - while文はまず「文」を実行しその後に「式」を判定します。従って、do - while文では少なくとも1回は「文」を実行することになります。
また、whileの後ろに「 ; 」が必要なので注意して下さい。
[ 例 ] while文とdo - while文との違い
ex4-06.c
int cntw, cntdw;
/* 変数の宣言 */
cntw = cntdw = 0;
/* 変数の値を0に初期化 */
/* while文 */
while (cntw < 0) {
cntw++;
printf ("while : %d回目\n", cntw);
/* メッセージ表示 */
}
/* do - while文 */
do {
cntdw++;
printf ("do - while : %d回目\n", cntdw);
/* メッセージ表示 */
} while (cntdw < 0
);
E.for文
for文はwhile文と同様に繰り返し処理をします。ただし、式が3つあります。
実行手順は・・・
○まず「式1」が最初に実行される
○「式2」が真の間、「文」と「式3」をこの順序で繰り返し実行する
つまりfor文はwhile文を使って置き換えると次のようになります。
式1;
while (式2) {
文;
式3;
}
for文は変数をある範囲で変化させて処理したい時によく使われます。初期条件、増分を把握しやすいからです。
一方、while文は「式」がループの終了条件として強調して書かれています。よって、繰り返しの脱出条件を明示したいときにはwhile文の方がわかりやすいプログラムになります。
[ 例 ] 九九を表示
ex4-07.c
int i, j;
/* 変数の宣言 */
for (i=1; i<=9; i++
) { /* for文でiを1から9まで変化させる */
printf (" - %d の段 -\n", i);
for(j=1; j<=9; j++
) { /* for文でjを1から9まで変化させる */
printf ("%d * %d = %d\n", i, j, i * j);
/* i * jを表示 */
}
}
F.break文
break文は「文」の処理を中断し、ブロックから抜け出すための命令です。
[ 例 ] break文の使用例
ex4-08.c
int count = 0;
/* 変数の宣言 */
while (count < 20) {
/* 20より小さい間はループ */
if (count == 10) {
/* countが10だったら処理 */
printf (">> break文が処理されました <<\n");
break;
count = 0;
/* この文は処理されない */
}
printf ("%d ", count);
/* 値の表示 */
count++;
/* countの値をインクリメント */
}
/* break文が処理されるとここに抜け出る */
printf ("-- 処理終了 --\n");
/* 終了メッセージ表示 */
繰り返しが入れ子になっている場合はそのbreak文をくくっている最も内側のループを抜けます。
入れ子とは、while() { }のブロックの中にもう1つwhile() { }がある、というように文のブロックが多重構造になっている状態のことです。
[ 例 ] 50以下の素数を表示する
ex4-09.c
int num, val;
/* 変数の宣言 */
printf("50以下の素数 :");
for (num=3; num<=50; num++) {
/* numを3〜50まで増やしていく */
val = 2;
while (val < num) {
/* valを2〜(num-1)までループ */
if (num % val == 0) {
/* 割り切れる=numは素数ではない */
break;
/* break文でwhile文の処理を中断する */
}
val++;
/* valをインクリメント */
}
if (num == val) {
/* numは2〜(num-1)の全てで割り切れなかった */
printf (" %d", num);
/* = numは素数 */
}
}
G.continue文
break文同様「文」の処理を中断しますが、繰り返し文の最初の部分に戻り次の回の繰り返しになります。つまり、直接繰り返し処理からは抜けません。
[ 例 ] continue文の使用例
ex4-10.c
int count = 0;
/* 変数の宣言 */
/* continue文が処理されるとwhile( )に戻る */
while (count < 10) {
/* 10より小さい間はループ */
count++;
/* countの値をインクリメント */
if (count == 6)
/* countが6だったら処理 */
printf (">> continue << ");
continue;
count = 0;
/* この文は処理されない */
}
printf ("%d ", count);
/* 値の表示 */
}
printf ("\n-- 処理終了 --\n");
/* 終了メッセージ表示 */
繰り返しが入れ子になっている場合はそのcontinue文をくくっている最も内側のループに対して作用します。
[ 例 ] 1〜100の素因数を表示
ex4-11.c
int num, tnum, val;
/* 変数の宣言 */
for (num=1; num<=100; num++) {
/* numを1〜100まで変化させる */
val = 2;
tnum = num;
/* numをtnumに代入する */
printf ("%d = ", num);
while (tnum >= (val * val)) {
/* 素因数分解できる間はループ */
if (tnum % val != 0) {
/* 割り切れない場合 */
val++;
/* valをインクリメント */
continue;
/* continueする */
}
printf ("%d * ",val);
/* 見つかった素因数を表示 */
tnum /= val;
}
printf ("%d\n", tnum);
/* 見つかった素因数を表示 */
}
printf ("-- 処理終了 --\n");
/* 終了メッセージ表示 */