第8回
制御構造と変数(4)~forとwhileによる繰り返し(反復)処理

forによる繰り返しの構造

繰り返し処理の基本とも言えるforの書式を紹介します。変数を用いて繰り返し回数を保持できることがポイントです。

forの基本書式

forの基本的な書式は以下のようになります。

for (<初期設定>; <継続条件> ; <再設定>) {
         : <処理>
}
<初期設定>では、繰り返しのために用いる変数に初期値を代入する式を記述します。このとき用いられる変数は繰り返しの回数を数えるために利用されるので、一般に『カウンタ変数』と呼ばれます。

<継続条件>ではカウンタ変数の値を比較演算子で調べる式を記述します。式が真の(条件を満たしている)間<処理>を実行します。

<再設定>では、<処理>を1回実行するたびにカウンタ変数の値を増加または減算する式を記述します。

カウンタ変数

上記の説明だけでは、抽象的で分かりにくいかもしれません。もう少し具体的に説明すると、次のようになります。

<初期設定>:一般に『<カウンタ変数>=<初期値>』という形式を用い、カウンタ変数に繰り返しの前に設定する値を代入します。

<継続条件>:一般に『<カウンタ変数> <比較演算子> <値>』という形式の式を記述し、式を評価した結果が真であれば<処理>が1回実行されます。

<再設定>:一般に『カウンタ変数++』とインクリメントしてカウンタ変数を1ずつ増やします。もちろん、『カウンタ変数+=2』のように2ずつ増やしたり、『カウンタ変数--』として減算しても構いません。


カウンタ変数と継続条件

リスト2では、以下のような構造を用いています。int型の“i”がカウンタ変数です。

for (i=1; i<=9; i++) {
     (a)  (b)   (c)
	printf("%d x %d = %d\n", num, i, num * i);
	              (d)
}
(a)が初期化で、カウンタ変数 i を1に設定しています。
(b)が継続条件で、変数 i が9以下である間、処理を実行するようにしています。
(c)が増分で、処理を1回実行するたびに変数 i が1増えるようにしています。
(d)が実行される処理です。もちろん、複数行でも構いません。また、処理が1行だけの場合は{ }で囲まなくても構いません。

特に(b)が『継続条件』であることに注意しましょう。『変数 i の値が9以下の場合は処理を続ける』という意味であって『9以下になったら繰り返しを終了する』ということではありません。この設定を間違えると、一度も処理を実行しないで終わったり、延々と処理を続けてしまったり、あるいは実行回数が1回足りなかったり……思わぬ結果を招くことになります。

(d)の繰り返される処理内では、通常カウンタ変数(この例ではi)の値を利用します。これによって「1回目の処理、2回目の処理、3回目の処理……」という具合に繰り返された回数に基づいた処理が実行できます。

このような、同じ処理を繰り返し実行する構造を『ループ』(loop=『環』)と呼びます。for命令で形成したループは『forループ』です。