次の記述中の 【 】に入れる正しい答えを,解答群の中から選べ。ここで, 配列の要素番号は 1 から始まる。
関数 makeNewArray は,要素数 2 以上の整数型の配列を引数にとり,整数型の配列
を返す関数である。関数 makeNewArray を makeNewArray({3, 2, 1, 6, 5, 4})として
呼び出したとき,戻り値の配列の要素番号 5 の値は 【   】となる。
〔プログラム〕
○整数型の配列: makeNewArray(整数型の配列: in)
整数型の配列: out ← {} // 要素数0の配列
整数型: i, tail
outの末尾 に in[1]の値 を追加する
for (i を 2 から inの要素数 まで 1 ずつ増やす)
tail ← out[outの要素数]
outの末尾 に (tail + in[i]) の結果を追加する
endfor
return out
解答群
ア 5      イ 6      ウ 9      エ 11      オ 12
カ 17    キ 21
問題解説
この問題では、プログラムの動作をシミュレーションして、makeNewArray({3, 2, 1, 6, 5, 4})を実行したときに戻り値の配列 out の要素番号 5 の値を求めます。
プログラムの動作
- 初期状態
outは空の配列として初期化される:out ← {}。inは{3, 2, 1, 6, 5, 4}。
 - 最初の処理
outの末尾にin[1]の値(3)を追加:out ← {3}。
 - ループ処理
ループはi = 2からi = 6まで実行されます。- i = 2
tail ← out[outの要素数]→tail = 3(outの末尾)。outの末尾にtail + in[2]を追加:out ← {3, 3 + 2} = {3, 5}。
 - i = 3
tail ← out[outの要素数]→tail = 5。outの末尾にtail + in[3]を追加:out ← {3, 5, 5 + 1} = {3, 5, 6}。
 - i = 4
tail ← out[outの要素数]→tail = 6。outの末尾にtail + in[4]を追加:out ← {3, 5, 6, 6 + 6} = {3, 5, 6, 12}。
 - i = 5
tail ← out[outの要素数]→tail = 12。outの末尾にtail + in[5]を追加:out ← {3, 5, 6, 12, 12 + 5} = {3, 5, 6, 12, 17}。
 - i = 6
tail ← out[outの要素数]→tail = 17。outの末尾にtail + in[6]を追加:out ← {3, 5, 6, 12, 17, 17 + 4} = {3, 5, 6, 12, 17, 21}。
 
 - i = 2
 
戻り値の配列
最終的な配列 out は {3, 5, 6, 12, 17, 21}。
答え
戻り値の配列の要素番号 5 の値は 17 です。
正解: カ 17