令和8年度試験問題 科目B 問1

 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

 次のプログラムは,整数型の配列 data の末尾の要素の値を先頭の要素に移動する。この際,末尾以外の各要素の値は,一つずつ後ろの要素に移動する。

〔プログラム〕
b01_1.png

  • 2からlen-1まで1ずつ増やす
  • 2からlenまで1ずつ増やす
  • len-1から2まで1ずつ減らす
  • lenから2まで1ずつ減らす
正解 問題へ
分野:アルゴリズムとプログラミング
細目:データ構造及びアルゴリズム
解説
設問中のデータ {1, 2, 3, 4, 5, 6, 7, 8, 9} を例にして考えます。この処理では、末尾の要素を先頭の要素に移動し、それ以外の要素を一つずつ後ろにずらすとありますから、処理後のあるべきデータは以下になります。

 {9, 1, 2, 3, 4, 5, 6, 7, 8}

まず処理の開始時(top ← data[len])には、変数 top にデータの末尾の要素、すなわち 9 を退避させています。

ここから、繰返し処理により要素を一つずつ後ろに移動していくわけですが、ここで注意すべき点は、移動を先頭から順に行うと、後ろの要素が前の要素で上書きされてしまい、移動がうまくいかないということです。このため、要素の移動は後ろの要素から順に行う必要があります。
b01_2.png
実際の置き換え処理を見てみると、data[i] に data[i-1] の値を代入することになっており、ループ変数 i は移動先の要素番号を示していることがわかります。このため、設問の配列で言えば、i は末尾の要素番号である 9 から始まり、先頭の一つ前の要素番号である 2 までを対象とする必要があります。

これをループ変数として表現すると、iを len から2まで1ずつ減らすとなります。したがって「エ」が正解です。

最後に先頭要素の1を top に退避させておいた9で置き換えれば、並び替えは完了します。
  • 先頭の要素から順に移動を行っているため誤りです。実行結果は以下となります。
    {9, 1, 1, 1, 1, 1, 1, 1, 9}
  • 先頭の要素から順に移動を行っているため誤りです。実行結果は以下となります。
    {9, 1, 1, 1, 1, 1, 1, 1, 1}
  • 初期値が1つずれているため誤りです。実行結果は以下のように、9が2つとなり、8が消えるものとなります。
    {9, 1, 2, 3, 4, 5, 6, 7, 9}
  • 正しい。

Pagetop