令和5年度 科目B 問2
アルゴリズム
手続に関する問題
次の記述中の[ ]に入れる正しい答えを,解答群の中から選べ。
次のプログラムにおいて,手続 proc2 を呼び出すと,[ ]の順に出力される。
〔プログラム〕
○proc1() "A" を出力する proc3() ○proc2() proc3() "B" を出力する proc1() ○proc3() "C" を出力する
- ア“A”,“B”,“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”
答えと解説を見る
✓ これが正解ク“C”,“B”,“A”,“C”
解説
proc2は C、B、A、C の順に出力します。
この問は、手続の中から別の手続を呼び出したとき、出力がどの順に並ぶかを追う問です。手続を呼び出すと、呼ばれた側の処理を最後まで実行してから、呼んだ側の次の行に戻って続きを実行します。この戻り先を見失わないことが軸になります。
proc2 の中身は、proc3 の呼出し、B の出力、proc1 の呼出しの3行です。1行目で proc3 に入り C を出力して戻ります。2行目で B を出力します。3行目で proc1 に入ると、まず A を出力し、続けて proc1 の中から proc3 を呼び出して C を出力します。proc3 から proc1 に戻り、proc1 も最後まで終わるので proc2 に戻って終了します。
したがって出力は C、B、A、C の4つで、この順になります。B を出力する行はプログラム全体で proc2 の中に1回しかなく、proc2 は1回しか呼ばれないので、B はちょうど1回だけ現れます。また C は proc3 からしか出力されず、proc3 は proc2 から直接1回、proc1 経由で1回呼ばれるので、2回現れます。
呼出しの問は、各文字を出力する行が何回実行されるかを先に数えておくと、並びを追う前に候補をかなり絞り込めます。
ほかの選択肢はなぜ違うのか
- ア“A”,“B”,“B”,“C”:B が2回含まれています。B を出力する行は proc2 の中にしかなく、proc2 は1回しか呼ばれないので、B が2回出ることはありません。先頭が A になる点も、proc2 の最初の行が proc3 の呼出しであることと合いません。
- イ“A”,“C”:A と C は proc1 を単独で呼び出したときの出力です。proc2 を呼んだ場合は、その前に proc3 による C と、proc2 自身の B が出力されるので、2文字だけで終わることはありません。
- ウ“A”,“C”,“B”,“C”:proc2 の中の proc3 と proc1 の呼出し順を入れ替えると、この並びになります。実際は proc3 が先に呼ばれて C が最初に出力され、proc1 による A と C は B の後に続きます。
- エ“B”,“A”,“B”,“C”:B が2回含まれていますが、B を出力するのは1回だけ呼ばれる proc2 の1行だけです。また proc2 は最初に proc3 を呼ぶので、最初の出力は B ではなく C になります。
- オ“B”,“C”,“B”,“A”:B が2回あり、最後が A で終わっています。B は1回しか出力されず、A を出力した proc1 はその後に proc3 を呼んで C を出力するので、最後の出力は C になります。
- カ“C”,“B”:C と B の後で終わっていて、proc2 の最後の行にある proc1 の呼出しが抜けています。proc1 が実行されると A が出力され、さらにその中で proc3 が呼ばれて C が続きます。
- キ“C”,“B”,“A”:C、B、A までは合っていますが、proc1 の中で A の後に proc3 を呼ぶ行が抜けています。proc1 は A を出力した後に proc3 を呼ぶので、最後に C がもう1つ出力されます。
出典:令和5年度 基本情報技術者試験 科目B 問2
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)