配列を使ったプログラムのトレース。添字が何を指しているかを意識して追おう。
問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=0 | i=1 | i=2 | 終了 |
|---|---|---|---|---|---|
| a[i] | — | a[0]=2 | a[1]=4 | a[2]=6 | — |
| sum | 0 | 2 | 6 | 12 | 12 |
正解:イ(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] | 5 | 5 | — |
| a[1] | 10 | 20 | 20 |
| a[2] | 15 | 15 | — |
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=1 | i=2 | i=3 |
|---|---|---|---|---|
| x[0] | 1 | 1 | 1 | 1 |
| x[1] | 2 | 2+1=3 | 3 | 3 |
| x[2] | 3 | 3 | 3+3=6 | 6 |
| x[3] | 4 | 4 | 4 | 4+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=1 | i=2 | i=3 | i=4 |
|---|---|---|---|---|---|
| a[i] | — | 1 | 4 | 1 | 5 |
| a[i]>max? | — | 偽 | 真 | 偽 | 真 |
| max | 3 | 3 | 4 | 4 | 5 |
正解:エ(5)
最大値を求めるアルゴリズム。配列 {3,1,4,1,5} の最大値は 5。