C++入門|繰り返しとfor文

for文は、修行を決めた回数だけくり返すための基本技。回数を数えながら同じ処理を進めれば、C言語の流れがぐっと見えやすくなります。

C言語では、同じ処理を何度も実行したい場面がよくあります。
たとえば、1から5まで順番に表示したいときや、決まった回数だけ同じ修行をくり返したいときです。

こうした場面で活躍するのが、繰り返し処理 です。

ドラゴンボール風にたとえるなら、繰り返し処理は修行メニューを一定回数続ける特訓のようなものです。
1回だけパンチを出して終わるのではなく、5回連続でパンチする、10回ジャンプする、気を3ずつ減らしながら修行を進める、というように、同じ流れを条件に合わせて何度も実行する のが繰り返し処理です。

C言語には、繰り返し処理を行う方法として for文while文 があります。
この中でも、最初にぜひ覚えておきたいのが for文 です。for文は、何回くり返すのか、どこから始めるのか、1回ごとにどう変化させるのかを、ひと目で分かりやすく書ける、とても便利な書き方です。

ここでは、for文の基本的な仕組み、for文の書式、インクリメントとデクリメント、代入演算子、そしていろいろなfor文の書き方まで、やさしく丁寧に見ていきます。

繰り返し処理とは何か

繰り返し処理とは、ある処理を一定回数、あるいは条件が満たされている間、何度も実行することです。

たとえば、同じメッセージを5回表示したいとき、1回ずつ同じprintfを書くこともできます。
でも、それでは回数が増えるたびに書く量が多くなってしまいます。

そこで、for文のような繰り返し処理を使えば、短く、分かりやすく、間違いにくく書けます。

ドラゴンボール風にたとえるなら、修行のたびに「もう1回」「もう1回」と手で書き足すのではなく、「5回くり返す」という修行ルールを最初に決めておくイメージです。

用語意味ドラゴンボール風のイメージ
繰り返し処理同じ処理を何度も実行する同じ修行メニューを連続で行う
for文回数や条件を決めてくり返す修行回数を数えながら進める特訓
while文条件が成り立つ間くり返す条件が続く限り修行を続ける

今回は、繰り返し処理の中でも、特に使う機会の多い for文 を中心に見ていきます。

for文を使った基本的なプログラム

まずは、for文を使った基本のプログラムを見てみましょう。

ここでは、1回目から5回目までの修行回数を順番に表示するプログラムを使います。

プロジェクト/ファイル名: Chap1_04/main.c

#include <stdio.h>

int main(int argc, char** argv) {
    int round;

    // 1回目から5回目までの修行回数を表示する
    for (round = 1; round <= 5; round++) {
        printf("%d回 ", round);
    }

    printf("\n");
    return 0;
}

このプログラムを実行すると、次のように表示されます。

1回 2回 3回 4回 5回

この結果を見ると、for文の中に書かれた処理が5回実行され、変数roundの値が1から5まで順番に増えていることが分かります。

ドラゴンボール風にいうと、修行カウンターが1回目から始まり、1回修行するごとに1ずつ増えて、5回目まで表示されたら修行を終える流れです。

図:for文で修行回数を1から5までくり返す流れ

この図が示していること

この図では、for文がどのような順番で動くのかを表しています。

まず、roundに1を入れてスタートします。次に、round <= 5 が成り立っているかを確認します。条件が成り立っていれば、for文の中の処理を実行し、表示を行います。そのあと round++ で値を1増やし、もう一度条件確認に戻ります。これを round が5以下の間くり返します。

for文は、開始の値、続ける条件、1回ごとの変化 がセットになっているのがポイントです。

for文の書式を見てみよう

for文の基本的な書き方は、次のようになります。

for (初期化処理; 条件式; 増分処理) {
    繰り返したい処理
}

この形を、先ほどのプログラムに当てはめると次のようになります。

for (round = 1; round <= 5; round++) {
    printf("%d回 ", round);
}

for文の丸カッコの中には、3つの要素があります。

部分内容意味
初期化処理round = 1最初にroundを1にする
条件式round <= 5roundが5以下の間くり返す
増分処理round++1回ごとにroundを1増やす

ドラゴンボール風にたとえると、次のような修行ルールになります。

  • 最初は1回目から始める
  • 5回目までは修行を続ける
  • 1回終わるたびに回数を1つ増やす

この3つがまとまっているので、for文は非常に見やすいです。

for文はどの順番で動くのか

for文は、次の順番で処理されます。

  1. 初期化処理を行う
  2. 条件式を確認する
  3. 条件が成り立っていれば { } の中を実行する
  4. 増分処理を行う
  5. もう一度条件式を確認する
  6. 条件が成り立たなくなったら終了する

先ほどのプログラムなら、次のように動きます。

回数roundの値条件 round <= 5表示その後
開始前1確認前なしスタート
1回目1成り立つ1回roundが2になる
2回目2成り立つ2回roundが3になる
3回目3成り立つ3回roundが4になる
4回目4成り立つ4回roundが5になる
5回目5成り立つ5回roundが6になる
終了6成り立たないなしループ終了

つまり、roundが6になった時点で条件を満たさなくなるので、for文は終了します。

{ } の中がくり返される

for文では、{ } の中に書いた処理が繰り返されます。

今回のプログラムでは、次の1行がfor文の中身です。

printf("%d回 ", round);

この1行が、roundの値を変えながら何度も実行されます。

ドラゴンボール風にいうと、{ } の中は修行メニューの本体です。
修行回数を数える仕組みはfor文の外側にあり、実際にくり返したい技や動作は { } の中に入れます。

もし { } の中に複数の処理を書けば、それら全部が1セットとして繰り返されます。

roundは回数を数えるための変数

今回のサンプルでは、roundという変数を使っています。

int round;

このroundは、今が何回目の繰り返しかを表すための変数です。
for文では、このように回数を数えるための変数をよく使います。

元の教材では i という短い変数名が使われることが多いですが、今回は round という名前にしているので、修行回数を数えている ことが分かりやすくなっています。

変数名役割
round何回目の修行かを数える
i一般的によく使われるループ用の変数名

for文では、こうした「数えるための変数」がとても大切です。
この変数の値が変わることで、何回繰り返したかを判断できます。

インクリメントは値を1増やす処理

for文の3つ目の部分にあった round++ は、インクリメント と呼ばれます。

round++

インクリメントとは、変数の値を1増やす処理です。

つまり、round++ は、次の意味になります。

round = round + 1;

また、次のように書いても同じ意味です。

round += 1;

ドラゴンボール風にたとえるなら、修行が1回終わるたびに、修行カウンターを1つ進める動作です。

書き方意味
round++roundを1増やす
++roundroundを1増やす
round = round + 1roundにround + 1の値を代入する
round += 1roundに1を足して代入する

for文の増分処理では、このインクリメントがとてもよく使われます。

デクリメントは値を1減らす処理

インクリメントと反対に、値を1減らす処理を デクリメント といいます。

round--

これは、次の意味です。

round = round - 1;

また、次のようにも書けます。

round -= 1;

ドラゴンボール風にたとえると、修行回数を後ろ向きに数えたり、残り回数を1つ減らしていくイメージです。

演算子呼び名意味同じ意味の書き方
i++インクリメント(後置)1増やすi = i + 1、i += 1
++iインクリメント(前置)1増やすi = i + 1、i += 1
i--デクリメント(後置)1減らすi = i - 1、i -= 1
--iデクリメント(前置)1減らすi = i - 1、i -= 1

最初の学習では、for文の中では i++ や i-- は、値を1増やす、または1減らすための書き方 と覚えておけば十分です。

図:インクリメント・デクリメントと代入演算子の関係

この図が示していること

この図では、インクリメントとデクリメントが、実際にはどのような意味を持っているかを表しています。

round++ は round = round + 1 と同じ意味で、値を1増やします。
round-- は round = round - 1 と同じ意味で、値を1減らします。
また、round += 1 や round -= 1 のような代入演算子でも、同じ考え方を簡潔に書けます。

for文では、このような「少しずつ値を変える処理」がとても大切です。

代入演算子は短く分かりやすく書くための記法

C言語では、変数自身を使って計算し、その結果を同じ変数に入れることがよくあります。

たとえば、次のような書き方です。

a = a + 1;

これは、aの今の値に1を足して、その結果をaに代入するという意味です。

でも、同じ変数名が2回出てきて少し長く見えます。
そこで使えるのが 代入演算子 です。

a += 1;

このように書くと、同じ意味をもっと簡潔に表せます。

主な代入演算子は次のとおりです。

演算子使用例意味
+=a += 1a = a + 1
-=a -= 1a = a - 1
*=a *= 2a = a * 2
/=a /= 2a = a / 2
%=a %= 2a = a % 2

ドラゴンボール風にたとえるなら、代入演算子は修行記録を簡略表記するための便利なメモです。
戦闘力に1を足した結果をまた同じメモ欄に書き戻すような処理を、すっきり書けるようにしてくれます。

for文で使う round++ も、結局は「自分の値を1増やして自分に戻す」という考え方です。

for文のいろいろな書き方

for文は、1から5まで増やすだけではありません。
開始する値、終了条件、増え方や減り方を変えることで、さまざまな繰り返しができます。

代表的な例を見てみましょう。

