- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/for文 へ行く。
- 1 (2015-09-28 (月) 13:12:40)
- 2 (2015-09-28 (月) 13:18:29)
- 3 (2015-10-12 (月) 10:27:31)
- 4 (2015-10-18 (日) 16:49:51)
- 5 (2015-10-19 (月) 11:44:11)
- 6 (2015-10-19 (月) 22:51:37)
- 7 (2015-10-20 (火) 19:40:56)
- 8 (2015-10-20 (火) 22:41:30)
- 9 (2015-10-21 (水) 11:12:02)
- 10 (2015-10-23 (金) 09:22:53)
- 11 (2015-10-23 (金) 10:51:26)
- 12 (2015-10-29 (木) 10:51:25)
- 13 (2015-10-29 (木) 10:51:25)
- 14 (2016-10-20 (木) 16:28:33)
- 15 (2016-10-22 (土) 22:04:53)
- 16 (2016-10-23 (日) 06:15:19)
- 17 (2016-10-23 (日) 06:15:19)
- 18 (2016-12-25 (日) 11:51:36)
同じ処理を繰り返し行う †
コンピューターは、同じ処理を繰り返し行うことが得意です。
次のようなプログラムを考えてみましょう。
Hello World!と10回画面に表示する
これをそのままプログラムにすると、次のようになります。
printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n"); printf("Hello World!\n");
全く同じ命令が10回繰り返されています。 (コメント部分はコンパイル時に無視されます。)
for文は、このような同じ処理を繰り返し行うことができます。
for文は、次の形をしています。
int i; for (i = 1; i <= 繰り返し回数; i++) { 処理 }
ここで、++ はインクリメント演算子です。 後で詳しく説明します。
for文を使って上のプログラムを書くと、次のようになります(プログラム1)。
int i; for (i = 1; i <= 10; i++) { printf("Hello World!\n"); }
これを実行すると、次のようになります。
luna% a.out Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World!
演習1 †
プログラム1を作成し、実行結果を確認せよ。
カウント変数 †
for文で使われている変数 i は、繰り返し回数をカウントするのに使われています。 繰り返し回数をカウントしているので、カウント変数と呼ばれます。 カウント変数の名前は、i でなくても構いません。
上のプログラムに、変数 i の値を出力する命令を追加します(プログラム2)。
int i; for (i = 1; i <= 10; i++) { printf("%d\n", i); printf("Hello World!\n"); }
これを実行すると、次のようになります。
luna% a.out 1 Hello World! 2 Hello World! 3 Hello World! 4 Hello World! 5 Hello World! 6 Hello World! 7 Hello World! 8 Hello World! 9 Hello World! 10 Hello World!
演習2 †
プログラム1をプログラム2に変更し、実行結果を確認せよ。
増分・減分演算子 †
for文の中で使われている ++ という演算子は、増分演算子(インクリメント演算子)といい、カウント変数 i の値を1増やす演算子です。
増分演算子と同じ仲間に、変数の値を1減らす減分演算子(デクリメント演算子)があります。
優先順位 | 演算子 | 使用例 | 意味 |
2 | ++ | i++ | iの値を1増やす |
++i | |||
−− | i−− | iの値を1減らす | |
−−i |
演算子が変数の前についている場合(前置)と変数の後についている場合(後置)では意味が違いますが、後日詳しく勉強します。
for文 †
上では、for文の形を次のように説明しました。
int i; for (i = 1; i <= 繰り返し回数; i++) { 処理 }
正確に説明すると、for文は次の形をしています。
for (初期化; 繰り返し条件; 更新処理) { 処理 }
if文と同じように、for文の波括弧 { } に含まれる命令文が0または1個のとき、この波括弧を省略することができます。
for文は、次のように実行されます。
- 「初期化」を行う
- 「繰り返し条件」を評価する
- 条件を満たしていれば、波括弧 { } の中の「処理」を行い、最後に「更新処理」を行う
- そうでなければ、for文の次の処理に移る
- 2へ戻る
したがって、カウント関数は1からでなく、0から始めることもできます。 また、カウント関数を1ずつ増やすのではなく、2ずつ増やしたり、1ずつ減らすこともできます。
たとえば、10から0までカウントダウンするプログラムは、次のようになります(プログラム3)。
int i; for (i = 10; i >= 0; i--) { printf("%d\n", i); sleep(1); }
演習3 †
プログラム3を作成し、実行結果を確認せよ。
無限ループと強制停止 †
for文は、条件を満たしている間繰り返し続けますので、条件を満たさないことがないと無限に繰り返しを続けます。 これを無限ループといいます。
たとえば、次のプログラムについて考えてみます(プログラム4)。
int i; for (i = 1; i = 10; i++) { printf("%d\n", i); printf("Hallo World!\n"); }
繰り返し条件の演算子を間違えて、代入演算子にしてしまっています。
繰り返し条件を評価すると、カウント変数に10が代入されます。 このとき、結果が0でないので、条件を満たしていると判断され、波括弧の中の処理と更新処理がおこなわれます。 更新処理によってカウント変数は11になりますが、繰り返し条件を評価すると、カウント変数に10が代入されるため、このfor文が停止することはありません。
このようなとき、コントロール・キーを押しながらCキーを押し、プログラムの実行を強制的に停止させます。 コントロール・キーを押しながらCキーを押す操作を、Ctrl+Cと書くことがあります。
演習4 †
プログラム2をプログラム4に変更し、実行して強制停止せよ。
合計を求める †
繰り返し処理を用いてよく行われることの一つが、合計を求めることです。
1から100までの整数の和を求めることを考えてみます。
そのままプログラムにすると次のようになります。
int i; for (i = 10; i <= 0; i--) { printf("%d\n"); sleep(1); } printf("\n");
もちろん、...の部分も省略せずに書かなければなりませんが、ここでは省略してあります。
この処理は、2を足す、3を足す、4を足す ... という足し算の繰り返しだと考えることができます。
したがって、加える数をカウント変数とすると、次のようなプログラムにできます。
int sum = 1 + 2 + 3 + 4 + 5 + ... + 99 + 100; printf("%d\n", sum);
変数sumが合計を表していて、今までの合計に2を加えて新しい合計とする、今までの合計に3を加えて新しい合計とする、...と繰り返しています。