Linux講座にようこそ。このページは「C言語プログラミング入門 - 第6章.繰り返し処理の制御」です。

C言語プログラミング入門

6. 繰り返し処理の制御(2/2)

6.3 for文

for文も条件が成立している間、繰り返しの処理を実行しますが、while文と異なりfor文中で繰り返し制御条件を変えることができます。従って、予め繰り返し制御条件が分かっている場合はfor文が適しています。

6.3.1 形式

for文は括弧の中にセミコロンで区切って式を3つ指定します。式はそれぞれ、前処理、繰り返し制御条件、後処理になります。

for(式1; 式2; 式3)
    繰り返し実行する処理;
式1
繰り返し処理に入る前の前処理を指定します。通常、繰り返しを制御する変数の初期化を行います。
式2
繰り返し制御条件を指定します。条件が成立(真)している間は繰り返しの処理を続行し、不成立(偽)になると繰り返しから抜け出します。
式3
繰り返し処理の後の後処理を指定します。通常、繰り返しを制御する変数の更新を行います。
繰り返し実行する処理
処理が1文のみの場合はブロックにする必要はありませんが、複数の場合は{と}で括ってブロックにします。

式1は最初に1回実行するのみです。「式2 → 繰り返し実行する処理 → 式3」を式2の値が真の間繰り返します。

式1、式2、式3は省略可能です。ただし、区切り記号の;(セミコロン)は省略できません。なお、全て省略した場合は永久ループになります。

6.3.2 例題

九九の表を出力します。行と列をカウントする変数を用意し、繰り返しの中で1〜9までカウントアップします。そして、「行 × 列」の計算を行うことで九九の計算を行います。

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int     gyou;
  5.     int     retu;
  6.  
  7.     printf("九九の表を作成します\n");
  8.     for(gyou = 1; gyou <= 9; ++gyou)
  9.     {
  10.         for(retu = 1; retu <= 9; ++retu)
  11.         {
  12.             printf("\t%d", gyou * retu);
  13.         }
  14.  
  15.         printf("\n");
  16.     }
  17.  
  18.     return 0;
  19. }
$ ./ex06_3.prg
九九の表を作成します
       1       2       3       4       5       6       7       8       9
       2       4       6       8       10      12      14      16      18
       3       6       9       12      15      18      21      24      27
       4       8       12      16      20      24      28      32      36
       5       10      15      20      25      30      35      40      45
       6       12      18      24      30      36      42      48      54
       7       14      21      28      35      42      49      56      63
       8       16      24      32      40      48      56      64      72
       9       18      27      36      45      54      63      72      81
$
8行目
行の出力を制御します。変数gyouの値が1〜9の間、繰り返し処理を行います。「gyou = 1」が前処理、「gyou <= 9」が繰り返し制御条件、「++gyou」が後処理になります。
10行目
列の出力を制御します。変数retuの値が1〜9の間、繰り返し処理を行います。
12行目
「gyou * retu」で九九の計算を行います。
15行目
1行分出力したので改行します。

6.4 その他の文

ここでは繰り返し処理に関連する次の文を説明します。これらの文は処理の流れを強制的に変更しますので、多用すると理解しにくいプログラムになりがちです(特にgoto文)ので、使用は極力控えた方がよいでしょう。

  • break文
  • continue文
  • goto文

6.4.1 形式

break文は繰り返し(while文、do文、for文)やswitch文から抜け出ます。

continue文は繰り返し(while文、do文、for文)処理を中断し、繰り返し条件のチェックを行います。for文の場合は、式3(後処理)を行った後に繰り返し条件のチェックを行います。

goto文は指定したラベル行に制御を移します。

break;

continue;

goto ラベル;

6.4.2 例題

while文の例題として紹介したプログラムと同じ機能ですが、こちらはbreak文で繰り返しから抜け出しています。

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     char    cont;
  5.     double  taijyu;
  6.     double  sinchyo;
  7.  
  8.     printf("肥満度(BMI)の計算を行います\n");
  9.  
  10.     while(1)
  11.     {
  12.         printf("体重(kg)と身長(m)を入力してください ==> ");
  13.         scanf("%lf%lf", &taijyu, &sinchyo);
  14.         /* 肥満度(BMI) = 体重(kg) / 身長(m) / 身長(m) */
  15.         printf("肥満度は%.2fです\n", taijyu / sinchyo / sinchyo);
  16.  
  17.         printf("繰り返し肥満度の計算をしますか(Y/N) ==> ");
  18.         scanf("%*c%c", &cont);
  19.         if(cont != 'Y' && cont != 'y')
  20.         {
  21.             break;
  22.         }
  23.     }
  24.  
  25.     printf("終了します\n");
  26.  
  27.     return 0;
  28. }
10行目
C言語の場合、式の値が0は偽、0以外は真となりますので、1は真となり永久ループになります。「for(; ;)」も同じです。
21行目
変数contの値が「Y」でない場合、while文による繰り返しから抜け出します。