C言語入門:for文
C言語でプログラムを書いていると「同じ事を10回繰り返す」など、繰り返し処理をしなくなってきます。 ここでは、繰り返しを行うfor文の基本的な使い方を説明したいと思います。 ここでは、サンプルコードの結果は書いていません。 実際に手元にサンプルコードをコピー ⇒ コンパイル ⇒ 実行してみてください。
for文
for文は「最初はこうして、条件が満たされるまで繰り返し、繰り返すたびにこうする」という事を書くための文法です。 for文はforという文字列と「() ←括弧」と「{}←括弧」により表現されます。 「()」の中が条件文になります。 「{}」の部分が繰り返し行う内容です。
for文の条件部分は「;」により3つの部分にわけられています。 最初の部分は初期条件を入れます。 次の部分は繰り返しを行う条件を入れます。 最後の部分は繰り返す度に行う処理を表しています。 例えば、for文を利用して10回同じ処理を行うには以下のようにします。
#include <stdio.h>
int
main()
{
int a;
for (a = 0; a < 10; a++) {
printf("a = %d\n", a);
}
}
上記例では、for文の括弧の中は「(a = 0; a < 10; a++)」という風になっています。 まず、「;」を区切り文字だと思ってください。 すると、「a = 0」「a < 10」「a++」という3つのパートにわかれていることがわかると思います。
まず、最初の「a = 0」ですが、これは初期条件です。 この初期条件部分はfor文で最初に一度だけ実行されます。 上記例では「a = 0」なので、for文に入って最初にすることはaという変数に0という値を入れるということになります。
次に、for文の括弧の中の「a < 10」の部分ですが、これは繰り返し条件です。 for文は、この条件が真である間はずっと繰り返されます。 まず、for文の初期条件で「a = 0」になっているので一回目は「a < 10」の条件は真なので、一回目はfor文内部に入って「printf」が実行されます。
上記例内の「()」中の最後の条件は「a++」です。 これは、for文の最後の「}」に来たときに行われる処理を記述しています。 例えば、上記例ではprintfが行われた後にaという変数に対して「++ (1足す)」という処理が行われています。
では、上記例のfor文の挙動を流してみてみましょう。 まず、最初にaという変数に0という値が入ります。 次に「a < 10」という比較が行われます。 この時、aは0になっているので「a < 10」は真となり、printfが行われます。 次に、for文は繰り返し部分が最後になり「a++」が行われます。 「a++」が行われるとaという変数の中身は1になります。 1という数値は10より小さいので「a < 10」は真になり、printfが行われます。 次に、for文は繰り返し部分が最後になり「a++」が行われます。 これらの処理がaという変数が10になるまで繰り返されます。 aが10の時には「a < 10」は偽になります。 「a < 10」が偽になるとfor文は終了します。 上記例ではfor文が終了するとmain文が終了してサンプルは終了します。
サンプル2
次は、「a++」の部分を「a = a + 2」にするとどうなるか試してみましょう。
#include <stdio.h>
int
main()
{
int a;
for (a = 0; a < 10; a = a + 2) {
printf("a = %d\n", a);
}
}
サンプル3
これまでの例ではaの値は増えていきましたが、今度はaの値を減らしていく場合を示します。
#include <stdio.h>
int
main()
{
int a;
for (a = 10; a > 0; a--) {
printf("a = %d\n", a);
}
}
今度の例では、aは最初に10という値になります。 aの値はfor文を繰り返す度に1づつ減少していき、0になるとfor文が終了します。
サンプル4
最後に、ちょっとトリッキーですがfor文が一度も実行されない例です。 初期条件と繰り返し条件の関係を理解する一助になればと思います。
#include <stdio.h>
int
main()
{
int a;
for (a = 10; a < 0; a++) {
printf("a = %d\n", a);
}
}
今度の例では、aは最初に10という値になります。 aが10では「a < 0」の条件は偽になります。 そのため、for文は一度も処理されずに終わってしまいます。
おまけ