記述方法実行結果説明
for (i = 0; i < 5; i++)0 1 2 3 40から始めて、5になる前まで1ずつ増える
for (i = -2; i <= 2; i++)-2 -1 0 1 2-2から2まで1ずつ増える
for (i = 0; i < 10; i += 2)0 2 4 6 82ずつ増える
for (i = 5; i >= 1; i--)5 4 3 2 15から1まで1ずつ減る
for (i = 2; i >= -2; i--)2 1 0 -1 -22から-2まで1ずつ減る
for (i = 12; i > 0; i -= 3)12 9 6 33ずつ減って0より大きい間続く

この表を見ると、for文はとても柔軟だと分かります。

ドラゴンボール風にたとえるなら、修行回数を前に進めるだけでなく、逆方向に数えたり、2段飛ばしで進めたり、3ずつ気を減らしながら進めたりできるわけです。

0から始めるfor文

たとえば、次のようなfor文です。

for (i = 0; i < 5; i++)

これは、iを0から始めて、iが5より小さい間くり返します。
表示される値は、0 1 2 3 4 です。

ここで大切なのは、i < 5 という条件です。
5以下ではなく5より小さい間なので、5は含まれません。

条件含まれる最後の値
i <= 55を含む
i < 55を含まない

この違いは、for文ではとてもよく出てくるので、慣れておくと安心です。

2ずつ増やすfor文

for文では、1ずつ増やすだけでなく、2ずつ増やすこともできます。

for (i = 0; i < 10; i += 2)

この場合、iは 0 → 2 → 4 → 6 → 8 と変化します。

これは、修行回数を1回ずつではなく、2段階ずつ進めるイメージです。
たとえば、偶数だけを表示したいときなどに便利です。

減らしながら進むfor文

for文は、値を増やすだけでなく、減らしながら進めることもできます。

for (i = 5; i >= 1; i--)

この場合、iは 5 → 4 → 3 → 2 → 1 と減っていきます。

ドラゴンボール風にたとえるなら、残り修行回数を数えながら進めるイメージです。
あと5回、あと4回、あと3回というふうに、終了へ向かって数を減らしていく場面で使えます。

for文では条件式がとても大切

for文で一番大切なのは、いつまで続けるかを決める条件式 です。

たとえば、round <= 5 なら5回まで続きますが、条件を間違えると回数がずれたり、終わらなくなったりすることがあります。

条件式意味
i <= 5iが5以下の間くり返す
i < 5iが5未満の間くり返す
i >= 1iが1以上の間くり返す
i > 0iが0より大きい間くり返す

ドラゴンボール風にたとえるなら、条件式は修行終了のルールです。
このルールが正しく決まっていないと、早く終わりすぎたり、いつまでも終わらなかったりします。

for文は何回くり返すかが見やすい

for文の大きな良さは、何回くらいくり返すのかが見やすいことです。

for (round = 1; round <= 5; round++)

この1行を見るだけで、

  • 1から始める
  • 5まで続ける
  • 1ずつ増やす

という情報が分かります。

これがfor文の使いやすさです。

while文でも繰り返しはできますが、回数のコントロールがはっきり見える という意味では、for文はとても分かりやすい書き方です。

図:いろいろなfor文のパターン

この図が示していること

この図では、for文のいろいろなパターンを比べています。

1ずつ増えるfor文では、1 2 3 4 5 のように順番に進みます。
2ずつ増えるfor文では、0 2 4 6 8 のように飛ばしながら進みます。
1ずつ減るfor文では、5 4 3 2 1 のように後ろ向きに進みます。

for文は、開始値、条件式、増分処理 を変えることで、たくさんの動きを作れることが分かります。

実際に覚えておきたいポイント

for文を使うときは、次のポイントを意識すると分かりやすくなります。

ポイント内容
初期化処理どこから始めるかを決める
条件式いつまで続けるかを決める
増分処理1回ごとにどう変化するかを決める
{ } の中くり返したい処理を書く
インクリメント値を1増やす
デクリメント値を1減らす
代入演算子自分の値を使った計算を短く書く

for文は、C言語の中でも特によく使われる基本技のひとつです。
最初は少し記号が多く見えるかもしれませんが、見ていることは意外とシンプルです。

  • 最初の値を決める
  • 条件が成り立つか確認する
  • 処理する
  • 値を変える
  • もう一度確認する

この流れが分かってくると、for文はかなり読みやすくなります。

ドラゴンボール風にいえば、for文は「何回修行するか」をきれいに管理できる特訓メニューです。
決められた回数だけ同じ技をくり返すことで、プログラムの流れを整え、無駄なく処理を進められるようになります。

この感覚がつかめると、次にwhile文を学ぶときにも、繰り返し処理全体の考え方がぐっと理解しやすくなります。