サイトマップ / C言語講座>出入り口>総目次>目次:流れの制御>forループ(2)
/* forループは、次のような形をしています。
for (式1; 式2; 式3;) {
式4 ( );
式5 ( );
- - - -
}
式1はループに入る前に一度だけ実行されます。式2は終了条件を判断するもので、もし式2が真ならば、{ }の中が実行されます。式2が偽ならループから抜け出します。式3は再初期化を行います。{ }の中が実行されてから、実行されます。
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");
}
}
|
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−