for文の使い方
C言語で、たとえば同じ処理を100回繰り返したいという場合には、for文を使って、
のように書きます。ここでは、iという変数の値が0から99まで変化しながらfor文内のループを計100回繰り返します。ループの中にはprintf()が書かれているため、実際に0,1,2...99という値が100行に渡って表示されます。
for文は、一般的には次のような形をしています。
for文の動作を図6.1に示します。このように、for文はまず初期設定式を実行したあと、継続条件式を実行し、その値が真であればループで実行する文を実行し、最後に再設定式を実行したあと再び継続条件式を実行します。この動作が何度も繰り返され、継続条件式の実行結果が偽になるとループを抜け、for文を終了します。なお、継続条件式による条件判断はループの前に行なわれるため、条件によってはループで実行する文が一度も実行されない可能性もあります。
for文の初期設定式には、文字通り「i = 0」のような、変数を初期化する式を、継続条件式には「i のような条件判断を行う式を、再設定式には「i++」のように変数の値を次のループのために更新する式を
書くのが普通です。しかし、C言語のfor文はさらに一般化されていて自由度が高く、これらの初期設定式、継続条件式、再設定式に任意の式を書くことができます。
初期設定式、継続条件式、再設定式は、必要がなければ省略することもできます。継続条件式を省略した場合はその条件は常に真とみなされます。
なお、ループで実行する文がひとつしかない場合、文法的には{ }をつけて複文にする必要はありませんが、ソースの可読性を高めるため、{ }を省略しない方がよいでしょう。
1から100まで足してみる
for文を使って、整数値を1から100まで加える計算をするプログラムをリスト6.1に示します。このプログラムでは変数iの値が1から100まで変化しながらループを回り、ループの中ではsumという変数にiの値を加えています。
sum.cをコンパイルして実行すると、図6.2の実行例のとおり、正しく5050という値が表示されます。
基本的なwhile文の使い方
while文は、
という形をした文で、継続条件式の値が真である限り、ループを繰り返します。while文の動作を図6.3に示します。なお、while文ではfor文とは違って、継続条件式を省略することはできません。
while文は、for文から初期設定式と再設定式を取り除いたものと同じです。
たとえば、
while (i
と書いたのは、
for (; i
と書いたのと同じになります。
このように、for文はwhile文を兼ねており、while文はfor文の特別な場合であると考えていいでしょう。ただし、while文の場合は継続条件式を省略することはできません。
たとえば、前述のsum.c(リスト6.1)の中のfor文は、リスト6.2のようにwhileで書くこともできます。もちろん、図6.4のとおり実行結果も同じです。
なお、while文のループの中に後述のcontinue文がある場合、while文とfor文の動作に少し違いが発生します。sum.cとsum_while.cの例では、ループ中の際にi++が実行されるかどうかが違い、while文の場合はcontinueするとi++が実行されません。
このように、同じプログラムがfor文を使ってもwhile文を使っても書けるわけですが、for文を使うかwhile文を使うかは、ソースの可読性の問題などを考慮して決めればよいでしょう。通常は、ループ変数をインクリメント(またはデクリメント)しながら繰り返す場合はfor文を、とくにループ変数がなく、ある一定条件になるまでループを繰り返すという意味合いが強い場合はwhile文にすればよいでしょう。