繰り返しの記述方法のバリエーション
このページでは 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 (反復を継続する条件) ;
となる。ここで、おしまいのセミコロンは必ず必要である。