令和6年試験問題 [科目B]問4
問4解説へ
次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 merge は,昇順に整列された整数型の配列 data1 及び data2 を受け取り,これらを併合してできる昇順に整列された整数型の配列を返す。
関数 merge を merge({2,3},{1,4})として呼び出すと,/*** α ***/ の行は 。
〔プログラム〕
関数 merge は,昇順に整列された整数型の配列 data1 及び data2 を受け取り,これらを併合してできる昇順に整列された整数型の配列を返す。
関数 merge を merge({2,3},{1,4})として呼び出すと,/*** α ***/ の行は 。
〔プログラム〕
- 実行されない
- 1回実行される
- 2回実行される
- 3回実行される
正解 イ問題へ
分野:アルゴリズムとプログラミング
カテゴリ:データ構造及びアルゴリズム
カテゴリ:データ構造及びアルゴリズム
広告
解説
プログラムは3つのwhile文から成り立っています。
最も重要なのは1つ目のwhile文で、ここでは引数の2つの配列(data1、data2)の値を比較して小さいほうを 配列 work に代入することを繰り返します。そして、どちらかが末尾まで達した時点でループを抜けます。
2つ目と3つ目のwhile文は、後処理のようなもので、最初のwhile文でどちらかの配列が最後まで処理された後、もう一方の配列に残っている値を配列 work に追加する処理を行っています。
merge({2,3},{1,4})を呼び出した場合、具体的には次のように処理されていきます。
まず、各変数は以下のように初期化されます。
したがってαの行は「1回実行される」が適切です。
最も重要なのは1つ目のwhile文で、ここでは引数の2つの配列(data1、data2)の値を比較して小さいほうを 配列 work に代入することを繰り返します。そして、どちらかが末尾まで達した時点でループを抜けます。
2つ目と3つ目のwhile文は、後処理のようなもので、最初のwhile文でどちらかの配列が最後まで処理された後、もう一方の配列に残っている値を配列 work に追加する処理を行っています。
merge({2,3},{1,4})を呼び出した場合、具体的には次のように処理されていきます。
まず、各変数は以下のように初期化されます。
- n1 ← 2
- n2 ← 2
- work ← {未定義, 未定義, 未定義, 未定義}
- i ← 1
- j ← 1
- k ← 1
- ●iが2以下 かつ jが2以下 である間、繰り返す
- data1[1] = 2 ≦ data2[2] = 1 はfalse
work[1] に data2[1] = 1 を代入 //work{1, 未定義, 未定義, 未定義}
j ← j + 1 //j = 2
k ← k + 1 //k = 2 - data1[1] = 2 ≦ data2[2] = 4 はtrue
work[2] に data1[1] = 2 を代入 //work{1, 2, 未定義, 未定義}
i ← i + 1 //i = 2
k ← k + 1 //k = 3 - data1[2] = 3 ≦ data2[2] = 4 はtrue
work[3] に data1[2] = 3 を代入 //work{1, 2, 3, 未定義}
i ← i + 1 //i = 3
k ← k + 1 //k = 4 - i=3で、2より大きくなったのでループを抜ける
- ●iが2以下である間、繰り返す
- i=3で、2より大きいので1回も実行されない
- ●jが2以下である間、繰り返す
- work[4] に data2[2] = 4 を代入 //αの行 work{1, 2, 3, 4}
j ← j + 1 //j = 3
k ← k + 1 //k = 5 - j=3で、2より大きくなったのでループを抜ける
したがってαの行は「1回実行される」が適切です。
広告