次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。…
科目B アルゴリズムとプログラミング 科目B 問3
次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。関数push は,引数で与えられた整数をスタックに格納する。格納できた場合はtrue を返し,格納できなかった場合はfalse を返す。関数pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。スタックを,要素数が4 である大域の整数型の配列stack,及び次に値を格納する位置を示す大域の変数stackPos で表現する。スタックの初期状態を図に示す。プログラムでは,配列の領域外を参照してはならないものとする。
正答 イ
正答は イ。a:stackPos、b:stackPos - 1 の組合せです。
【変数の意味】
stackPos は「次に値を格納する位置」です。初期状態ではstack[1]=4、stack[2]=3 が入っていて、stackPos=3 です。
・push:いまの stackPos の位置に格納し(a:stackPos)、stackPos を 1 増やします
・pop:最後に格納した値は stackPos の一つ手前にあるので、stackPos を 1 減らしてから(b:stackPos - 1)、その位置の値を取り出します
解説の続きをみる続きを閉じる
【トレース】
push(5) stackPos=3 ≦ 4 → stack[3]←5、stackPos←4、true
push(6) stackPos=4 ≦ 4 → stack[4]←6、stackPos←5、true
push(7) stackPos=5 > 4 → false(満杯で格納しない)
pop() stackPos=5 > 1 → stackPos←4、stack[4] の 6 を返す
pop() stackPos=4 > 1 → stackPos←3、stack[3] の 5 を返す
pop() stackPos=3 > 1 → stackPos←2、stack[2] の 3 を返す
pop() stackPos=2 > 1 → stackPos←1、stack[1] の 4 を返す
pop() stackPos=1 で条件が偽 → 未定義の値を返す(空)
後から入れた値から順に取り出され、配列の領域外も参照しないので、スタックとして正しく動きます。
【ほかの選択肢】
ア(a:stackPos、b:stackPos + 1) 誤り
→ 初期状態で pop すると stackPos が 4 になり、最後に入れた 3 ではなく
未定義の stack[4] を取り出す。満杯(stackPos=5)で pop するとstack[6] を参照し、配列の領域外になる
ウ(a:stackPos - 1、b:stackPos + 1) 誤り
→ a も b も誤り(a の問題はエと同じ、b の問題はアと同じ)
エ(a:stackPos - 1、b:stackPos - 1) 誤り
→ 初期状態で push(5) すると stack[2] に書き込み、入っていた 3 を
上書きしてしまう。空(stackPos=1)のときの push ではstack[0] を参照し、配列の領域外になる
出典:令和7年度 基本情報技術者試験 科目B 公開問題 問3(独立行政法人情報処理推進機構)出典元ページ
最終更新日
「科目B アルゴリズムとプログラミング」のほかの問題
- 2024年度(令和6年度)公開問題 科目B 問3次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2024年度(令和6年度)公開問題 科目B 問4次の記述中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2024年度(令和6年度)公開問題 科目B 問5次のプログラム中の [a] ~ [c] に入れる正しい答えの組合せを,解答群の中から選べ
- 2026年度(令和8年度)公開問題 科目B 問1次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2026年度(令和8年度)公開問題 科目B 問2次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2026年度(令和8年度)公開問題 科目B 問3次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
スポンサーリンク






