問題
関数 push は引数で与えられた整数をスタックに格納し、格納できた場合は true を、できなかった場合は false を返す。関数 pop はスタックから値を取り出して返し、空のときは未定義の値を返す。スタックは要素数 4 の大域配列 stack と、次に値を格納する位置を示す大域変数 stackPos で表現する。スタックの初期状態と〔プログラム〕を図に示す。配列の領域外を参照してはならない。図中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は 1 から始まる。

選択肢
- 1a: stackPos / b: stackPos + 1
- 2a: stackPos / b: stackPos - 1
- 3a: stackPos - 1 / b: stackPos + 1
- 4a: stackPos - 1 / b: stackPos - 1
正解
2. a: stackPos / b: stackPos - 1
詳しい解説を見る解説を閉じる
解説
stackPos は「次に値を格納する位置」を示す(初期値 3 で、要素 1・2 に値があり要素 3 が空)。push では現在の空き位置 stackPos に値を入れてから位置を一つ進めるので、a は stackPos そのものが正しい(その後 stackPos ← stackPos + 1)。pop ではスタックの先頭(最後に積んだ値)は次の格納位置の一つ手前、すなわち stackPos - 1 にある。プログラムは先に stackPos を更新してから stack[stackPos] を読み出すため、b は stackPos - 1 とすれば更新後の stackPos が先頭要素を指し、正しく取り出せる。したがって a=stackPos、b=stackPos - 1 の組合せ「イ」が正しい。(出典: 令和7年度 基本情報技術者試験 科目B 問3)
一問一答
科目A 180問+科目B 60問