概要
for文は、繰り返し(ループ)を行う繰り返し文です。
同じ処理を繰り返す場合、for文を使うとプログラムをすっきりシンプルに記述できます。
(他の繰り返し文として、do文、while文があります。)
構文
for( 式1 ; 式2 ; 式3 ) 文
for文のフローチャート
- 「式1」を実行
- 「式2」を評価(評価結果が「真」なら「3」へ。「偽」なら繰り返しを抜ける)
- 「文」を実行
- 「式3」を実行し、「2」へ。
構文の解説
式1は、初めに1回だけ実行されます。
主に、繰り返し回数のカウントに使う変数の初期化に使用します。
式2は、繰り返しを続けるか、抜けるかの評価に使われます。
この式が成り立つなら「真」で繰り返し継続、成り立たないなら「偽」として抜けます。
式3は、文の実行後に実行されます。
主に、繰り返し回数のカウントに使う変数のカウントアップ(カウントダウン)に使用します。
プログラム例
#include <stdio.h>
int main(void)
{
int i;
int x = 0;
for( i = 1 ; i < 10 ; i = i + 2 )
{
x += i;
printf( "i = %d, x = %d\n", i, x );
}
}
実行結果
i = 1, x = 1
i = 3, x = 4
i = 5, x = 9
i = 7, x = 16
i = 9, x = 25
プログラムの解説
このプログラムは、1以上、10未満の奇数を積算するプログラムです。
繰り返し積算する処理にfor文を使用しています。
繰り返し回数のカウントに使う変数に「i」、積算した結果の格納用変数に「x」を使います。
for文の部分ですが、
式1は、「i = 1」です。カウントに使う変数「i」を1で初期化しています。
式2は、「i < 10」です。i < 10が成り立つ、つまり「i」が10未満であれば、繰り返しを継続します。
式3は、「i = i + 2」です。文を実行後、「i」を2カウントアップしています。
それでは、繰り返し処理を詳細に見ていきましょう。
- 初めに実行される式1で、「i」には1が代入されます。⇒(i = 1, x = 0)
- 式2が評価されます。「1 < 10」は成り立つ(真)ので、文を実行します。
- x+=iを実行します。⇒(i = 1, x = 1)
- printfの解説は省略(以降も同じ)します。
- 式3が実行されます。「i」には2が加算されます。⇒(i = 3, x = 1)
- 式2が評価されます。「3 < 10」は成り立つ(真)ので、文を実行します。
- x+=iを実行します。⇒(i = 3, x = 4)
- 式3が実行されます。「i」には2が加算されます。⇒(i = 5, x = 4)
- 式2が評価されます。「5 < 10」は成り立つ(真)ので、文を実行します。
- x+=iを実行します。⇒(i = 5, x = 9)
- 式3が実行されます。「i」には2が加算されます。⇒(i = 7, x = 4)
- 式2が評価されます。「7 < 10」は成り立つ(真)ので、文を実行します。
- x+=iを実行します。⇒(i = 7, x = 16)
- 式3が実行されます。「i」には2が加算されます。⇒(i = 9, x = 4)
- 式2が評価されます。「9 < 10」は成り立つ(真)ので、文を実行します。
- x+=iを実行します。⇒(i = 9, x = 25)
- 式3が実行されます。「i」には2が加算されます。⇒(i = 11, x = 4)
- 式2が評価されます。「11 < 10」は成り立たない(偽)ので、繰り返しを抜けます。
繰り返し文を使わないプログラム
お題の「1以上、10未満の奇数を積算するプログラム」を、繰り返し文を使わずに記述してみます。
ちょうど、電卓で1に3を足して、5を足して、という手作業のイメージをプログラムにしてみました。
#include <stdio.h>
int main(void)
{
int x = 0;
x += 1;
x += 3;
x += 5;
x += 7;
x += 9;
printf( "x = %d\n", x );
}
実行結果
x = 25
繰り返し回数がこの程度であれば、このように記載できます。
ただし、これが1000未満の積算だったら・・・、奇数を偶数に変えようと思ったら・・・。
かなり大変な作業になりますし、コピペミスも発生するでしょう。
for文で1000未満の積算に変更するなら、式2を「i < 1000」に変えるだけです。
このように、繰り返し処理には、繰り返し文を使うことで、
- 処理をシンプルに記述できる
- 繰り返し条件の変更も容易
- 繰り返し処理であることが一目で判る
といった多くのメリットを享受できます。
コメント