問2 手続の呼出しと出力の順番

基本情報​技術者試験 令和5年度 公開問題 科目B、全6問のうちの問2。

出典:令和5年度 基本情報技術者試験 公開問題 科目B 問2(プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。空欄は[  ]で表した)

次の記述中の[  ]に入れる正しい答えを,解答群の中から選べ。

次のプログラムにおいて,手続 proc2 を呼び出すと,[  ]の順に出力される。

〔プログラム〕
○proc1()
"A" を出力する
proc3()
 
○proc2()
proc3()
"B" を出力する
proc1()
 
○proc3()
"C" を出力する
  1. ア“A”,“B”,“B”,“C”
  2. イ“A”,“C”
  3. ウ“A”,“C”,“B”,“C”
  4. エ“B”,“A”,“B”,“C”
  5. オ“B”,“C”,“B”,“A”
  6. カ“C”,“B”
  7. キ“C”,“B”,“A”
  8. ク“C”,“B”,“A”,“C”
答えと解説を開く

正解はクです。

proc2 の中身を上から 1 行ずつ追います。1 行目の proc3() で proc3 に入り、“C” を出力して proc2 に戻ります。2 行目で “B” を出力します。3 行目の proc1() で proc1 に入り、“A” を出力します。proc1 の 2 行目で proc3() を呼ぶので、もう一度 “C” を出力します。proc3 から proc1 に戻り、proc1 も終わって proc2 に戻り、proc2 も終わります。出力は “C”,“B”,“A”,“C” の順です。正解はクです。

ほかの選択肢が違う理由

  • ア最初に “A” が出ることはありません。proc2 の 1 行目は proc3 なので “C” が先です。また、“B” を出力するのは proc2 の 1 か所だけで、2 回は出ません。
  • イproc1 だけを動かしたときの出力です。proc2 の proc3 と “B” の出力が抜けています。
  • ウ最初に “A” は出ません。proc2 の 1 行目は proc3 なので、最初は “C” です。
  • エ最初の出力は “B” ではありません。proc2 の 1 行目は proc3 なので、最初は “C” です。また、“B” を出力するのは proc2 の 1 か所だけで、2 回は出ません。
  • オ最初の出力は “B” ではありません。proc2 の 1 行目は proc3 なので、最初は “C” です。また、“B” を出力するのは proc2 の 1 か所だけで、2 回は出ません。
  • カproc2 の 3 行目の proc1 の呼出しを数えていません。proc1 が出す “A” と、その中の proc3 が出す “C” が抜けています。
  • キproc1 の中で呼ばれる proc3 を数えていません。最後の “C” が抜けています。

仕組み

手続を呼ぶと、呼ばれた側の中身を最後まで実行してから、呼んだ行の次に戻ります。呼出しの中でさらに呼出しがあれば、同じことが重なります。

追うときは、今どの手続の何行目にいるかを紙に書き、呼んだら 1 段下げ、戻ったら 1 段上げると迷いません。

この問に出る言葉