第17章 for の書式

 前に少し for の書式について触れましたが、今回はもっと詳しく話していきます。今はまだよく分からなくても、そのうち分かってくると思うので、今回のうちに全部理解しなくても構いません。


 今回の要点は次の通りです。


 では、いってみましょう。


 以前に話した for の書式を思い出してみましょう。

for(i = 0; i < 10; i++){ ... }

 最初 i は 0 で、1回処理を行う毎に i を 1 ずつ増やしていき、i が 10 より小さかったらまた処理を行うのです。

 「最初...」が i = 0 にあたり、「1ずつ増やして...」が i++ にあたり、「i が 10 より...」が i < 10 にあたります。

 このように話しました。

 これを見ると、i = 0 を i = 5 に変えたり、i++ を i += 2 に変えたりしても支障はなさそうです

 もしそうしたら、「最初 i は 5 で、1回処理を行う毎に i を 2 ずつ増やしていき、i が 10 より小さかったらまた処理を行う」ということになるはずです。

 そのとき i は 5, 7, 9 の値をとるはずです。

 では、確かめてみましょう。

プログラム実行結果
// For3.cpp
#include <iostream.h>

int main()
{
    int i;
    for(i = 5; i < 10; i += 2)
        cout << i << endl;
    return 0;
}
5
7
9

 思った通りになりましたね。


 では、i = 10000 から始めてみましょう。i は 1 ずつ増やします。

 上に書いたとおりだとすると、10000 だけは表示されることになります。

プログラム実行結果
// For3b.cpp
#include <iostream.h>

int main()
{
    int i;
    for(i = 10000; i < 10; i++)
        cout << i << endl;
    return 0;
}

 あらら、何も表示されませんね。どうやら、条件の確認は一番初めでも行われるようです。


 今度はループの条件を変えてみましょう。変数 a を別に用意して、その値をループの条件にしてしまいましょう。果たして成功するでしょうか?

プログラム実行結果
// For3c.cpp
#include <iostream.h>

int main()
{
    int i, a = 0;
    for(i = 0; a < 10; i++)
    {
        cout << i << ", " << a << endl;
        a += 2;
    }
    return 0;
}
0, 0
1, 2
2, 4
3, 6
4, 8

 どうやら成功したようです。

 i が まだ 4 + 1 = 5 だというのに、a が 8 + 2 = 10 なので条件から外れてしまいました。なので、4, 8 までしか表示されませんでした。


 よくよく考えてみると、上の例では i は何の役にも立っていません。i を削除できたりはしないのでしょうか?

プログラム実行結果
// For3d.cpp
#include <iostream.h>

int main()
{
    int a = 0;
    for(; a < 10;)
    {
        cout << a << endl;
        a += 2;
    }
    return 0;
}
0
2
4
6
8

 やはりできるようです。でも、これでは

for(a = 0; a < 10; a += 2)...

と同じですね。実用的には、「i = 0 がもう既に行われているから i = 0 だけを省略する」とか、「i の増減は別の所で行うから、ここでは省略する」とかのように使えるようです。


 最初と最後のパラメータは省略できました。では、真ん中のパラメータはどうでしょうか?

プログラム実行結果
// For3e.cpp
#include <iostream.h>

int main()
{
    int a = 0;
    for(;;)
    {
        cout << a << endl;
        a++;
    }
    return 0;
}
0
1
2
3
4
.
.
.

 あわわ、無限ループになってしまいました。ということで、無限ループを行いたいときに for(;;) を使うことができます。

 では、その際どうやって抜け出せばいいのでしょうか? それは後の章で話します。


 いろいろ実験してきた結果をまとめてみたいと思います。

 for の書式は、

for(<初期化式>; <条件式>; <ループ式>)<実行文>

のようです。

 先ず、初期化式を行って、条件式を評価し、条件が真ならば実行文を実行します。そして、実行文が終わるとループ式を行って、再度条件式を評価します。その繰り返しを行うのが for 文の真の機能なのです。


 今回の要点は次の通りでした。


 では、さようなら。


第16章 ループと配列変数 | 第18章 もうひとつのループ

Last update was done on 1999.2.28

この講座の著作権はロベールが保有しています