問題
問2
次の記述中の【 】に入れる正しい答えを,解答群の中から選べ。
次のプログラムにおいて,手続 proc2 を呼び出すと,【 】の順に出力される。

- ア:“A”, “B”, “C”
- イ:“A”, “C”
- ウ:“A”, “C”, “B”, “C”
- エ:“B”, “A”, “B”, “C”
- オ:“B”, “C”, “B”, “A”
- カ:“C”, “B”
- キ:“C”, “B”, “A”
- ク:“C”, “B”, “A”, “C”
[出典:基本情報技術者試験 令和5年度(科目B) 問2]
正解
正解は「ク」です。
解説
この問題は、複数の手続き(プロシージャ)呼び出しの順番と、その実行結果の出力を正しく追えるかを問う問題です。問題文から「proc2を呼び出したときに出力される順番」を問われています。
まずproc2を呼び出すと、最初にproc3()が呼び出されて「C」が出力されます。次に「B」を出力し、その後にproc1()を呼び出します。
proc1の処理では、最初に「A」を出力し、次にproc3()を呼び出して「C」が出力されます。
このように、proc2() → proc3() → “C” → “B” → proc1() → “A” → proc3() → “C” という順で処理が進むため、最終的な出力は「C」「B」「A」「C」となります。
このようなプロシージャのネスト(入れ子)構造は、日常の「指示を出す人が、さらに別の人に指示を出す」という連鎖に似ています。
例えば、AさんがBさんに「Cさんにこれを頼んで」と指示し、Cさんが最初に動き、そのあとBさんが動き、最後にAさんがまたCさんに頼む、という流れと同じです。
したがって、正解は「ク:C, B, A, C」です。
ア(“A”, “B”, “C”):
proc2を呼び出した際の最初の出力が「C」なので、順番が異なります。
イ(“A”, “C”):
proc2ではBの出力やネストされたproc3呼び出しがあるため、出力が不足しています。
ウ(“A”, “C”, “B”, “C”):
proc2の処理順に合っておらず、最初の出力が「A」なのは誤りです。
エ(“B”, “A”, “B”, “C”):
Bの出力が複数回あるのは誤りです。proc2ではBは1回しか出力しません。
オ(“B”, “C”, “B”, “A”):
出力順がproc3→B→proc1→Cという正しい流れに一致していません。
カ(“C”, “B”):
proc1での出力「A」「C」が抜けており不完全です。
キ(“C”, “B”, “A”):
proc1からのproc3呼び出しによる最後の「C」の出力が欠けています。
難易度
この問題は、手続き呼び出しが入れ子になっているケースを正確に追えるかがポイントです。内容としてはif文などの条件分岐は含まず、単純な順次処理のみのため、基本的なプログラム実行順序を理解していれば解けます。したがって難易度は「やや易しい」と言えます。
用語補足
手続き(プロシージャ):
プログラム内の特定の処理をひとまとまりにしたものです。何度も呼び出すことができ、処理の再利用性を高めるために使われます。
出力:
プログラムが画面などに結果を表示することです。ここでは文字列“A”, “B”, “C”を出力しています。
呼び出し:
プログラムで定義された手続きを実行することです。呼び出された手続き内でさらに別の手続きを呼ぶこともできます。
解法のポイント
この問題のように、手続きが相互に呼び出される構造を理解するには、紙に手続きの呼び出し順を書き出すことが効果的です。特に最初の出力や最後の出力を明確にし、各手続きの処理内容を順に追いかけるトレーニングを繰り返すことで、入れ子構造や順序処理への理解が深まります。


