D.do - while文
do - while文はwhile文同様繰り返しを制御します。while文との違いはwhile文が「式」の判定をしてから「文」を実行するのに対し、do - while文はまず「文」を実行しその後に「式」を判定します。従って、do - while文では少なくとも1回は「文」を実行することになります。
また、whileの後ろに「 ; 」が必要なので注意して下さい。
 do {
  文
 } while ( 式 );

[ 例 ] while文とdo - while文との違い  ex4-06.cGet! ソースファイル
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つあります。
for ( 式1; 式2; 式3 ) {
 文
}

実行手順は・・・
○まず「式1」が最初に実行される
○「式2」が真の間、「文」と「式3」をこの順序で繰り返し実行する
つまりfor文はwhile文を使って置き換えると次のようになります。
式1;
while (式2) {
 文;
 式3;
}
for文は変数をある範囲で変化させて処理したい時によく使われます。初期条件、増分を把握しやすいからです。
一方、while文は「式」がループの終了条件として強調して書かれています。よって、繰り返しの脱出条件を明示したいときにはwhile文の方がわかりやすいプログラムになります。

[ 例 ] 九九を表示  ex4-07.cGet! ソースファイル
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;

[ 例 ] break文の使用例  ex4-08.cGet! ソースファイル
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.cGet! ソースファイル
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;

[ 例 ] continue文の使用例  ex4-10.cGet! ソースファイル
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.cGet! ソースファイル
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"); /* 終了メッセージ表示 */

Jump to Phase #04-1Phase #04-1: 制御文(1) へ
Phase #04-3: 制御文(3) へJump to Phase #04-3

△戻る
▲トップに戻る