C言語のfor文とは、繰り返し処理(ループ)を実行するための構文です。指定した回数処理を繰り返すだけでなく、処理をスキップしたり、ネストと呼ばれる多重ループや無限ループを実行することもできます。この記事ではfor文の使い方について解説し、同様な処理を実行することができるwhile文との違いについて解説します。
1. C言語のfor文とは
for文とは、繰り返す回数などの条件を指定して、処理を繰り返し実行することができる構文です。全く同じ処理を繰り返したり、回数に応じた処理を実行することができます。
2. for文の使い方
C言語のfor文の書式、for文を使った繰り返し処理の方法と、繰り返し処理を制御する方法について解説します。
2-1. for文の書式
for文は、繰り返しの条件を「()」で囲い、繰り返し実行する処理を「{}」で囲って記述します。
for (初期化 ; 条件式 ; 変化式) { //条件式が真の間、繰り返し実行する処理 }
初期化はfor文の開始時に一度だけ実行され、for文で使用する変数を初期化します。主に繰り返し数を管理する変数を初期化するために使用します。
条件式は処理の開始時に毎回評価され、真の場合に繰り返しを継続し、偽の場合は繰り返しを終了します。主に繰り返し回数を指定するために使用します。
変化式は処理の終了時に毎回実行されます。主に繰り返し数を管理する変数の値を増加させるなど、回数(何回目であるか)を制御するために使います。
2-2. for文による繰り返し処理
for文では、初期化、条件式、変化式に従って処理が繰り返されます。
0から3まで出力する処理をfor文で記述する例を以下に示します。
#include int main(void){ for (int i=0 ; i<4 ; i++) { printf(“%d\n”,i); } return 0; }
実行結果は以下の通りです。
0 1 2 3
for文の実行が開始されると、初期化の記述に従って変数iが宣言されて0で初期化されます。その後、条件式に従ってiが4より小さければ「{}」で囲われたprintf関数の処理を実行し、処理後に変化式に従ってiのインクリメント(1加算する処理)を実行します。
そのため、iが0から3までの間、iの値を出力後にiをインクリメントする処理が繰り返されます。
for文で繰り返し実行する処理としてfor文を記述することができます。これを二重ループといい、for文の内部にfor文を記述することを複数回行った場合、多重ループといいます。構文の内部に同じ構文を記述しているため、入れ子やネストとも呼ばれます。
1 – 1から3 – 3まで出力する処理をfor文の二重ループで記述する例を以下に示します。
#includeint main(void){ for(int i=1;i<=3;i++){ //for文① for(int j=1;j<=3;j++){ //for文② printf("%d - %d\n",i,j); } } return 0; }
実行結果は以下の通りです。
1 - 1 1 - 2 1 - 3 2 - 1 2 - 2 2 - 3 3 - 1 3 - 2 3 - 3
iが1から3までの間、for文②の処理が繰り返されます。For文②ではjが1から3までの間prinf()の処理が繰り返されるため、printf関数による出力は3 x 3 = 9回実行されます。
二重ループを使えば、二次元配列や表の操作を効率的に記述することができますが、二重ループ、三重ループと多重化するほど処理内容がわかりにくくなりますので注意してください。
またfor文では以下のように記述して「()」で囲われた繰り返しの条件を省略することができ、無限に処理を繰り返すことができます。
for ( ; ; ) { //無限に実行する処理 }
これを無限ループといいますが、処理が止まらなくなるため、あらかじめ処理を止める方法を確認してから使うようにしてください。後述するbreak句を使用すれば繰り返し処理を止めることができます。
2-3. for文の制御
C言語では、for文の「()」で囲んで記述する初期化、条件式、変化式以外でも繰り返しを制御することができます。
break句を使用すると、以降の処理を行わずにfor文の繰り返し処理を止め、for文の後続の処理に移ることができます。
0から9まで出力するfor文の処理をbreak句で止める例を以下に示します。
#include int main(void){ for (int i=0 ; i<10 ; i++) { if (i>3) { break; } printf(“%d\n”,i); } printf(“end\n”); return 0; }
実行結果は以下の通りです。
0 1 2 3 end
for文に記述された初期化、条件式、変化式では、変数iが0から9までの間、iの値を出力する処理が繰り返されますが、iが4のときにbreak句が実行され、iの値を出力せずにfor文の処理を抜けます。
continue句を使用すると、以降の処理を実行せずに次の回の処理に移る、つまりその回の処理をスキップすることができます。
0から9まで出力するfor文の処理をcontinue句でスキップする例を以下に示します。
#include int main(void){ for (int i=0 ; i<10 ; i++) { if (i<6) { continue; } printf(“%d\n”,i); } return 0; }
実行結果は以下の通りです。
6 7 8 9
for文に記述された初期化、条件式、変化式では、変数iが0から9までの間、iの値を出力する処理が繰り返されますが、iが5まではcontinue句が実行され、iの値を出力せずに次の回の処理に移ります。
3. while文との違い
C言語で処理を繰り返し実行する構文として、for文の他にwhile文があります。書式は異なりますが、for文はwhile文で書き換えることができます。
0から3まで出力する処理をwhile文で記述する例を以下に示します。
#include int main(void){ int i=0; while (i<4) { printf(“%d\n”,i); i++; } return 0; }
for文の条件式を残し、初期化と変化式を他の箇所で記述することによりwhile文に書き換えています。
for文でもwhile文でも繰り返し処理を実行することができますが、その違いは繰り返し条件の記述内容です。for文は初期化、条件式、変化式があり、一定の回数処理を繰り返す場合に向いている構文です。一方でwhile文は条件式のみがあり、一定の条件を満たす間処理を繰り返す場合に向いている構文です。
4. さいごに
C言語のfor文の書式、繰り返し処理の記述方法や制御方法と、同様な処理を実行することができるwhile文との違いについて解説しました。繰り返し処理は、C言語によるプログラミングの基本となる処理のひとつです。break句, continue句を使うことで繰り返し行う処理の内容を変えることもできますので、ぜひ身につけてください。