[前へ]   [目次へ]   [次へ]

for ループ(C/C++)

今回は、C/C++の for while do の三種類のループの一つ、
for について解説します。

for の基本構文は、

for(初回式;継続条件;続行式) 

となります。
「初回式」はループ突入時に一回だけ実行されます。
通常は「継続条件」に使用する変数の初期値を代入する用途に使用します。

「継続条件」は for ブロック内を今から実行するかどうかを判定します。
「継続条件」は if 同様の条件式で、0以外が真で、0が偽です。
条件式が真になった場合は for ブロック内を実行します。
偽になった場合は for ブロック内は実行せず、ブロックの終点に移動します。
注意点は、この判定は初回にも実行されます。
初回でも条件式が偽だった場合、 for ブロック内のコードは一度も実行されません。
また、「初回式」「続行式」に何も書かなかった場合は何もせず、
「継続条件」に何も書かなかった場合は常に真(無限ループ)として扱われます。

「続行式」はループの二回目以降に実行されます。
通常は「継続条件」に使用する変数を更新する用途に使用します。


for にも一行構文とブロック構文があります。
基本的には if と同様のパターンです。
一行構文にした場合は、直後の一文がブロックで囲まれたように動作します。

一例を示します。
<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
< 10>
< 11>
< 12>
< 13>
< 14>
#include <stdio.h>

int main(void)
{
   
int i;//変数名 iやjは一般的にループカウンタ(ループの週回数をカウントする変数)とされます。
   
for(i=0;i<3;i++){//(1)ブロック構文
      
puts("ブロック構文");
      puts(
"その2");
   }
   
for(i=0;i<3;i++)puts("一行構文");//一行構文
   //終了待ち
   
getchar();
   
return 0;
実行結果:
ブロック構文
その2
ブロック構文
その2
ブロック構文
その2
一行構文
一行構文
一行構文


for ブロック内および目標行の puts の呼び出しが増えているのが確認できます。
まず、(1)の for ブロック構文の動作について見てみます。
for(i=0;i<3;i++)
ここで、「初回式」は「i=0」、「継続条件」は「i<3」、「続行式」は「i++」となります。
「続行式」の i++ は初登場ですが、単に i=i+1 と同じ意味です。
(異なる場合もありますが、今はそこには触れません)

for ブロックの実行手順は、以下のようになっています。
(1)「初回式」→(2)「継続条件判定」→(3)「(2)が真なら(4)、偽なら終了」。(4)「forブロック内コード実行」→(5)「forブロック内でreturnかbreakを実行したら終了、continueを実行するかブロックの終端に行ったら(6)」。(6)「続行式」→(7)「(2)へ戻る」

↓サンプルの5〜9行目
   int i;
   for(i=0;i<3;i++){
      puts("ブロック構文");
      puts("その2");
   }

このような場合だとまず、初回式で i が0に初期化されます。
次に、 i<3 の条件判定は、 i が0なので 0<3 で真、ブロック内のコードは実行されます。

次にブロック内のコードを実行しますが、上の実行手順表ではここで4択分岐になっています。
これはブロック内で最初にこの条件を満たした時、
つまり break または continue または return が実行されるか、
いずれも実行されずにブロックの終端に辿りつくかで次に進みます。

この例ではブロック内では puts を二度呼び出しているだけなので、
「ブロックの終端に到達」以外の条件は満たされません。
よって、二回の puts による出力が行われた後、続行式 i++ が実行されます。
続行式 i++ が実行されると i は1加算されて1になります。

次は条件判定に戻ります。今度は i は1なので 1<3 で真、ブロック内のコードは実行されます。
また puts によって文字列が出力され、また続行式 i++ が実行され、 i は2になります。

また条件判定に戻り、今度は i は2なので 2<3 で真、ブロック内のコードは実行されます。
またまた puts によって文字列が出力され、続行式 i++ が実行され、 i は3になります。

またまた条件判定に戻り、今度は i は3なので 3<3 で偽、ここで for ループが終了します。
ループが終了するとブロックの終端を越えたところ(サンプルソースでは10行目)から続行されます。

さて、ここまでで puts は各3回ずつ実行されたので、3回分出力されました。
条件判定を i<5 のようにすれば、偽になるまでに5回真になるので、5回分出力されます。


一行構文の方も、その次に続く一文だけが入ったブロックと考えれば、基本的には同じです。


次回は while ループと do ループについての予定です。

[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次

最終更新 2008/10/17