科目B の練習問題と考え方
本文の表記カードに合わせた新しい練習です。配列の要素番号は問題文の指定に従います。各行の実行後に値を更新し、条件を再判定してください。
練習1 条件に合う値を加える
s ← 0
for (iを1から4まで1ずつ増やす)
if (A[i] mod 2 = 0)
s ← s + A[i]
endif
endfor
output(s)
A={3, 8, 2, 5}、要素番号は1から始まります。出力を求めます。
たどり方
| i | A[i] | 偶数か | s(処理後) |
|---|---|---|---|
| 初期値 | — | — | 0 |
| 1 | 3 | 偽 | 0 |
| 2 | 8 | 真 | 8 |
| 3 | 2 | 真 | 10 |
| 4 | 5 | 偽 | 10 |
答え:10。偶数の要素だけを加えます。3と5のときはsを変えません。
練習2 条件を満たす位置を探す
i ← 1
while (i ≦ 5 and A[i] < 10)
i ← i + 1
endwhile
output(i)
A={4, 7, 12, 9, 15}、要素番号は1から始まります。出力を求めます。
たどり方
| 判定時のi | A[i] < 10 | 判定後 |
|---|---|---|
| 1 | 真 | iを2にする |
| 2 | 真 | iを3にする |
| 3 | 偽 | 反復を終える |
答え:3。最初に10以上になる値はA[3]=12です。条件が偽になった後、iは増えません。
練習3 最大値を更新する
m ← A[1]
for (iを2から4まで1ずつ増やす)
if (A[i] > m)
m ← A[i]
endif
endfor
output(m)
A={6, 2, 11, 8}、要素番号は1から始まります。出力を求めます。
たどり方
| i | 比較 | m(処理後) |
|---|---|---|
| 初期値 | m ← A[1] | 6 |
| 2 | 2 > 6 は偽 | 6 |
| 3 | 11 > 6 は真 | 11 |
| 4 | 8 > 11 は偽 | 11 |
答え:11。mには、そこまでに見た最大値を保ちます。
練習4 関数の戻り値を追う
○countLarge
整数型の配列: A
整数型: n
整数型: c
整数型: i
c ← 0
i ← 1
while (i ≦ n)
if (A[i] ≧ 10)
c ← c + 1
endif
i ← i + 1
endwhile
return c
countLarge({5, 10, 14, 3}, 4)を呼び出します。配列の要素番号は1から始まります。戻り値を求めます。
たどり方
| i | A[i] ≧ 10 | c(判定後) | i(更新後) |
|---|---|---|---|
| 初期値 | — | 0 | 1 |
| 1 | 偽 | 0 | 2 |
| 2 | 真 | 1 | 3 |
| 3 | 真 | 2 | 4 |
| 4 | 偽 | 2 | 5 |
答え:2。10以上の要素は10と14の二つです。最後にreturn cが2を返します。
練習5 反復の終了値を確かめる
x ← 3
while (x < 20)
x ← x + 6
endwhile
output(x)
出力と、反復の回数を求めます。
たどり方
| 判定前のx | x < 20 | 本体の後のx |
|---|---|---|
| 3 | 真 | 9 |
| 9 | 真 | 15 |
| 15 | 真 | 21 |
| 21 | 偽 | 本体を実行しない |
答え:出力は21、反復は3回。最後の加算で20を超えた値も、次の判定が偽になるまで変数に残ります。
練習6 配列を逆順に読む
s ← 0
for (iを4から1まで1ずつ減らす)
s ← s + A[i]
endfor
output(s)
A={2, 4, 7, 9}、要素番号は1から始まります。iの順と出力を求めます。
たどり方
| i | 加える値 | s(処理後) |
|---|---|---|
| 初期値 | — | 0 |
| 4 | 9 | 9 |
| 3 | 7 | 16 |
| 2 | 4 | 20 |
| 1 | 2 | 22 |
答え:iは4、3、2、1の順、出力は22。読む順番が逆でも、加算する要素は四つすべてです。