🔀 制御構造
🎯 for文の3つの部品と実行順序を理解し、回数の決まった繰り返しを正しく書ける
ラジオ体操の「深呼吸、4回」。回数が先に決まっている繰り返しはfor文の出番です。
for (初期化式; 継続条件; 更新式) {
処理
}3つの部品が並んでいます。動く順番は、慣れるまで少しややこしいので声に出して覚えてください。
つまり初期化は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 をループの外で用意しておくのが要点です。中で宣言すると毎周作り直されて、合計が積み上がりません。「覚えておく箱は外、作業は中」と覚えてください。
罠を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つ違いに気をつける。積み上げる箱はループの外に置く。
i = 0; i < n で n 回。境界の1つ違い(off-by-one)が最も多いバグ「初期化・条件・更新」の3つを1行にまとめて書ける繰り返し構文のこと。回数があらかじめ決まっている繰り返しにとくに向いている。繰り返す回数があらかじめはっきりしている場面で、とくに書きやすい構文。
真(true)か偽(false)のどちらかに評価される式のこと。if文やwhile文が「どちらへ進むか」を判断するための材料になる。true/falseで表される真偽値の型(bool)がこの評価結果にあたる。
値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。