16 トレース問題2(while・for 文)

ループのトレースは変数の変化を1周ずつ左から右へ追うのが効果的。
表を開いて確認する前に、まず自分で予測してみよう。

✅ ループトレースの手順:
① 初期値を書く → ② 条件を判定 → ③ 処理実行・値更新 → ④ ②に戻る(偽になったら終了)

問1. 次のプログラムの出力として正しいものはどれか。

#include <stdio.h>
int main(void)
{
    int i = 0, sum = 0;
    while (i < 3) {
        sum += i;
        i++;
    }
    printf("%d\n", sum);
    return 0;
}
▶ トレース表を見る
変数初期1周目2周目3周目終了
i(条件判定時)0(真)1(真)2(真)3(偽)
sum00133

sum += i:0+0=0 → 0+1=1 → 1+2=3。i=3 で条件偽 → 終了。

解説を表示

正解:イ(3)

i=0,1,2 の3回ループ。sum = 0+1+2 = 3。i=3 で条件偽→終了。


問2. 次のプログラムの出力として正しいものはどれか。

#include <stdio.h>
int main(void)
{
    int i, result = 1;
    for (i = 1; i <= 3; i++) {
        result *= i;
    }
    printf("%d\n", result);
    return 0;
}
▶ トレース表を見る
変数初期i=1i=2i=3終了
i(条件)1(真)2(真)3(真)4(偽)
result11266

result *= i:1×1=1 → 1×2=2 → 2×3=6(3の階乗)

解説を表示

正解:イ(6)

1×1×2×3 = 6。3の階乗(3!)の計算になっている。


問3. 次のプログラムの出力として正しいものはどれか。

#include <stdio.h>
int main(void)
{
    int i;
    for (i = 5; i > 0; i -= 2) {
        printf("%d ", i);
    }
    return 0;
}
▶ トレース表を見る
変数初期1周目2周目3周目終了
i(条件)5(真)3(真)1(真)-1(偽)
出力531

i -= 2 で2ずつ減少。i=1 は条件 i>0 を満たすので出力される。

解説を表示

正解:ア(5 3 1)

i=1 は i>0 を満たすので出力される。i=-1 で終了。


問4. 次のプログラムの出力として正しいものはどれか。

#include <stdio.h>
int main(void)
{
    int i, cnt = 0;
    for (i = 1; i <= 10; i++) {
        if (i % 3 == 0) {
            cnt++;
        }
    }
    printf("%d\n", cnt);
    return 0;
}
▶ トレース表を見る(3の倍数のみ抜粋)
変数初期i=1i=2i=3i=4i=5i=6i=7i=8i=9i=10
i%3==0
cnt00011122233

1〜10 の中で3の倍数:3, 6, 9 の3つ。

解説を表示

正解:ウ(3)

3の倍数は 3, 6, 9 の3つ。cnt が3回インクリメントされる。