この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ク

解説

この問題は再帰呼び出しとプログラムの実行順序の理解を問う重要な問題です。プログラムの実行順序を追跡する際は、手続きが呼び出されるたびに新しい実行コンテキストが作られ、呼び出し元の処理は一時停止することを理解する必要があります。 まず、proc2()が呼び出されると以下の順序で実行されます: 1. proc3()を呼び出し、proc3内で'C'を出力 2. 'B'を出力 3. proc1()を呼び出し、その中で'A'を出力し、さらにproc3()を呼び出して'C'を出力 したがって、最終的な出力は'C', 'B', 'A', 'C'となります。 このような問題が出題される理由は、実務でのプログラミングにおいて手続きの呼び出しの流れを正確に理解することが非常に重要だからです。特にデバッグやプログラムの動作解析において、実行順序の理解は必須のスキルとなります。

なぜ他の選択肢は違うのか

選択肢 ア
'A', 'B', 'B', 'C'という順序は、proc2の実行時にproc3が最初に呼ばれることを見落としている誤りです。多くの受験生は上から順に実行されると考えがちですが、手続き呼び出しがある場合は、その手続きの中身が優先して実行されることを理解する必要があります。
選択肢 イ
'A', 'C'という順序は、proc2内でのproc1の呼び出しによる二回目のproc3の実行を見落としています。手続きの再帰的な呼び出しパターンを完全に追跡できていない典型的な誤りです。
選択肢 ウ
'A', 'C', 'B', 'C'という順序は、最初のproc3の呼び出しと'B'の出力の順序を取り違えています。手続きが呼び出されたら、その手続きの処理を完了してから次の処理に移ることを理解していない誤りです。
選択肢 エ
'B', 'A', 'B', 'C'という順序は、proc2の先頭でproc3を呼び出していることを見落とし、'B'が最初に出力されると誤解しています。また出力回数も4回と一致していますが、最初の'B'はproc2本体の出力であり、proc3の'C'が先に来るはずです。
選択肢 オ
'B', 'C', 'B', 'A'という順序は、proc1とproc3の呼び出し順を逆に追跡した誤りです。proc2はproc3→'B'→proc1の順で処理するため、'B'の後にproc1が呼ばれ'A'と'C'が続きます。
選択肢 カ
'C', 'B'という2出力は、proc1が呼ばれることを完全に見落としています。proc2の最後にproc1()を呼び出しており、proc1内では'A'出力とproc3呼び出し('C'出力)が行われます。
選択肢 キ
'C', 'B', 'A'という3出力は、proc1内でproc3が呼ばれることを見落としています。proc1は'A'を出力した後にproc3()を呼び出すため、末尾にもう一つ'C'が出力されます。

解くときのポイント

手続き呼び出しの実行順序を追跡する際は、以下のような方法が効果的です: 1. 紙に実行スタックを描き、各手続きの呼び出しを積み上げていく 2. 各手続きの実行が完了したら、スタックから取り除く 3. 出力命令に注目し、実際に出力される順序を矢印で示す また、似たような問題でよく出題されるパターンとして: - 再帰呼び出し - 相互呼び出し - 入れ子になった手続き呼び出し これらのパターンを意識して学習することをお勧めします。