
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 はその回だけスキップ
これらを使いこなせるようになると、
プログラムの流れを自在にコントロールできる ようになります ✨
