メインコンテンツへスキップ
基本情報技術者令和7年度 CBT科目B3

令和7年度 CBT 基本情報技術者 科目B3

難度標準

問3 次のプログラム中の a と b に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

関数 push は、引数で与えられた整数をスタックに格納する。格納できた場合は true を返し、格納できなかった場合は false を返す。

関数 pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。

スタックを,要素数が4である大域の整数型の配列 stack, 及び次に値を格納する位置を示す大域の変数 stackPos で表現する。スタックの初期状態を図に示す。

プログラムでは,配列の領域外を参照してはならないものとする。

[プログラム]

大域:整数型: stackPos ← 3

大域:整数型の配列: stack ← {4,3,未定義の値,未定義の値}

○論理型:push(整数型: inputData)

if (stackPos ≦ stackの要素数)

stack[ a ] ← inputData

stackPos ← stackPos + 1

return true

else

return false

endif

○整数型:pop()

整数型:popData ← 未定義の値

if (stackPos > 1)

stackPos ← b

popData ← stack[stackPos]

stack[stackPos] ← 未定義の値

endif

return popData

選択肢

a: stackPos, b: stackPos + 1
a: stackPos, b: stackPos - 1
a: stackPos - 1, b: stackPos + 1
a: stackPos - 1, b: stackPos - 1

解説

結論 → 詳細 → 補足 の 3 層構成

展開
結論Layer 1

イが正解となるのは、スタックの概念と配列の添え字の扱い、そしてプログラムのロジックに基づいています。スタックは、後から入れたものが先に出てくるLIFO(Last In, First Out)構造を持ちます。配列 `stack` の要素番号は1から始まるという定義です。

詳細Layer 2

`push` 関数において、`stackPos` は次に値を格納する位置を示します。配列の領域外を参照しないためには、`stackPos` がスタックの要素数以下である場合に格納を試みる必要があります。`a` に `stackPos` を代入することで、現在の `stackPos` が指す位置(1から始まる配列で `stackPos` 番目の要素)に `inputData` が格納されます。その後 `stackPos` は1つ増え、次回の格納位置を示します。

補足Layer 3

`pop` 関数では、`stackPos` は次に格納する位置を示しており、スタックから値を取り出す際には、その `stackPos` が示す位置の「一つ前」がスタックの最上部となります。したがって、`stackPos` を1つ減らすことで(`b: stackPos - 1`)、スタックから取り出すべき要素のインデックスを正しく指し示すことができます。取り出した要素には `undefined` を代入し、スタックの要素数を減らす `stackPos` を1つ減らす操作が適切です。

選択肢アは、`pop` 関数で `stackPos` を `stackPos + 1` としているため、スタックの最上部ではなく、次の格納位置以降の要素を参照してしまい、誤りです。

選択肢ウは、`push` 関数で `a` を `stackPos - 1` としていますが、`stackPos` は格納すべき位置を指しており、その位置に格納するのが正しいので不適切です。また、`pop` 関数で `stackPos` を `stackPos + 1` としている点も誤りです。

選択肢エは、`push` 関数で `a` を `stackPos - 1` としている点が誤りであり、`pop` 関数での `b` の値も同様に誤りです。

この解説は?
この解説は AI 生成です(詳細)

解説テキストは Google Gemini に IPA 公式の問題文・公式解答を入力して生成しました。 人間によるレビューを行ったものと、未レビューのものが混在します。

AI は事実誤認・選択肢の取り違え・最新法令の反映漏れ等を含む可能性があります。 重要な判断は必ず IPA 公式 PDF または最新の参考書でご確認ください。

解説の検証プロセス・誤り報告フローは 運営透明性レポートで公開しています。

※ AI 生成の解説は誤りを含む可能性があります。重要な判断は IPA 公式資料でご確認ください。

最終更新:

分野「アルゴリズムとプログラミング」の学習ポイント

この問題の理解を「分野全体の力」に広げるための足がかり

何が問われるか
計算量(O 記法)・基本データ構造・典型アルゴリズム(探索・整列)・再帰の挙動を読む力。
学習の進め方
擬似コードを実際にトレースして変数の遷移を表に書き出す習慣を付ける。スタック/キュー/木の図示が定着の鍵。
関連キーワード
計算量二分探索クイックソート再帰スタックキュー木構造
この分野の問題をもっと解く
AI コパイロット

この問題を AI と深掘りする

用語解説・選択肢分析・類題生成をその場で対話。クイズモードでは解答→解説がゼロ遷移。

クイズモードで開く

共有

X でシェアLINE

ショート動画

関連する問題

アルゴリズムとプログラミング の他の問題