繰り返しの記述方法のバリエーション

このページでは for文 以外の繰り返しの記述方法を簡単に紹介する。

while文

このCの入門編では、繰り返しの記述は、パターンを統一する意図もあって、できるだけ for文 を使うようにしている。 C言語で繰り返しのアルゴリズムを記述する方法としては、for文の他に、while文があり、こちらもforと同じくらいよく登場する。

while文の書き方はfor文よりもずっとシンプルで

while (反復を継続する条件) 繰り返しの内容 ;

である。for( ; ; ) の真ん中の「反復を継続する条件」のところだけを取り出した

for ( ; 反復を継続する条件 ; ) 繰り返しの内容 ;

と、while文は等価である。

1から10までの合計を求める例題プログラムを while文を使って書き改めると、以下のようになる。 forを使ったプログラムと見比べると、ループ変数の初期化の部分(n=1)がwhile文の前に、反復の都度実行する n=n+1 が、反復内容の最後に、それぞれ移動している点に注意。

#include <stdio.h>
main( )
{
     int n, sum ;
     sum=0 ;
     n=0 ;
     while (n<=10) {
	     sum = sum + n ;
	     n = n + 1 ;
     }
     printf("1から10までの合計: %d\n",sum) ;
}

do while文

反復を含むアルゴリズムには、ときたま、反復の継続条件のチェックを、繰り返しの最後の部分で行うパターンが現れる。 そのような場合には、以下で説明するdo while文を使うと、うまくそうしたパターンを記述することができる。

例えば、例題4bを少し書き換え、if文を繰り返しの項目の最後に移動すると

#include 
#include <math.h>
main()
{
   float a,b,e ;
   a=1.0 ;
   for(;;) {
      b=1+1/a ;
      e = fabs(a-b) ;
      a = b ;
      if (e<0.0001) break ;
   }
   printf("計算結果= %f",a) ;
   printf("数学的な結果= %f\n",(1.0+sqrt(5.0))/2.0) ;
}

となる。これと同じ処理を do while文を使ってコーディングすると

#include 
#include <math.h>
main()
{
   float a,b,e ;
   a=1.0 ;
   do {
      b=1+1/a ;
      e = fabs(a-b) ;
      a = b ;
   } while (e >= 0.0001) ;
   printf("計算結果= %f",a) ;
   printf("数学的な結果= %f\n",(1.0+sqrt(5.0))/2.0) ;
}

となる。 for文を使った例では『繰り返しを止める条件』であった箇所が、do while文では『繰り返しを継続する条件』に変わっている点に注目。

改めて do while文 の書式をまとめると、

do { 繰り返しの内容 ; } while (反復を継続する条件) ;

となる。ここで、おしまいのセミコロンは必ず必要である。