🇯🇵 日本語 | 🇺🇸 English

第18回 確認問題(繰り返し)

for文・while文・break・二重ループの理解度を確認するクイズです。

確認問題1 ― forの実行回数

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

出力結果は?

sum = 5
sum = 15
sum = 10
sum = 14
解説: ループは i=1,2,3,4,5 の5回実行。
1+2+3+4+5 = 15

確認問題2 ― whileの終了条件

int x = 10;
while (x > 0) {
    x -= 3;
}
printf("x = %d\n", x);

出力結果は?

x = 0
x = 1
x = -2
x = 3
解説: x の変化: 10→7→4→1→-2
x=-2 のとき x > 0 が偽になりループ終了。x -= 3 は3ずつ減らすので、0ぴったりにはなりません。

確認問題3 ― breakの動作

for (int i = 0; i < 10; i++) {
    if (i == 3) break;
    printf("%d ", i);
}

出力結果は?

0 1 2 3
0 1 2
0 1 2 3 4 5 6 7 8 9
3
解説: i==3 のとき break で即ループ脱出。printfより前にbreakするので、3は出力されません。
出力は i=0,1,2 の 0 1 2 のみ。

確認問題4 ― 二重ループの出力回数

int count = 0;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        count++;
    }
}
printf("count = %d\n", count);

出力結果は?

count = 7
count = 12
count = 3
count = 4
解説: 外側ループ3回 × 内側ループ4回 = 12回
二重ループの実行回数は「外 × 内」で計算できます。

確認問題5 ― <と<=の違い

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

出力結果は?

count = 4
count = 5
count = 6
count = 1
解説: i <= 5 は i が 5 のときもループに入るので、i=1,2,3,4,5 の5回実行。
  • for (i=1; i<=5; i++) → 5回(i=1〜5)
  • for (i=1; i<5; i++) → 4回(i=1〜4)
<<= の違いで1回分のズレが生じます(オフバイワンエラーの原因)。

確認問題6 ― continueの動作

for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    printf("%d ", i);
}

出力結果は?

0 1
0 1 2 3 4
0 1 3 4
2
解説: continue現在の反復だけをスキップし、次の反復に進みます。
  • break: ループ全体を終了する
  • continue: 残りの処理をスキップして次へ
i=2 のとき printf をスキップするので、出力は 0 1 3 4

確認問題7 ― do-whileの最低1回実行

int i = 10;
do {
    printf("%d ", i);
    i++;
} while (i < 5);

出力結果は?

(何も出力されない)
10
10 11 12 13 14
無限ループ
解説: do-while条件判定がループの最後にあります。
  • 最初に必ず1回は本体が実行される
  • 1回目で i=10 が出力され、i=11 になる
  • 11 < 5 は偽なのでループ終了
while 文なら条件が最初から偽で一度も実行されませんが、do-while は必ず1回は実行されます。

確認問題8 ― 無限ループの条件

// 以下のうち、無限ループになるのはどれ?
// A) for (int i = 0; i < 10; i++) { ... }
// B) while (1) { ... }  // break なし
// C) for (int i = 0; i < 10; ) { i++; }
// D) int i = 0; while (i < 10) { i++; }

無限ループになるのは?

A
B
C
D
解説: while (1) は条件が常に真なので、break しない限り終了しません
  • A: i が 10 に達すると終了(10回)
  • B: 条件が常に真 → 無限ループ
  • C: 本体で i++ しているので 10 に達して終了
  • D: i++ で i が増えていくので終了
無限ループはイベントループなどで意図的に使いますが、必ず脱出条件(break)を用意しましょう。

確認問題9 ― ネストループ内のbreak

int count = 0;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (j == 2) break;
        count++;
    }
}
printf("count = %d\n", count);

出力結果は?

count = 9
count = 6
count = 3
count = 0
解説: break内側の最も近いループのみを抜けます。外側ループは継続します。
  • 内側ループは j=0,1 で count++ を実行、j=2 で break
  • つまり内側は1回の実行で2回 count++
  • 外側ループ3回 × 内側2回 = 6
外側ループも抜けたい場合はフラグ変数や goto を使うか、関数化して return します。

確認問題10 ― i-- で下がってくる

for の更新部に i-- を使うと、値を減らしていくループが書けます。
for (int i = 5; i >= 0; i--) {
    printf("%d ", i);
}

出力結果は?

0 1 2 3 4 5
5 4 3 2 1 0
5 4 3 2 1
無限ループ
解説: for の3パートを分解すると:
  • 初期化: i = 5(5 からスタート)
  • 条件: i >= 0(0 以上なら続ける)
  • 更新: i--(毎回 1 減らす)
i が 5, 4, 3, 2, 1, 0 と順に表示され、i=-1 になった瞬間に条件が偽になり終了 → 5 4 3 2 1 0
活用例: 配列を末尾から先頭へ処理、カウントダウン表示、逆順にデータを並べ替える、など。

確認問題11 ― for(;;) で無限ループ

for の3つの部分はすべて省略できます。すると何が起こる?
int count = 0;
for (;;) {
    count++;
    if (count == 3) break;
}
printf("count = %d\n", count);

出力結果は?

count = 0(ループに入らない)
コンパイルエラー
count = 3
無限ループで止まらない
解説: for (;;) は 3 パート全部省略した記法:
  • 初期化なし
  • 条件なし → 常に真として扱われる
  • 更新なし
つまり 無限ループを書くための定番イディオム(while (1) と等価)。
この例は本体の if (count == 3) break; で脱出するので、count が 3 になった瞬間にループを抜けて "count = 3" を表示。
活用場面: メニュー待機、イベント待ち、入力をずっと受け取り続ける処理など、終了条件をループ本体内で柔軟に判定したいときに便利。

確認問題12 ― i += 2 で2つ飛ばし

for の更新部を i++ 以外にすると、刻み幅を変えられます。
for (int i = 0; i <= 10; i += 2) {
    printf("%d ", i);
}

出力結果は?

0 1 2 3 4 5 6 7 8 9 10
1 3 5 7 9
0 2 4 6 8 10
2 4 6 8 10
解説: for の3パート:
  • 初期化: i = 0
  • 条件: i <= 10(10 以下まで、=10 を含む)
  • 更新: i += 2(毎回 2 増やす)
i は 0, 2, 4, 6, 8, 10 と進み、次の 12 で条件が偽になり終了 → 0 2 4 6 8 10
ポイント: <= 10 なので 10 は含まれる。これを < 10 にすると 10 は出ず「0 2 4 6 8」になる。
活用例: 偶数だけ処理する、3 つ飛ばしで画素をサンプリング、負の方向なら i -= 3 のように書く、など。

結果

回答してください
繰り返しの講座に戻る ホームへ
← 前の講座
第17回 while文・do-while文
次の講座 →
第19回 デバッグの技法

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