CO-P02|情報Ⅰ 対策問題
次のプログラムは、配列の中に目的の値 x があるかを線形探索で調べる。空欄【ア】に入るものはどれか。 (1) Data = [12, 7, 31, 24, 18] (2) x = 24 (3) mitsuketa = 0 (4) i を 0 から 4 まで 1 ずつ増やしながら繰り返す: (5) | もし 【ア】 ならば: (6) ⎿ ⎿ mitsuketa = 1 (7) もし mitsuketa == 1 ならば: (8) ⎿ 表示する("あります")
解答・解説を見る
正解: 1
正答
1
この問題のポイント
線形探索の条件式の穴埋め を問う問題です。空欄は「直後の処理」から逆算するのが解法の型です。
解説
線形探索(リニアサーチ)とは、配列を先頭から1つずつ順に見て、目的の値と等しいかを確かめていく探し方です。このプログラムでは、見つかったら(6)で mitsuketa を1にする(フラグを立てる)仕組みになっています。
空欄補充は、空欄の直後の処理から条件を逆算します。(6)は「mitsuketa = 1」、つまり「見つかった」と記録する行です。これを実行してよいのは「今見ている i 番目の要素 Data[i] が、探している値 x と等しいとき」だけ。よって条件は Data[i] == x です。
実際にトレースして確かめます(x=24)。
i=0のとき: Data[0]=12。12==24 は偽。
i=1のとき: Data[1]=7。偽。
i=2のとき: Data[2]=31。偽。
i=3のとき: Data[3]=24。24==24 は真 → mitsuketa=1。
i=4のとき: Data[4]=18。偽(mitsuketa は1のまま)。
ループ後、(7)の mitsuketa == 1 が真なので「あります」と表示されます。
この問題のもう1つの核心は、「配列の中身(値)」と「添字(位置)」の区別です。Data[i] は「i番目に入っている値」、i はただの位置番号。選択肢2の Data[x] は「x番目(=24番目)の要素」という意味になり、要素5個の配列では範囲外です。共通テストの穴埋めでは、この値と添字を入れ替えた選択肢が必ずと言ってよいほど並ぶので、「[ ]の中は位置、外に出てくるのは値」と唱えて見分けましょう。
選択肢の確認
1.○ i番目の要素と目的の値の比較。線形探索の定義そのもの。
2.× Data[x]=Data[24]は「24番目の要素」で範囲外。値と添字の取り違え。
3.× 位置番号 i と値 x の比較は意味を持たない。
4.× mitsuketa は0か1のフラグで、要素と比べるものではない。
ここだけは覚えよう
空欄は直後の処理から逆算 — 「mitsuketa=1 を実行してよいのはどんなときか」を日本語で言えれば条件式が書ける。