共通テスト 情報Ⅰ・6-4

応用-4 プログラミング(関数と探索・整列)の一問一答

共通テスト「情報Ⅰ」の「共通テスト形式の応用」から、応用-4 プログラミング(関数と探索・整列)に関する4択問題を10問。「答えと解説を見る」を開くと、正解とその理由がその場で読めます。会員登録は不要です。

この分野の演習

全10問/解説付き・基本無料

アプリ形式で解く(全800問) 共通テスト形式の応用の要点解説を読む
問題

上から順に解いてみてください。答えは各問の下で確認できます。

問16-4・応用

Aさんは、配列Dataの先頭から順に atai と同じ値を探し、比べた回数 kaisu を表示するプログラムを作った(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [15, 8, 23, 4, 42, 16]
( 2 ) i = 0 , kaisu = 0 , mitsuketa = 0
( 3 ) i < 要素数(Data) and mitsuketa == 0 の間繰り返す:
( 4 ) | kaisu = kaisu + 1
( 5 ) | もし Data[i] == atai ならば:
( 6 ) | ⎿ mitsuketa = 1
( 7 ) ⎿ i = i + 1
( 8 ) 表示する(kaisu)
atai が 4 のときと、atai が 10 のときに表示される値の組合せとして正しいものはどれか。

  • ①3 と 6
  • ②4 と 5
  • ③4 と 6
  • ④3 と 5
答えと解説を見る
正解 ③4 と 6
解説
正解は「4 と 6」。

手順
①atai=4:15、8、23、4 と比べ、4回目で見つかります。mitsuketa=1 になり、繰り返しが終わるので kaisu=4。
②atai=10:どの値とも一致しないので、6個すべてと比べます。i が6になり、i<6 が成り立たなくなって終わるので kaisu=6。
③このように、先頭から順に調べる線形探索では、見つからないときに要素数と同じ回数だけ比べます。

ひっかけ注意

・「3 と 6」…3は値4の添字です。添字は0から数えるので、比べた回数は添字より1多くなります。
・「4 と 5」…5は最後の要素の添字です。見つからない場合も、最後の要素まで6回比べます。
・「3 と 5」…3は値4の添字、5は最後の要素の添字です。比べた回数は、どちらも添字より1多い4回と6回です。
問26-4・応用

Aさんは、昇順(小さい順)に並んだ配列Dataから、二分探索で atai を探すプログラムを作り、調べた中央の値を表示するようにした(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [3, 8, 11, 15, 20, 26, 31, 37, 42, 50, 55]
( 2 ) atai = 12
( 3 ) sita = 0 , ue = 要素数(Data) - 1 , mitsuketa = 0
( 4 ) mitsuketa == 0 and sita <= ue の間繰り返す:
( 5 ) | naka = (sita + ue) ÷ 2
( 6 ) | 表示する(Data[naka])
( 7 ) | もし Data[naka] == atai ならば:
( 8 ) | | mitsuketa = 1
( 9 ) | そうでなくもし Data[naka] < atai ならば:
(10) | | sita = naka + 1
(11) | そうでなければ:
(12) ⎿ ⎿ ue = naka - 1
( 6 )行目で表示される値を、表示された順に並べたものはどれか。

  • ①26, 11, 20, 15
  • ②26, 42, 50, 55
  • ③3, 8, 11, 15
  • ④26, 11, 15
答えと解説を見る
正解 ④26, 11, 15
解説
正解は「26, 11, 15」。3回調べたところで範囲がなくなり、12は見つからずに終わります。

手順
①sita=0、ue=10 なので naka=10÷2=5、Data[5]=26 を表示。26>12 なので ue=4。
②naka=(0+4)÷2=2、Data[2]=11 を表示。11<12 なので sita=3。
③naka=(3+4)÷2=3(商なので小数点以下は切り捨て)、Data[3]=15 を表示。15>12 なので ue=2。sita=3>ue=2 となり、繰り返しが終わります。

ひっかけ注意

・「26, 11, 20, 15」…中央の添字を切り上げて計算した場合です。÷ は商なので切り捨てです。
・「26, 42, 50, 55」…中央の値が大きいときに sita を動かすなど、範囲の縮め方を逆にした場合です。
・「3, 8, 11, 15」…先頭から順に調べる線形探索の順番です。二分探索は中央から調べます。
問36-4・応用

Aさんは、二分探索のプログラムを、降順(大きい順)に並んだ配列Dataでも正しく動くように書き換えている(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [68, 56, 41, 33, 24, 19, 12, 5]
( 2 ) atai = 【外部からの入力】
( 3 ) sita = 0 , ue = 要素数(Data) - 1 , mitsuketa = 0
( 4 ) mitsuketa == 0 and sita <= ue の間繰り返す:
( 5 ) | naka = (sita + ue) ÷ 2
( 6 ) | もし Data[naka] == atai ならば:
( 7 ) | | mitsuketa = 1
( 8 ) | そうでなくもし Data[naka] < atai ならば:
( 9 ) | | 【ア】
(10) | そうでなければ:
(11) ⎿ ⎿ sita = naka + 1
【ア】に入るものとして最も適切なものはどれか。

  • ①ue = naka - 1
  • ②sita = naka + 1
  • ③ue = naka + 1
  • ④sita = naka - 1
答えと解説を見る
正解 ①ue = naka - 1
解説
正解は「ue = naka - 1」。降順では、中央の値より大きい値は左側(添字が小さい側)にあります。

なぜ
Data[naka] < atai のとき、探す値は中央より大きいので、降順の配列では中央より左にあります。そこで探す範囲の右端 ue を naka-1 に縮めます。中央そのものは調べ終わっているので、naka ではなく naka-1 にします。例えば atai=56 なら、naka=3(33)→ ue=2 → naka=1(56)で見つかります。

ひっかけ注意

・「sita = naka + 1」…昇順の場合の書き方です。降順では大きい値がある左側を捨ててしまい、例えば atai=56 は 33→19→12→5 と調べて見つかりません。
・「ue = naka + 1」…調べ終わった中央が範囲に残るので範囲が縮まらなくなり、atai=68 では56を調べ続けて繰り返しが終わりません。
・「sita = naka - 1」…大きい値のない右側へ範囲を移してしまい、atai=68 では19を調べ続けて繰り返しが終わりません。
問46-4・応用

Aさんは、関数 saisho を使って、夏のある4日間の最高気温(配列Kion、単位は℃)の中で最も低い値を求めようとした。関数 saisho(a, b) は、a と b のうち小さいほうの値を返す(等しいときはその値を返す)(共通テスト用プログラム表記。添字は0から始まる)。
( 1 ) Kion = [31, 28, 34, 29]
( 2 ) m = 0
( 3 ) i を 0 から 要素数(Kion) - 1 まで 1 ずつ増やしながら繰り返す:
( 4 ) ⎿ m = saisho(m, Kion[i])
( 5 ) 表示する(m)
このプログラムを実行したときに表示される値と、最も低い値を正しく求めるための( 2 )の直し方の組合せとして最も適切なものはどれか。

  • ①0 と表示され、m = -100 に直す
  • ②0 と表示され、m = Kion[0] に直す
  • ③28 と表示され、( 2 )は直す必要がない
  • ④34 と表示され、m = Kion[0] に直す
答えと解説を見る
正解 ②0 と表示され、m = Kion[0] に直す
解説
正解は「0 と表示され、m = Kion[0] に直す」。m の初期値0が、どの気温よりも小さいためです。

手順
①m=0 から始めます。saisho(0, 31) は0を返すので m=0 のままです。
②28、34、29 のどれと比べても0のほうが小さく、m は0のまま表示されます。
③( 2 )を m = Kion[0] にすると、m は 31 → 28 → 28 → 28 と変わり、正しく28が表示されます。配列の値から始めれば、データがどんな範囲の数でも正しく求められます。

ひっかけ注意

・「0 と表示され、m = -100 に直す」…-100 はどの気温よりも小さいので、m は -100 のまま変わりません。初期値0と同じ失敗です。
・「28 と表示され、( 2 )は直す必要がない」…28 は求めたかった値ですが、初期値0が最も小さいまま残るので、28 は表示されません。
・「34 と表示され、m = Kion[0] に直す」…34 は4日間の最も高い値です。saisho は小さいほうを返すので、34 が m に残ることはありません。
問56-4・応用

Aさんは、0以上の整数の得点 x を、一の位で四捨五入するプログラムを作りたい(例:73→70、75→80)。関数 整数(値) は、値の小数点以下を切り捨てた整数を返すものとする。また、/ は小数も含めた割り算を表す(共通テスト用プログラム表記)。
( 1 ) x = 【外部からの入力】
( 2 ) kekka = 【ア】
( 3 ) 表示する(kekka)
【ア】に入る式として最も適切なものはどれか。

  • ①整数((x + 4) / 10) * 10
  • ②整数((x + 9) / 10) * 10
  • ③整数((x + 5) / 10) * 10
  • ④整数((x + 10) / 10) * 10
答えと解説を見る
正解 ③整数((x + 5) / 10) * 10
解説
正解は「整数((x + 5) / 10) * 10」。5を足してから切り捨てると、四捨五入になります。

手順
①x=73:73+5=78、78/10=7.8、切り捨てて7、×10で70。
②x=75:75+5=80、80/10=8、切り捨てて8、×10で80。
③一の位が5以上なら、5を足すと十の位が1上がるので、切り捨てても繰り上がりが残ります。

ひっかけ注意

・「整数((x + 4) / 10) * 10」…一の位が6以上のときだけ繰り上がる五捨六入になり、75が70になってしまいます。
・「整数((x + 9) / 10) * 10」…切り上げです。73が80になってしまいます。
・「整数((x + 10) / 10) * 10」…常に10を加えることになり、70のような一の位が0の数まで80になります。
問66-4・応用

Aさんは、選択ソートで配列Dataを昇順(小さい順)に並べ替えるプログラムを作った(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [5, 2, 9, 1, 7]
( 2 ) i を 0 から 3 まで 1 ずつ増やしながら繰り返す:
( 3 ) | mi = i
( 4 ) | j を i + 1 から 4 まで 1 ずつ増やしながら繰り返す:
( 5 ) | | もし Data[j] < Data[mi] ならば:
( 6 ) | ⎿ ⎿ mi = j
( 7 ) | tmp = Data[i]
( 8 ) | Data[i] = Data[mi]
( 9 ) ⎿ Data[mi] = tmp
i が 2 のときの処理(( 3 )〜( 9 ))が終わった直後の Data はどれか。

  • ①[1, 2, 9, 5, 7]
  • ②[1, 2, 5, 7, 9]
  • ③[9, 7, 5, 1, 2]
  • ④[1, 2, 5, 9, 7]
答えと解説を見る
正解 ④[1, 2, 5, 9, 7]
解説
正解は「[1, 2, 5, 9, 7]」。

手順
①i=0:残り全体の最小値1(添字3)と Data[0] の5を交換し、[1, 2, 9, 5, 7]。
②i=1:Data[1] 以降の最小値は2で、自分自身なので変わらず、[1, 2, 9, 5, 7]。
③i=2:Data[2] 以降(9、5、7)の最小値5(添字3)と9を交換し、[1, 2, 5, 9, 7]。

ひっかけ注意

・「[1, 2, 9, 5, 7]」…i=1 が終わった直後(i=2 の前)の状態です。
・「[1, 2, 5, 7, 9]」…i=3 まで終わった、最終的な結果です。
・「[9, 7, 5, 1, 2]」…( 5 )の比較を > と読み、大きい値を前に集めた場合の i=2 直後の状態です。
問76-4・応用

Aさんは、バブルソート(隣どうしを比べて、順序が逆なら交換する整列)のプログラムで、比較の回数を数えた(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [6, 3, 5, 1, 4, 2]
( 2 ) kaisu = 0
( 3 ) i を 0 から 4 まで 1 ずつ増やしながら繰り返す:
( 4 ) | j を 0 から 4 - i まで 1 ずつ増やしながら繰り返す:
( 5 ) | | kaisu = kaisu + 1
( 6 ) | | もし Data[j] > Data[j + 1] ならば:
( 7 ) | | | tmp = Data[j]
( 8 ) | | | Data[j] = Data[j + 1]
( 9 ) ⎿ ⎿ ⎿ Data[j + 1] = tmp
(10) 表示する(kaisu)
このプログラムを実行したときに表示される値はどれか。

  • ①15
  • ②25
  • ③30
  • ④36
答えと解説を見る
正解 ①15
解説
正解は「15」。

手順
①i=0 のとき j は0〜4 で5回、i=1 で0〜3 の4回、と1回ずつ減ります。
②i=0〜4 の合計は 5+4+3+2+1=15回です。
③比較の回数はデータの並び方に関係なく決まり、要素数 n なら n×(n-1)÷2 回(6×5÷2=15)です。

ひっかけ注意

・「25」…内側の繰り返しが毎回 j=0〜4 の5回だと考えた場合(5×5)です。4-i で回数が減ります。
・「30」…6×5 を2で割り忘れた値です。内側の繰り返しは5, 4, 3, 2, 1回と減るので、合計はその半分の15回です。
・「36」…要素数6を2回掛けた値(6×6)です。外側は i=0〜4 の5回だけで、内側も毎回6回は回りません。
問86-4・応用

Aさんは、配列Dataを昇順(小さい順)に並べるバブルソートの、最初の1巡目だけを実行するプログラムを作った(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [4, 6, 1, 5, 2]
( 2 ) j を 0 から 3 まで 1 ずつ増やしながら繰り返す:
( 3 ) | もし Data[j] > Data[j + 1] ならば:
( 4 ) | | tmp = Data[j]
( 5 ) | | Data[j] = Data[j + 1]
( 6 ) ⎿ ⎿ Data[j + 1] = tmp
( 7 ) 表示する(Data)
このプログラムを実行したときに表示される内容はどれか。

  • ①[1, 6, 4, 5, 2]
  • ②[4, 1, 5, 2, 6]
  • ③[6, 4, 5, 2, 1]
  • ④[1, 2, 4, 5, 6]
答えと解説を見る
正解 ②[4, 1, 5, 2, 6]
解説
正解は「[4, 1, 5, 2, 6]」。1巡目で、最大の6がいちばん後ろまで運ばれます。

手順
①j=0:4と6は順序どおりで交換なし。j=1:6>1 なので交換し [4, 1, 6, 5, 2]。
②j=2:6>5 なので交換し [4, 1, 5, 6, 2]。
③j=3:6>2 なので交換し [4, 1, 5, 2, 6]。

ひっかけ注意

・「[1, 6, 4, 5, 2]」…最小値1を先頭と交換する、選択ソートの1巡目の結果です。
・「[6, 4, 5, 2, 1]」…比較を < と読み、大きい順に並べる向きで1巡した結果です。
・「[1, 2, 4, 5, 6]」…すべての巡回が終わった最終結果です。1巡目だけでは、まだ並びきっていません。
問96-4・応用

Aさんは、バブルソートで交換が何回起こるかを調べている。次のプログラムは、配列Dataを昇順(小さい順)に並べ替え、交換の回数 koukan を表示する(共通テスト用プログラム表記。添字は0から始まり、÷ は整数の除算の商を表す)。
( 1 ) Data = [4, 3, 1, 2]
( 2 ) koukan = 0
( 3 ) i を 0 から 2 まで 1 ずつ増やしながら繰り返す:
( 4 ) | j を 0 から 2 - i まで 1 ずつ増やしながら繰り返す:
( 5 ) | | もし Data[j] > Data[j + 1] ならば:
( 6 ) | | | tmp = Data[j] , Data[j] = Data[j + 1] , Data[j + 1] = tmp
( 7 ) ⎿ ⎿ ⎿ koukan = koukan + 1
( 8 ) 表示する(koukan)
このプログラムを実行したときに表示される値はどれか。

  • ①6
  • ②3
  • ③5
  • ④4
答えと解説を見る
正解 ③5
解説
正解は「5」。

手順
①i=0:4と3を交換→[3, 4, 1, 2]、4と1を交換→[3, 1, 4, 2]、4と2を交換→[3, 1, 2, 4](3回)。
②i=1:3と1を交換→[1, 3, 2, 4]、3と2を交換→[1, 2, 3, 4](2回)。
③i=2:1と2は順序どおりで交換なし。合計 3+2=5回です。大小が逆になっている2つの組(4と3、4と1、4と2、3と1、3と2)の数と一致します。

ひっかけ注意

・「6」…比較の回数(3+2+1)です。交換は、順序が逆のときだけ起こります。
・「3」…1巡目の交換の回数だけを数えた場合です。
・「4」…正しい位置にない要素の個数(4個すべて)と混同した値です。
問106-4・応用

Aさんは、昇順に並んだ要素数1023の配列から、配列に含まれない値を探すときの比較の回数を考えている。線形探索は先頭から1つずつ比べ、二分探索は中央の値と比べて範囲を半分にしていく(中央の添字は (sita + ue) ÷ 2 で求め、範囲がなくなるまで続ける)。
線形探索で比べる回数と、二分探索で中央の値を調べる回数の組合せとして正しいものはどれか。

  • ①線形探索1023回・二分探索9回
  • ②線形探索1023回・二分探索511回
  • ③線形探索512回・二分探索10回
  • ④線形探索1023回・二分探索10回
答えと解説を見る
正解 ④線形探索1023回・二分探索10回
解説
正解は「線形探索1023回・二分探索10回」。

手順
①線形探索:含まれない値は、1023個すべてと比べて初めてないと分かるので1023回です。
②二分探索:1回調べるごとに、残りは 1023→511→255→127→63→31→15→7→3→1→0 個と減ります。
③残りが0になるまでに調べた回数は10回です(1023=2の10乗-1)。

ひっかけ注意

・「線形探索1023回・二分探索9回」…残りが1個になったところで止めた場合です。最後の1個も調べる必要があります。
・「線形探索1023回・二分探索511回」…1023のおよそ半分を回数と考えた場合です。二分探索は毎回範囲が半分になるので、回数はずっと少なくなります。
・「線形探索512回・二分探索10回」…含まれる値を探すときの平均の回数((1+1023)÷2)です。含まれない値では最後まで比べます。

当サイトは、独立行政法人 大学入試センターとは一切関係のない、非公式の学習サイトです。試験に関する最新情報は、大学入試センターの公式サイトでご確認ください。

共通テスト 情報Ⅰ 基礎完全対策(全800問)に戻る

※本ページでは、アクセス解析(Googleアナリティクス)と、広告の配信・成果の計測(A8.net)のためにCookie等を利用し、閲覧に関する情報をGoogle LLC・株式会社ファンコミュニケーションズへ送信しています。詳しくはプライバシーポリシーをご覧ください。

※本ページの問題・解説は、生成AI(人工知能)を活用して作成しています。

【PR】