前に少し 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
この講座の著作権はロベールが保有しています