C言語学習ポータル(無料版) 学習コンテンツ 制御構造 for文——回数が決まった繰り返し

🔀 制御構造

for文——回数が決まった繰り返し

無料公開版に収録・読む目安 12分

🎯 for文の3つの部品と実行順序を理解し、回数の決まった繰り返しを正しく書ける

ラジオ体操の「深呼吸、4回」。回数が先に決まっている繰り返しはfor文の出番です。

for (初期化式; 継続条件; 更新式) {
    処理
}

3つの部品が並んでいます。動く順番は、慣れるまで少しややこしいので声に出して覚えてください。

  1. 初期化式 — 最初の1回だけ実行する
  2. 継続条件 — 真なら中へ、偽なら終わり
  3. 処理 — 本体を実行する
  4. 更新式 — 1周ぶんの後始末(カウンタを進める)
  5. 2へ戻る

つまり初期化は1回きり、条件は毎周のはじめ、更新は毎周の終わりです。

#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 5; i++) {
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

出力は 1 2 3 4 5 です。i は1から始まり、毎周おわりに1ずつ増え、6になった時点で i <= 5 が偽になって終わります。

🧪 ここはメモリの中身を1ステップずつ追う「メモリビジュアライザ」の場面です(アプリ本体で動きます)。

回数の数え方には定番が2つあります。i = 0; i < n で n 回、i = 1; i <= n でも n 回。C言語では前者、つまり 0から始めて < で止める書き方が圧倒的に多く使われます。配列の添字が0始まりなので、そのまま噛み合うからです(第8トラックで効いてきます)。

合計を求める、いちばん多い使い方も見ておきましょう。

#include <stdio.h>

int main(void) {
    int sum = 0;

    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    printf("1から100までの合計は %d\n", sum);   // 5050
    return 0;
}

sum をループの外で用意しておくのが要点です。中で宣言すると毎周作り直されて、合計が積み上がりません。「覚えておく箱は外、作業は中」と覚えてください。

ビット「初期化・条件・更新」を声に出して読むと、for は急に怖くなくなるよ。ボクは今でも指で3か所さしながら読んでる

罠を3つ挙げます。

その1、境界の1つ違い。 i <= 5 と i < 5 では回数が1つ違います。これは off-by-one と呼ばれる、プログラミングで最も多いバグの一種です。書いたら必ず「最初の値は? 最後の値は? 何回?」の3つを口に出して確かめてください。

その2、余計なセミコロン。 for (int i = 0; i < 5; i++); と書くと、for の本体は「何もしない文」になります。5回空回りしたあと、下のブロックが1回だけ実行されます。if のときと同じ形の事故です。

その3、i の寿命。 for (int i = …) と書いた i は、ループを抜けると消えます。ループの後で「何回目で止まったか」を使いたいなら、i をループの外で宣言してください。この使い分けは次の次のトピック(break)で実際に必要になります。

まとめます。for は「初期化・条件・更新」の3点セット。初期化は最初の1回だけ。境界の1つ違いに気をつける。積み上げる箱はループの外に置く。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

for文ふぉーぶん

「初期化・条件・更新」の3つを1行にまとめて書ける繰り返し構文のこと。回数があらかじめ決まっている繰り返しにとくに向いている。繰り返す回数があらかじめはっきりしている場面で、とくに書きやすい構文。

条件式じょうけんしき

真(true)か偽(false)のどちらかに評価される式のこと。if文やwhile文が「どちらへ進むか」を判断するための材料になる。true/falseで表される真偽値の型(bool)がこの評価結果にあたる。

変数へんすう

値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。

同じトラックのほかの項目

流れを変える——制御構造の全体像プログラムの流れが「順次・分岐・繰り返し」の3つでできていることを理解し、場面に応じてどれを使うか見当をつけられ… if文——もしも、の分かれ道if文の書き方と条件式の考え方を理解し、条件によって処理を分けられるようになる else if / else の分かれ道設計else / else if で複数の分かれ道を作れるようになり、範囲判定の順序を正しく設計できる 条件式の罠——= と == の悲劇代入 = と比較 == の違いを説明でき、条件式で取り違えたときに何が起きるかを見抜ける 論理演算子と短絡評価&& || ! で複数の条件を組み立てられるようになり、短絡評価の性質を安全のために利用できる switch文とfallthroughswitch文で値による多分岐を書けるようになり、break忘れによるフォールスルーを理解する while文——条件が決める繰り返しwhile文で終わりの読めない繰り返しを書けるようになり、for との使い分けを判断できる do-while文と入力チェックdo-while の「まず1回は実行する」性質を理解し、入力のやり直しループを書ける breakとcontinueの使いどころbreak でループを打ち切り、continue で残りをスキップできるようになり、それぞれの副作用を避けられる ループのネストと九九表二重ループの動きを説明でき、九九表のような表形式の出力を自分で組み立てられる 無限ループとの付き合い方無限ループの原因を3つの型で診断でき、意図的な無限ループを出口つきで安全に書ける
‹ switch文とfallthrough while文——条件が決める繰り返し ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH