![]() |
|
制御文その2−for文for文は、while文が少し賢くなったものだということを理解する for文 〜指定回数くり返す〜前ページの while文は、ただ単に条件が成り立つあいだ、くり返しているだけでした。また、変数iを使って、10回くり返す、ということもやってみました。この「指定回数くり返す」ということを得意とする制御文があります。それがfor文です。
for文はwhile文の拡張版と考えて差し支えありません。この文をwhileで書き直すとこうなります。
何でこんな形の制御文を作ったのでしょうか。これはとても合理的な形です。まず、次の例を見てください。
この例は、一番オーソドックスなfor文の使い方です。ではこのプログラムがどう動いているのか、順を追って説明します。while文で書き直した図を見ながら理解してください。
そのため、この例では次のような実行結果になります。
「i = 10」は表示されていませんね。しかし0から始まっているので、「文」は10回くり返したことになります。 さてその上でfor文の形を見てください。for文は「文」を指定した回数だけくり返すために作られた、といっても過言ではありませんね。for文をそのまま読むと「0(式1)から10まで(式2)1ずつ増やし(式3)ながら文を実行する」と読めなくもありません。for文は、何回くり返したかを知るために変数iを「カウンタとして」使っているにすぎないのです。 ところで、一つの式で2つの変数の初期化をすることもできます。例えば、「i = 10, j = 20」です。このようにコンマ「,」で区切ると、それ全体を式として扱う事ができます。このコンマはコンマ演算子と言われる、「+」や「<」等と同じ立派な演算子です。しかしこの演算子は何も演算しません。これをfor文に応用すれば、 for(i=0, j=0; j<100; i++, j+=i){
…
}
という表現が可能で、しばしば使われます。この例では、まずiとjが0に初期化され、iは1ずつ増え、jはiの分だけ増えます。そのためjの値は加速度的に増え、jの値が100以上になったところでfor文のお役御免となります。また普通はやりませんが、「演算子である」と考えれば、こんなこともできる事がわかります。 j = ((i = 0) , printf("Hello!\n"));
ちょっと分かりにくいですけど、まず「i = 0」が実行され、次にprintfが実行され、その値がjに入るので、jの内容は7になります。 補足ですが、for文でもbreak文は使えます。 まとめ。
(1997/01/31 公開, 1998/03/13 改) |
![]() |
著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.