
C言語の基本|for文の応用
for文は回数を数えるだけの道具ではありません。
始め方、続ける条件、進め方を工夫すると、繰り返し処理はぐっと自由になります。
for文は、C言語で繰り返し処理を書くときの基本構文です。
最初は i++ で1ずつ増やす形から覚えることが多いですが、for文の良さはそれだけではありません。
for文には、初期設定式、継続条件式、再設定式の3つがあります。
この3つを少し変えるだけで、2ずつ進めたり、逆向きに数えたり、倍数だけを並べたり、2つの変数を同時に動かしたりできます。
こうした応用が分かるようになると、for文は単なる反復処理ではなく、処理の流れを設計するための道具として使えるようになります。
とくに、どこから始めるか、どこまで続けるか、どう進めるかを意識して読む習慣がつくと、少し変わったfor文でも落ち着いて理解できるようになります。
この記事では、for文の3要素を改めて確認しながら、刻み幅の変更、逆順ループ、倍数の処理、小数を扱うときの注意、整数カウンタによる誤差回避、複数カウンタ変数の使い方まで、順番に丁寧に見ていきます。
for文の3要素をもう一度確認する
for文の基本形は次のとおりです。
for (初期設定式; 継続条件式; 再設定式) {
文;
}それぞれの要素には、次のような役割があります。
| 要素 | 役割 | ここを変えるとどうなるか |
|---|---|---|
| 初期設定式 | どこから始めるかを決める | 開始位置が変わる |
| 継続条件式 | いつまで続けるかを決める | 終了のしかたが変わる |
| 再設定式 | どう進めるかを決める | 増え方、減り方、方向が変わる |
たとえば、次のfor文を見てみましょう。
for (int i = 1; i <= 9; i += 2) {
printf("%d ", i);
}このfor文は、次のように読めます。
- iを1にして始める
- iが9以下の間は続ける
- 1回の繰り返しが終わるごとに2増やす
このように、for文は丸括弧の中を日本語に置き換えて読むと、とても理解しやすくなります。
応用パターンになるほど、この読み方が役に立ちます。
図1:for文の3要素を変えるとループの形が変わる

この図から分かること
for文は、1つの書き方を覚えて終わりではありません。
3つの要素を変えることで、繰り返しの性格そのものを変えられます。
たとえば次のような変化が起こります。
- 初期設定式を変えると、どの値から始めるかが変わる
- 継続条件式を変えると、どのタイミングで止まるかが変わる
- 再設定式を変えると、1ずつ進むのか、2ずつ進むのか、減っていくのかが変わる
この3つをセットで見る癖がつくと、複雑そうに見えるfor文でも落ち着いて読めるようになります。
応用パターン1 刻み幅を変える
for文では、再設定式を i++ から i += 2 や i += 3 に変えることで、進み方を調整できます。
この形は、奇数だけ、偶数だけ、一定間隔ごとに処理したいときに便利です。
たとえば、2から18までの偶数だけを表示したい場合は、次のように書けます。
2から18までの偶数を表示するプログラム
ファイル名:9_4_1.c
#include <stdio.h>
int main(void)
{
printf("2から18までの偶数を表示します。\n");
for (int i = 2; i <= 18; i += 2) {
printf("%d ", i);
}
printf("\n");
return 0;
}実行結果の例
2から18までの偶数を表示します。
2 4 6 8 10 12 14 16 18このプログラムでは、初期設定式が int i = 2 なので、2から始まります。
継続条件式は i <= 18 なので、18以下である間は繰り返します。
再設定式が i += 2 なので、毎回2ずつ増えていきます。
この書き方のよいところは、偶数だけを取り出したい意図がコードにそのまま表れていることです。
1ずつ増やしながら if文で偶数判定をする方法もありますが、最初から2ずつ進めた方が、狙いが分かりやすくなります。
刻み幅を変えるときは、継続条件式も合わせて確認することが大切です。
たとえば3ずつ増やすのに、終了条件を曖昧にすると、期待した最後の値にならないことがあります。
増え方と終了条件は、必ずセットで見るようにしましょう。
応用パターン2 逆順に回す
for文は、増やすだけでなく、減らしながら回すこともできます。
この形は、カウントダウンや、後ろから順番に処理したい場面でよく使います。
8から2までカウントダウンするプログラム
ファイル名:9_4_2.c
#include <stdio.h>
int main(void)
{
printf("8から2までカウントダウンします。\n");
for (int i = 8; i >= 2; i--) {
printf("%d ", i);
}
printf("\n");
return 0;
}実行結果の例
8から2までカウントダウンします。
8 7 6 5 4 3 2このプログラムでは、初期設定式でiを8にしています。
継続条件式は i >= 2 なので、2以上である間は繰り返します。
再設定式が i-- なので、毎回1ずつ減っていきます。
逆順ループで特に注意したいのは、条件式の向きです。
減らしていくのに i <= 2 のように書いてしまうと、最初の時点で条件が成り立たず、1回も実行されないことがあります。
逆順ループを見るときは、次の3点を意識すると分かりやすいです。
- どの値から始めるか
- どこまで減らすか
- 1回ごとにどう減らすか
増加ループと同じように、減少ループでも3要素をセットで見れば混乱しにくくなります。
応用パターン3 倍数だけを並べる
刻み幅を倍数にすれば、そのまま倍数の列を作れます。
この形は、一定間隔ごとの処理や、区切りごとの表示を作るときにも応用しやすいです。
5の倍数を5から50まで表示するプログラム
ファイル名:9_4_3.c
#include <stdio.h>
int main(void)
{
printf("5の倍数を5から50まで表示します。\n");
for (int i = 5; i <= 50; i += 5) {
printf("%d ", i);
}
printf("\n");
return 0;
}実行結果の例
5の倍数を5から50まで表示します。
5 10 15 20 25 30 35 40 45 50このプログラムでは、最初の値が5で、5ずつ増えながら50まで表示しています。
つまり、5の倍数だけを自然に取り出せています。
この考え方は、ただ数字を並べるだけでなく、次のような場面にもつながります。
- 10件ごとに改行する
- 一定回数ごとにログを出す
- 一定間隔で状態を確認する
for文の再設定式は、単に数を進めるためのものではなく、処理のリズムを決める役割も持っています。
そう考えると、for文の応用範囲が広く見えてきます。
図2:刻み幅と方向を変えるとループの動きが変わる

この図から分かること
for文では、再設定式を変えるだけでなく、初期設定式や継続条件式も合わせて調整することで、いろいろな流れを作れます。
この図の3つの例からは、次のことが分かります。
- i += 2 にすると、2ずつ進むループになる
- i-- にすると、逆向きのループになる
- i += 5 にすると、倍数を並べるループになる
つまり、for文は同じ形のまま、中身だけを変えてさまざまな繰り返しを表現できます。
ここがfor文の大きな強みです。
応用パターン4 doubleをカウンタ変数に使うときの注意
for文のカウンタ変数には、double型を使うこともできます。
ただし、この使い方には注意が必要です。
小数の 0.1 や 0.2 は、コンピュータの内部ではぴったり正確に表せないことがあります。
そのため、小数を何度も足していくと、少しずつ誤差がたまることがあります。
0.2ずつ増やして1.8まで表示するプログラム
ファイル名:9_4_4.c
#include <stdio.h>
int main(void)
{
printf("0.2ずつ増やして1.8まで表示します。\n");
for (double x = 0.2; x <= 1.8; x += 0.2) {
printf("%.17f\n", x);
}
return 0;
}実行結果の例
0.2ずつ増やして1.8まで表示します。
0.20000000000000001
0.40000000000000002
0.60000000000000009
0.80000000000000004
1.00000000000000000
1.19999999999999996
1.39999999999999991
1.59999999999999987
1.79999999999999982この実行結果を見ると、0.2、0.4、0.6と見えてほしい値が、内部的には少しずつずれていることが分かります。
表示桁数を多くしているので、誤差がはっきり見えています。
短い実験では大きな問題に見えなくても、継続条件式の判定に影響すると困ることがあります。
たとえば、最後にちょうど2.0まで表示したいと思っていても、内部的なずれのせいで思ったように止まらないことがあります。
そのため、小数をカウンタとして直接増やす方法は、学習用としては理解しやすいものの、実際には慎重に使う必要があります。
応用パターン5 整数カウンタで誤差を避ける
小数を扱いたい場合は、カウンタ変数そのものはint型で回し、表示や計算のときだけ実数に変換する方法が安全です。
この考え方を使うと、誤差の影響を受けにくくなります。
0.2刻みの値を整数カウンタで安定して表示するプログラム
ファイル名:9_4_5.c
#include <stdio.h>
int main(void)
{
printf("0.2刻みの値を0.2から2.0まで表示します。\n");
for (int i = 1; i <= 10; i++) {
printf("%.1f ", i * 0.2);
}
printf("\n");
return 0;
}実行結果の例
0.2刻みの値を0.2から2.0まで表示します。
0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0このプログラムでは、ループの進行そのものは整数で管理しています。
iは1から10まで、毎回1ずつ増えるだけなので、ループの制御はとても安定しています。
そして、表示するときに i * 0.2 を計算して、小数として出力しています。
こうすると、カウンタ変数の進み方に誤差が入り込まず、意図した回数だけしっかり繰り返せます。
小数を含む処理を書くときは、次のように考えると安全です。
- ループ制御はできるだけ整数で行う
- 小数は表示や計算の場面で使う
- 継続条件式に小数を直接使う場合は慎重に考える
この方法は、実務でもとてもよく使う考え方です。
応用パターン6 複数のカウンタ変数を同時に動かす
for文では、初期設定式や再設定式にカンマを使って、複数の処理を書くことができます。
これを使うと、2つの変数を同時に動かすループが書けます。
左端と右端の位置を同時に動かすプログラム
ファイル名:9_4_6.c
#include <stdio.h>
int main(void)
{
printf("左端と右端を同時に動かします。\n");
for (int left = 1, right = 7; left < right; left++, right--) {
printf("left=%d right=%d\n", left, right);
}
return 0;
}実行結果の例
左端と右端を同時に動かします。
left=1 right=7
left=2 right=6
left=3 right=5このプログラムでは、初期設定式でleftとrightの2つを同時に用意しています。
leftは1から始まり、rightは7から始まります。
継続条件式は left < right です。
つまり、左側と右側がまだ重なっていない間は、繰り返しを続けます。
再設定式では left++, right-- と書いています。
これによって、leftは右へ進み、rightは左へ進みます。
両端から中央へ近づいていく動きが、1つのfor文で表現できています。
ここで出てくるカンマは、見た目は同じでも役割を意識して読むことが大切です。
| 場所 | カンマの役割 | 例 |
|---|---|---|
| 初期設定式 | 宣言や代入の区切り | int left = 1, right = 7 |
| 再設定式 | 複数の更新処理を順に書く | left++, right-- |
このような書き方は、配列の両端を調べる処理や、2つの値を同時に追いかける処理などで活躍します。
for文を読むコツ
for文の応用パターンが増えてくると、見た目だけで難しそうに感じることがあります。
そんなときは、丸括弧の中を日本語で順番に読むのがいちばん確実です。
たとえば、次のfor文を見てみましょう。
for (int i = 3; i <= 15; i += 3)これは次のように読めます。
- iを3にする
- iが15以下の間は続ける
- 1回ごとに3増やす
また、次のfor文ならこう読めます。
for (int left = 1, right = 7; left < right; left++, right--)- leftを1、rightを7にする
- leftがrightより小さい間は続ける
- 1回ごとにleftを1増やし、rightを1減らす
この読み方ができると、応用的なfor文でも落ち着いて理解できます。
とくに次の3点を確認する習慣をつけると効果的です。
- どこから始めるか
- いつまで続けるか
- どう進むか
図3:小数の扱いと複数カウンタの応用

この図から分かること
for文の応用は、刻み幅や方向を変えるだけではありません。
小数をどう安全に扱うか、複数の変数をどう同時に動かすかまで考えられるようになると、表現できる処理が大きく広がります。
この図からは、次のことが読み取れます。
- doubleを直接カウンタにすると、誤差に注意が必要
- 小数を使いたいときは、整数カウンタで回してから実数に変換すると安定しやすい
- 複数のカウンタ変数を使うと、左右から近づくような処理も1つのfor文で書ける
for文は、3要素を工夫するだけでかなり多彩な表現ができる構文です。
そのぶん、1つ1つの要素を丁寧に読む力が大切になります。
for文の応用は3要素を使いこなすことから始まる
for文の応用パターンを見ていくと、特別に難しい構文が増えているわけではありません。
変わっているのは、初期設定式、継続条件式、再設定式の使い方です。
今回見てきた応用を整理すると、次のようになります。
- 刻み幅を変えると、2ずつや3ずつ進める
- 減らす形にすると、逆順のループになる
- 倍数を使うと、一定間隔の処理に応用できる
- doubleを直接使うと、小数の誤差に注意が必要
- intでループを制御すると、小数をより安全に扱いやすい
- 複数カウンタ変数を使うと、2つの動きを同時に管理できる
for文は、ただ回数を数えるだけの構文ではありません。
どのような流れで処理を進めたいかを、コンパクトに表現できるのが大きな魅力です。
応用パターンを見るときは、形だけを暗記するのではなく、丸括弧の中を日本語で読み下して意味をつかむことが大切です。
この読み方ができるようになると、少し変わったfor文に出会っても、落ち着いて理解できるようになります。
