📄 本試験 公開問題
基本情報技術者試験 2025年度(令和7年度) 科目B 公開問題
6問(本試験20問中の公開分) ・ 目安 正答率60%
基本情報技術者の2025年度(令和7年度) 科目B試験で実際に出題された問題のうち、公式に公開されている6問(本試験は20問)を、1問ずつその場で答え合わせしながら演習できます。合否の目安は正答率60%(演習の目安)。各問に正解と、なぜその選択肢になるのかの解説を付けています。
本試験の合格基準:科目A・科目Bの評価点がともに600点以上で合格(各1,000点満点・IRT方式)。
この回:科目Bの基準は評価点600点以上/1,000点満点(IRT)。合格には科目Aも600点以上が必要。公開問題は本試験20問のうち一部の抜粋で、正答率60%は評価点600点と同じではない。
出典:IPA 試験要綱 Ver.5.6(2026年10月の試験から適用)4. 採点方式・配点・合格基準。このページの「目安 正答率60%」は演習の目安で、本試験の採点方法とは異なります。
この回は 独立行政法人 情報処理推進機構(IPA) が公開する本試験問題を、当サイトがその場で答え合わせできる一問一答形式に再編し、公式には付いていない「正解の根拠・各選択肢の解き方」の解説を追記したものです。原題の出典は各問に明記しています。
この回は本試験そのものではなく、独立行政法人 情報処理推進機構(IPA)が公開している「公開問題」です。実際の試験は20問で構成され、そのうち6問が公開されています。公開されていない残りの問題は当サイトにも収録できません。この試験区分はCBT(コンピュータ方式)で通年実施されているため、公式が本試験をまるごと公開することがなく、これが公式から入手できる唯一の本試験問題です。
過去問の解答結果は学習記録・段位には反映されません。過去問は出題当時の法令・制度にもとづく問題を含むため、段位は継続して最新化している一問一答・模擬試験だけで判定しています。過去問を解かなくても段位で不利になることはありませんので、実力試しとして気軽にお使いください。
擬似言語の記述形式(科目Bの全問で共通。原本の2〜3ページ目)
問 1
次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。
関数function1 が受け取る引数と,関数function2 が受け取る引数とが同じとき,二つの関数は同じ値を返す。ここで,引数n と引数m は正の整数であり,引数m は引数n よりも10 以上大きい数とする。
〔プログラム〕
○整数型: function1(整数型: n, 整数型: m)
整数型: count ← 0
整数型: i
for (iをnからmまで1ずつ増やす)
if ((i mod 4)が0と等しい)
count ← count + 1
endif
endfor
return count
○整数型: function2(整数型: n, 整数型: m)
整数型: count ← 0
整数型: tempN ← n
整数型: i, j
for ([a])
if ((tempN mod 4)が0と等しい)
繰返し処理を終了する
endif
tempN ← tempN + 1
endfor
for ([b])
count ← count + 1
endfor
return count
正解:カ
function1 は n から m までを1つずつ見て,4の倍数の個数を数えている。function2 はこれを,まず「n 以上で最初の4の倍数」を見つけ,そこから4ずつ跳んで数える,という2段構えで求めている。
前半のループは tempN を n から1ずつ増やし,4の倍数になったところで打ち切る。n を4で割った余りが0なら0回,1なら3回,2なら2回,3なら1回の増加で4の倍数に届くので,増やす回数は最大3回である。したがってループは3回まわればよく,a は「iを1から3まで1ずつ増やす」。2回までだと,余りが1のときに tempN が n + 2 で止まってしまい4の倍数にならない。
後半のループは,その最初の4の倍数 tempN から m を超えない範囲で4ずつ進み,進むたびに count を1増やす。よって b は「jをtempNから始めてmを超えない範囲で4ずつ増やす」。イとオのように1ずつ増やすと,4の倍数でない数まで数えてしまう。アとエのように tempN ずつ増やすのは,刻み幅を4ではなく開始値にしており意味をなさない。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問1
報告ありがとうございました。内容を確認します。
問 2
次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。
関数change は,10 より大きい整数を引数n で受け取り,1 円玉,5 円玉,10 円玉を使ってちょうどn 円にする組合せの総数を返す。
例えば,12 円にする組合せは,次のように数えられる。10 円玉を使わない場合には,1 円玉と5 円玉だけでちょうど12 円にすることになる。その組合せは,使える5 円玉の枚数が0 以上 (12 ÷ 5 の商) 以下なので,(12 ÷ 5 の商) + 1 = 3 通りある。同様に,10 円玉を1 枚使う場合には,1 円玉と5 円玉だけでちょうど2 円にすることになり,その組合せは (2 ÷ 5 の商) + 1 = 1 通りある。10 円玉を2 枚以上使う組合せはない。よって,1 円玉,5 円玉,10 円玉を使ってちょうど12 円にする組合せは,3 + 1 = 4 通りである。
〔プログラム〕
○整数型: change(整数型: n)
整数型: count ← 0
整数型: rest ← n
while (□)
count ← count + (rest ÷ 5 の商) + 1
rest ← rest - 10
endwhile
return count
正解:ア
このプログラムは,10 円玉の枚数を0枚,1枚,2枚…と増やしながら,残り(rest)を1円玉と5円玉で作る通り数を足し合わせている。残りが0円のときも「1円玉も5円玉も使わない」という1通りがあり,設問の数え方でも (0 ÷ 5 の商) + 1 = 1 通りになる。したがって rest が0のときまで繰り返す必要があり,条件は rest ≧ 0 でア。
例えば20円なら,rest=20で5通り,rest=10で3通り,rest=0で1通りの計9通りが正しい。エの rest > 0 にすると rest=0 の回が抜けて8通りになり,n が10の倍数のときだけ1通り少なくなる。イ・ウ・オ・カはさらに手前で打ち切ってしまう。設問の12円の例では rest=12 と rest=2 の2回だけ回ればよいので,ア以外にエでも4通りになってしまう。例に合うかどうかだけでは絞り切れないので,残りが0になる場合を自分で作って確かめる必要がある。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問2
報告ありがとうございました。内容を確認します。
問 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
正解:イ
stackPos は「次に値を格納する位置」と定義されている。初期状態は stack が {4, 3, 未定義, 未定義} で stackPos が3であり,確かに3番目が次に入れる場所になっている。
push は値を入れる関数なので,入れる先はそのまま stackPos である。よって a は stackPos。入れたあとに stackPos を1増やして次の位置を指し直している。
pop は最後に入れた値を取り出す関数である。最後に入っているのは stackPos の1つ手前なので,まず stackPos を1減らしてからその位置を読む。よって b は stackPos - 1。このあと同じ位置を未定義に戻しているのも,減らしたあとの stackPos が「次に格納する位置」であることと辻褄が合う。したがってイ。a を stackPos - 1 にすると(ウ・エ)直前に入れた値を上書きしてしまう。b を stackPos + 1 にすると(ア・ウ)まだ何も入っていない場所を読み,配列の領域外まで参照することになる。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問3
報告ありがとうございました。内容を確認します。
問 4
次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。
関数search は,二つの文字型の配列を,それぞれ引数data 及びkey で受け取り,data から,key の要素の並びと同じ並びを全て探し,その先頭の要素番号を全て格納した配列を返す。見つからなければ,要素数0 の配列を返す。
関数search をsearch({"a", "b", "a", "b", "c", "a", "b", "c"}, {"a", "b", "c"}) として呼び出すと,/*** β ***/の行の条件式が真となる回数は □ 回である。
〔プログラム〕
/* keyは,要素数1以上の配列である */
○整数型の配列: search(文字型の配列: data, 文字型の配列: key)
整数型: i, j, lenData, lenKey
整数型の配列: result ← {} // 要素数0の配列
lenData ← dataの要素数
lenKey ← keyの要素数
/* (lenData - lenKey + 1) が0以下のときは繰返し処理を実行しない */
for (i を 1 から (lenData - lenKey + 1) まで 1 ずつ増やす)
for (j を 1 から lenKey まで 1 ずつ増やす) // α
if (data[i + j - 1] が key[j] と等しい) /*** β ***/
if (j が lenKey と等しい)
resultの末尾 に iの値 を追加する
endif
else
αの行から始まる繰返し処理を終了する
endif
endfor
endfor
return result
正解:ク
data は a, b, a, b, c, a, b, c の8要素,key は a, b, c の3要素なので,外側のループは i = 1 から 8 - 3 + 1 = 6 まで回る。内側では data[i + j - 1] と key[j] を比べ,一致すれば真(数える)、外れた時点で内側のループを打ち切る。i ごとに数えると次のようになる。
i=1: a=a で真,b=b で真,3文字目は data[3]=a と key[3]=c が外れる → 2回
i=2: data[2]=b と key[1]=a が外れる → 0回
i=3: a,b,c がすべて一致 → 3回(ここで result に3を追加)
i=4: data[4]=b が外れる → 0回
i=5: data[5]=c が外れる → 0回
i=6: a,b,c がすべて一致 → 3回(result に6を追加)
合計は 2 + 0 + 3 + 0 + 0 + 3 = 8 回。よってク。見つかった回数(2回)や,一致した並びの文字数の合計(6回)と取り違えないこと。数えるのは比較が真になった回数である。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問4
報告ありがとうございました。内容を確認します。
問 5
次の記述中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。
予防接種の病気X に対する予防効果を調査するために集めたデータの集計結果を基に,病気X にかかるかどうかが,予防接種の有無に影響されないと仮定した場合の人数を計算する。この人数を理論度数という。表1 に集計結果の例を示し,表2 に表1 を基に計算した理論度数を示す。
関数f は,引数data で受け取った集計結果を基に計算した理論度数を返す。引数と戻り値は二次元配列で,その行が表の行,その列が表の列に対応する。
〔プログラム〕
○実数型の二次元配列: f(実数型の二次元配列: data)
実数型: t ← dataの要素の和
整数型: row ← dataの行数
整数型: col ← dataの列数
実数型の二次元配列: result ← {row行col列の 未定義の値}
整数型: r, c
for (r を 1 から row まで 1 ずつ増やす)
for (c を 1 から col まで 1 ずつ増やす)
result[r, c] ← (dataの行番号rの要素の和) × (dataの列番号cの要素の和) ÷ t
endfor
endfor
return result
正解:オ
プログラムのとおり「その行の合計 × その列の合計 ÷ 全体の合計」で求める。
まず合計を出す。行の合計は,予防接種を受けた=82 + 6 = 88,受けていない=58 + 8 = 66。列の合計は,かからなかった=82 + 58 = 140,かかった=6 + 8 = 14。全体は 88 + 66 = 154 である。
a は「予防接種を受けた」行と「病気X にかからなかった」列が交わるところなので,88 × 140 ÷ 154 = 12,320 ÷ 154 = 80。
b は「予防接種を受けていない」行と「病気X にかかった」列が交わるところなので,66 × 14 ÷ 154 = 924 ÷ 154 = 6。
よってオ。表2 の網掛けの位置を見誤り,a と b を同じ行の2つのます(80 と 8)と読むとカを選んでしまう。キの 82 と 6 は表1 の実測値そのもので,理論度数ではない。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問5
報告ありがとうございました。内容を確認します。
問 6
A 社は従業員200 名の電子機器メーカーである。東京に本社があり,新潟に工場がある。
A 社では,ファイルサーバを図1 のように運用している。
・ファイルサーバは本社と工場のサーバルームに設置している。
・ファイルサーバは,磁気テープを使用してファイルのバックアップを取得している。
・土曜日の午前2 時からフルバックアップを取得し,翌週の火曜日と木曜日の午前2 時から増分バックアップを取得している。
・情報システム部の担当者は毎週月曜日,火曜日,木曜日の朝10 時頃,バックアップジョブの実行結果の確認と磁気テープの交換を行い,磁気テープは耐火金庫に保管している。
・磁気テープには上書きモードでバックアップを取得し,1 か月分の磁気テープを世代管理している。
・これまで,フルバックアップからのリストアには平均して4 時間,1 回の増分バックアップからは平均して0.25 時間掛かっている。
・A 社はICT 継続のための試験を実施しており,ファイルサーバも試験対象である。
注記 事業影響度分析の結果に基づき,ファイルサーバは,72 時間の目標復旧時点(RPO)と120 時間の目標復旧時間(RTO)が要求事項として定められている。
図1 A 社のファイルサーバの運用
A 社はISMS 認証を取得しており,最高情報セキュリティ責任者(CISO)を中心に情報セキュリティに取り組み,定期的に,情報セキュリティリスクアセスメントを行っている。今般,ISMS 認証基準がJIS Q 27001:2023 に改正されたことを受け,情報セキュリティリーダーのB さんは,新基準への移行審査に向けて準備することになった。改正によって新たに追加された情報セキュリティ管理策について,B さんは情報システム部の担当者に取組状況を確認し,その評価結果を表1 にまとめた。
B さんは,移行審査前の内部監査で,内部監査室から表1 の項番1 に関するファイルサーバの運用について何点か質問を受け,表2 のとおり回答した。
設問 表2 中の [a1] ~ [a3] に入れる字句の適切な組合せを,a に関する解答群の中から選べ。
正解:ク
a1 は目標復旧時点(RPO)の話である。RPO は「障害からさかのぼって,どの時点までのデータを取り戻せなければならないか」を示す。要求事項は72 時間なので,金曜日の正午に障害が起きたなら,その72 時間前である火曜日の正午の時点のデータは少なくとも復元できなければならない。月曜日の正午は96 時間前で,要求より厳しい値になってしまう。
a2 はリストアに掛かる時間である。バックアップは土曜日の午前2 時にフル,翌週の火曜日と木曜日の午前2 時に増分を取っている。木曜日の正午に全データが消失したのなら,直前の木曜日午前2 時までは取れているので,フルを戻したうえで火曜日の増分と木曜日の増分を順に適用することになる。4 + 0.25 + 0.25 = 4.50 時間である。4.25 は,増分を最後の1 回分しか適用しないと数えた値で,増分バックアップは前回のバックアップからの差分なので途中を飛ばすことはできない。
a3 は承認者である。A 社は最高情報セキュリティ責任者(CISO)を中心に情報セキュリティに取り組んでおり,ICT 継続の計画書のような重要な文書を承認するのはCISO である。情報システム部の担当者は運用を実施する側で,自分の計画を自分で承認することになってしまう。内部監査室長は監査する側なので,被監査側の計画を承認すると独立性を失う。したがって a1 は火曜日の正午,a2 は4.50,a3 はCISO でク。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目B 公開問題」問6
報告ありがとうございました。内容を確認します。
この回の最終更新: