令和5年度 ITパスポート試験 問60

手続 printArray は, 配列 integerArray の要素を並べ替えて出力する。手続 printArray を呼び出したときの出力はどれか。ここで, 配列の要素番号は1から始まる。

〔プログラム〕
図の説明テキスト

〔プログラム〕と題された擬似言語のソースコードブロック。◯printArray()の手続が記述されており、整数型の変数n, mと配列integerArrayの初期化({2, 4, 1, 3})が行われる。その後、ネストされたforループにより隣接する配列要素を比較し、左側の値が大きい場合に入れ替える処理(バブルソート)が実行され、最後に配列の全要素を順にコンマ区切りで出力する内容となっている。

解答・解説

正解: ア. 1, 2, 3, 4

〔プログラム〕の二重の for ループは、隣り合う要素を比較し、左側の要素が大きい場合に右側の要素と入れ替える処理(バブルソート)を行っています。

配列 integerArray の初期状態は {2, 4, 1, 3} であり、要素数は 4 です。これを順番にトレースします。

n = 1 のとき(m は 1 から 3 まで変化)

  • m = 1: integerArray[1] (2) と integerArray[2] (4) を比較します。2 > 4 は偽なのでそのままです。配列は {2, 4, 1, 3} のままです。

  • m = 2: integerArray[2] (4) と integerArray[3] (1) を比較します。4 > 1 は真なので入れ替えます。配列は {2, 1, 4, 3} になります。

  • m = 3: integerArray[3] (4) と integerArray[4] (3) を比較します。4 > 3 は真なので入れ替えます。配列は {2, 1, 3, 4} になります。

n = 2 のとき(m は 1 から 2 まで変化)

  • m = 1: integerArray[1] (2) と integerArray[2] (1) を比較します。2 > 1 は真なので入れ替えます。配列は {1, 2, 3, 4} になります。

  • m = 2: integerArray[2] (2) と integerArray[3] (3) を比較します。2 > 3 は偽なのでそのままです。配列は {1, 2, 3, 4} のままです。

n = 3 のとき(m は 1 から 1 まで変化)

  • m = 1: integerArray[1] (1) と integerArray[2] (2) を比較します。1 > 2 は偽なのでそのままです。配列は {1, 2, 3, 4} のままです。

最終的に配列は昇順の {1, 2, 3, 4} となり、これを先頭から順にコンマ区切りで出力するため、出力結果は「1, 2, 3, 4」となります。

各選択肢の解説

  • ア: 正解です。配列が昇順に並べ替えられた正しい結果です。

  • イ: 誤りです。並べ替えの途中のような状態であり、プログラムの最終的な実行結果ではありません。

  • ウ: 誤りです。初期状態から正しくソートされていない状態です。

  • エ: 誤りです。これは降順(大きい順)に並べ替えた場合の結果です。本プログラムの条件式では昇順(小さい順)に並べ替えられます。

Spineチーム