サイトマップ / C言語講座出入り口総目次目次:流れの制御>forループ(2)

青い直線

forループ(2)

青い直線

[forループ(1)]←このソース→[whileループ]

/* forループの復習 */

/* forループは、次のような形をしています。

    for (式1; 式2; 式3;) {
        式4 (  );
        式5 (  );
        - - - - 
    }

式1はループに入る前に一度だけ実行されます。式2は終了条件を判断するもので、もし式2がならば、{ }の中が実行されます。式2がならループから抜け出します。式3は再初期化を行います。{ }の中が実行されてから、実行されます。

for ループの使用例

    int i, j;    // i と j は int型の整数

例1:0から9の数字が表示される。

    for(i = 0; i < 10; i++)
        printf("i = %d\n", i);
	
    ++ はインクリメント演算子といい、
    i の値を1増加させます。

    i の初期値は0です。
    i が10より小さければ、
    printf(  )が実行され、
    次に、i の値を1増加させます。

例2:1から9の奇数が表示される。

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

    +=代入演算子です。
    i の値を2増加させます。
    i = i + 2 と同じです。

    i の初期値は1です。
    i が10より小さければ、
    printf(  )が実行され、
    次に、i の値を2増加させます。

例3:64から1まで、順次1/2にした数字が表示される

    for (i = 64; i > 0; i /= 2)
        printf("i = %d\n", i);

    /= は代入演算子です。
    i/2 の値を i に代入します。

    i の初期値は64です。
    i が正ならば、
    printf(  ) が実行され、
    次に、i の値を2で割ります。

    i の値は減少していきます。
    最後に1になります。
    1を2で割ると、i は int型の整数なので、
    0.5とはならず、小数点以下が無視され0になります。

例4:0から9と10から1の2つの数字が表示される

    for (i = 0, j = 10; j > 0; i++, j--)
        printf("i = %d\tj = %d\n", i, j);

    複数の式を書くこともできます。
    i の初期値は0で、 j の初期値は10です。

    '\t' はタブ(コード)です。

例5:0から10の数字が表示される

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

    関数を書くこともできます。

    例1と似た結果になりますが、
    i が9の時、条件式が成り立つので、
    i++ が実行され、i が10になり、
    printf(  )が実行され10が表示されます。

例6:無限ループ

    for ( ; ; )
        ;

    for (  )ループの中の式を、全て省略したら、
    無限ループとなります。

上記の例では、いずれもループ本体の中の式が一つなので、{ }は省略できます。

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

このように書いても文法的には正しいのですが、非常に見づらくなります。プログラムは自分だけでなく、他人が見ても見やすく書きましょう。必ず、インデント(タブキーで字下げする)しましょう。

ソースプログラムの説明

for ( )ループの中に、 scanf( )があります。scanf( )について復習します。

    #include  <stdio.h>
    int  scanf(const char *format, ...);

    例:n = scanf(format, ...);

    実行結果    戻り値
    成功        代入したデータの数
    失敗        EOF

for ( )ループの中のscanf( )は、double型の浮動小数点数に変換して、x にその値を入れます。成功したら、scanf( )は代入したデータの数を返します。失敗したらEOFを返します。scanf( )は、for ( )の条件式の位置にあるので、実行された後、評価されます。評価とは、0かそれ以外の値かを調べることです。

重要:0以外の数ならば真、0ならば偽。

もし、数字以外の文字をキーボードから入力すると、偽となりループから抜けます。数字を入力している限りループを繰り返します。この場合、 i はカウンタとして働きます。i は宣言した時点で1に初期化しているので、for ( )ループの中の初期化式を省略できます。 */

/* ここからソースプログラム */

#include <stdio.h>

void main(void);

void main(void)
{
        int  i = 1;
        double x;

        printf("何か入力して下さい\t");

                /* 数字以外の入力でループから抜ける */
        for ( ; scanf("%lf", &x); i++) {
            printf("%d: 入力したのは %lf です\n", i, x);
            printf("もう一度入力して下さい\t");
        }
}

/* ここまでソース */

[forループ(1)]←このソース→[whileループ]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:流れの制御>forループ(2)