科目B
基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問2
次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。
次のプログラムは,整数型の配列arrayの要素の並びを逆順にする。
〔プログラム〕
整数型の配列: array ← {1, 2, 3, 4, 5}
整数型: right, left
整数型: tmp
for (left を 1 から (arrayの要素数 ÷ 2 の商) まで 1 ずつ増やす)
right ← a
tmp ← array[right]
array[right] ← array[left]
b ← tmp
endfor
答えを選ぶ
出典:基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問2(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ウ
覚える知識
配列の逆順(先頭と末尾の要素交換)
要素数 n の配列を逆順にするには、left を 1 から n÷2 の商まで動かし、left 番と n−left+1 番の要素を一時変数を使って入れ替える。
この問題で必要なこと
要素数 5、要素番号は 1 から始まるので、left=1 のとき対になるのは 5 番、left=2 のときは 4 番。したがって right ← 要素数 − left + 1。交換は tmp ← array[right]、array[right] ← array[left] のあと、退避しておいた値を array[left] に戻す。正解はウで、トレースすると {5,4,3,2,1} になる。
ひっかけ
ア・イの「要素数 − left」は要素番号が 0 から始まる場合の式で、left=1 のとき 4 番を指してしまう(±1 のずれ)。イ・エの b に array[right] を選ぶと、tmp を元の場所に戻すだけになり交換が成立しない。