21 トレース問題4(配列)

配列を使ったプログラムのトレース。添字が何を指しているかを意識して追おう。

✅ 配列のトレースのコツ:各要素の値を横に並べた表を作り、操作のたびに更新する。
例)a[0]=2, a[1]=4, a[2]=6 → ループで a[i] の変化を追う。

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

#include <stdio.h>
int main(void)
{
    int a[3] = {2, 4, 6};
    int i, sum = 0;
    for (i = 0; i < 3; i++) {
        sum += a[i];
    }
    printf("%d\n", sum);
    return 0;
}
▶ トレース表を見る
変数初期i=0i=1i=2終了
a[i]a[0]=2a[1]=4a[2]=6
sum0261212
解説を表示

正解:イ(12)

2 + 4 + 6 = 12。


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

#include <stdio.h>
int main(void)
{
    int a[3] = {5, 10, 15};
    a[1] = a[0] + a[2];
    printf("%d\n", a[1]);
    return 0;
}
▶ トレース表を見る
変数初期a[1] = a[0] + a[2]出力
a[0]55
a[1]102020
a[2]1515

a[1] = 5 + 15 = 20

解説を表示

正解:ウ(20)

a[0]=5、a[2]=15 → a[1] = 5+15 = 20。


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

#include <stdio.h>
int main(void)
{
    int x[4] = {1, 2, 3, 4};
    int i;
    for (i = 1; i < 4; i++) {
        x[i] += x[i - 1];
    }
    printf("%d\n", x[3]);
    return 0;
}
▶ トレース表を見る
変数初期i=1i=2i=3
x[0]1111
x[1]22+1=333
x[2]333+3=66
x[3]4444+6=10

x[i] に x[i-1] を加算していく。各要素が累積和になる。

解説を表示

正解:エ(10)

各要素が前の要素を加算して累積和になる。x[3] = 4+6 = 10。


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

#include <stdio.h>
int main(void)
{
    int a[5] = {3, 1, 4, 1, 5};
    int i, max = a[0];
    for (i = 1; i < 5; i++) {
        if (a[i] > max) {
            max = a[i];
        }
    }
    printf("%d\n", max);
    return 0;
}
▶ トレース表を見る
変数初期i=1i=2i=3i=4
a[i]1415
a[i]>max?
max33445
解説を表示

正解:エ(5)

最大値を求めるアルゴリズム。配列 {3,1,4,1,5} の最大値は 5。