サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−