2 基本制御構造(繰り返し)

繰り返しの構文に使われるC言語の命令は、次の通りで、英語の意味を書いておく。
for 〜の間
do する(C言語では命令形と考える)
while 〜する間
continue 続ける
break 遮断する

2.1 for

繰り返しの回数が予め分かっているときに、しばしば使われるfor文を説明する。 「初期値は○○、条件式が正しければ、ループを繰り返し、条件を再設定する。これは、 条件式検査 $ \rightarrow$ループ $ \rightarrow$条件の再設定を繰り返す。条件式が誤りに なれば、そのループから抜け出す」という構文に使われる。これは、次のように、書く。
書式
	for(初期値設定式; 継続条件式; 再設定式){
	   文1;
	   文2;
	   文3;
	}
これは、「継続条件が正しい限り、文1と文2、文3を実行する」となる。もし、制御式が誤り (偽)であれば、これら文は実行されず、ブロックの外側に出る。図2にこの 構文のフローチャートを示す。

以下のようなプログラムが、この構文の使用例である。

	for(a=1; a<=100; a++){
	   printf("a=%d\n",a);
	   sum=sum+a;
	   printf("sum=%d\n",sum);
	}
この構文の実行直前まで、sum=0ならば、1〜100までの和を計算することができる。 見慣れないa++は、a=a+1と同じで、aの値を1増加させている。これをイ ンクリメントと言う。

構文の内容は、次の通りである。

図 2: forの前判定繰り返し文
\includegraphics[keepaspectratio, scale=1.0]{figure/for.eps}

2.2 while

これも、for文同様、前判定繰り返しであるが、予め繰り返し回数が分からないとき には、while文が使われることが多い。「条件式が正しければ、ループ繰り返す。条件式が誤 りになれば、そのループから抜け出す」という構文に使われる。次のように、書く。
書式
	while(継続条件式){
	   文1;
	   文2;
	   文3;
	}
これは、「継続条件が正しい限り、文1と文2、文3を実行する」となる。もし、制御式が誤り (偽)であれば、これら文は実行されず、ブロックの外側に出る。図[*]にこの 構文のフローチャートを示す。

以下のようなプログラムが、この構文の使用例である。

	while(sum<=10000){
	   sum=sum+n;
	   printf("n=%d\n",n);
	   n++;
	}
この構文の実行直前まで、sum=0かつn=1ならば、

sum$\displaystyle =1+2+3+\cdots+n$    

を計算する。ただし、この繰り返し文を抜けたときには、sumの値は10000を越えている。

構文の内容は、次の通りである。

図 3: whileの前判定繰り返し文
\includegraphics[keepaspectratio, scale=1.0]{figure/while.eps}

2.3 do while

これも、後判定繰り返しで、予め繰り返し回数が分からないときに使われることが多い。 「ループ内を実行し、継続条件式が正しければ、さらにループを繰り返す。条件式が誤り になれば、そのループから抜け出す」という構文に使われる。次のように、書く。
書式
	do{
	   文1;
	   文2;
	   文3;
	}while(継続条件式);
これは、「文1と文2、文3を実行し、継続条件が正しければ、これを繰り返す」となる。 もし、制御式が誤り(偽)であれば、ブロックの外側に出る。図4にこの 構文のフローチャートを示す。

以下のようなプログラムが、この構文の使用例である。

	do{
	   sum=sum+n;
	   printf("n=%d\n",n);
	   n++;
	}while(sum<=10000);
この構文の実行直前まで、sum=0かつn=1ならば、

sum$\displaystyle =1+2+3+\cdots+n$    

を計算する。ただし、この繰り返し文を抜けたときには、sumの値は10000を越えて いる。

構文の内容は、次の通りである。

do while文とwhil文の動作はよく似ているが、「最初から継続条件式が誤り」 の場合に違いが生じる。違いは、

do while 最初から条件式が誤りでも、ループブロックを1回は実行する。
while 最初から条件式が誤りの場合、ループブロックは実行されない。
である。
図 4: do whileの後判定繰り替え詩文
\includegraphics[keepaspectratio, scale=1.0]{figure/do_while.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年9月10日


no counter