C言語入門|制御構造の応用:ネスト・break・continueを使いこなす

if 文や while 文、for 文を使って、
「条件で分ける」「同じ処理を繰り返す」
という基本は、もうだいぶ身についてきましたね 😊

でも、実際のプログラムでは
「繰り返しの中で条件分岐したい」
「途中でループをやめたい」
「特定の回だけスキップしたい」
といった、もう一段階踏み込んだ制御 が必要になります。

この記事では、
制御構造を組み合わせて使うテクニック を学んでいきましょう。

制御構造は入れ子にできる(ネスト)

これまで学んだ制御構造は、
その中に別の制御構造を書くことができます

このような構造を、
入れ子構造、または ネスト と呼びます。

分岐の中に分岐を書く例

プロジェクト名:5-9-1 ソースファイル名: sample5-9-1.c

#include <stdio.h>

int main(void)
{
    int score = 85;
    int attendance = 95;

    if (score >= 80) {
        if (attendance >= 90) {
            printf("成績優秀です\n");
        }
    }
    return 0;
}

このプログラムでは、

  • 点数が80以上か
  • さらに出席率が90以上か

という 2段階の条件チェック を行っています。

外側の条件が満たされなければ、
内側の if 文は実行されません。

繰り返しの中で条件を使う

ネストは、繰り返し構文の中でもよく使われます。

プロジェクト名:5-9-2 ソースファイル名: sample5-9-2.c

#include <stdio.h>

int main(void)
{
    int i = 1;

    do {
        if (i % 2 == 0) {
            printf("%dは偶数です\n", i);
        }
        i++;
    } while (i <= 5);

    return 0;
}

この例では、

  • do-while で繰り返し
  • if 文で偶数かどうかを判定

という形で、
繰り返し+分岐 を組み合わせています。

for 文をネストさせる例(表を作る)

ネストの代表例として、
2重ループを使った表の出力を見てみましょう。

簡単な掛け算表 を出力するプログラムです。

プロジェクト名:5-9-3 ソースファイル名: sample5-9-3.c

#include <stdio.h>

int main(void)
{
    for (int row = 1; row <= 3; row++) {
        for (int col = 1; col <= 4; col++) {
            printf("%02d ", row * col);
        }
        printf("\n");
    }
    return 0;
}

実行結果

01 02 03 04
02 04 06 08
03 06 09 12

この処理の流れは次のようになります。

  • 外側のループが1回進むごとに1行分を担当
  • 内側のループが横方向の値を順番に表示
  • 内側が終わったら改行
  • それを外側のループが終わるまで繰り返す

ネストを理解すると、
表・マップ・二次元データ の処理が一気に楽になります 😊

繰り返しを途中でやめる break 文

ときには、
「もう続ける意味がないから、ここで終わりたい」
という場面もあります。

そんなときに使うのが break 文です。

プロジェクト名:5-9-4 ソースファイル名: sample5-9-4.c

#include <stdio.h>

int main(void)
{
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            break;
        }
        printf("%d回目の処理\n", i);
    }
    printf("ループ終了\n");
    return 0;
}

実行結果

1回目の処理
2回目の処理
ループ終了

break 文は、

  • 繰り返しそのものを中断
  • ループの次の処理へ移動

という働きをします。

特定の回だけスキップする continue 文

「今回は条件に合わないから、処理を飛ばしたい」
そんなときは continue 文を使います。

プロジェクト名:5-9-5 ソースファイル名: sample5-9-5.c

#include <stdio.h>

int main(void)
{
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            continue;
        }
        printf("%d回目の処理\n", i);
    }
    return 0;
}

実行結果

1回目の処理
2回目の処理
4回目の処理
5回目の処理

continue 文は、

  • 今回の周回だけを中断
  • 次の繰り返しへ進む

という動きをします。

break と continue の違いを整理しよう

命令動作
breakループ自体を終了する。
continue今回の処理を飛ばして次の周回へ進む。

使い分けを間違えると、
意図しない動きになりやすいので注意しましょう。

まとめ 😊

  • 制御構造は自由に組み合わせて使える。
  • ネストで複雑な処理を表現できる。
  • break はループ終了
  • continue はその回だけスキップ

これらを使いこなせるようになると、
プログラムの流れを自在にコントロールできる ようになります ✨