KID's World
 

おしながき
トップページ
プログラミング
研究
いんすぴ
色日記
ソフトウェア
KID's Worldの歴史
リンク
小出俊夫について


制御文その2−for文

for文は、while文が少し賢くなったものだということを理解する

 

for文 〜指定回数くり返す〜

 前ページの while文は、ただ単に条件が成り立つあいだ、くり返しているだけでした。また、変数iを使って、10回くり返す、ということもやってみました。この「指定回数くり返す」ということを得意とする制御文があります。それがfor文です。

 
for(式1;式2;式3)
  文

 for文はwhile文の拡張版と考えて差し支えありません。この文をwhileで書き直すとこうなります。

 
式1;
while(式2){
  文
  式3;
}

 何でこんな形の制御文を作ったのでしょうか。これはとても合理的な形です。まず、次の例を見てください。

 
#include <stdio.h>

main()
{
  int i;

  for(i = 0; i < 10; i++)
    printf("i = %d\n", i);

  printf("end.\n");
}

 この例は、一番オーソドックスなfor文の使い方です。ではこのプログラムがどう動いているのか、順を追って説明します。while文で書き直した図を見ながら理解してください。

  1. まず「式1」を評価(実行)するので、iは0になります。
  2. 次に「式2」を評価します。この時iは0ですから条件は成り立ちます。
  3. よって「文」を実行します。つまり画面にiの内容が表示されます。
  4. 次に「式3」を評価(実行)、つまりここではiが1増えて、iの内容は1になります。
  5. これをくり返して、「式3」によってiが10になったときに、このループから抜け出します。

 そのため、この例では次のような実行結果になります。

 
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
end.

 「i = 10」は表示されていませんね。しかし0から始まっているので、「文」は10回くり返したことになります。

 さてその上でfor文の形を見てください。for文は「文」を指定した回数だけくり返すために作られた、といっても過言ではありませんね。for文をそのまま読むと「(式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文は使えます。

 

まとめ。

  1. for文は、while文を拡張したようなもので、主にある回数だけ文をくり返すときに使う。
  2. コンマ演算子「,」を使って、式をつないで一つの式にすることができる。

(1997/01/31 公開, 1998/03/13 改)

[目次へ] [次へ]

 著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.

 対応ブラウザについて