基本情報技術者試験過去問 - 令和7年公開問題(科目B)

公開日2025年7月4日 受験者 :133,732人
問題数6問 合格者 :54,501人
合格率 :40.7%
公式PDF PDFファイル問題 PDFファイル解答   

問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

解答群
ab
iを1から2まで1ずつ増やすjをnから始めてmを超えない範囲でtempNずつ増やす
iを1から2まで1ずつ増やすjをtempNからmまで1ずつ増やす
iを1から2まで1ずつ増やすjをtempNから始めてmを超えない範囲で4ずつ増やす
iを1から3まで1ずつ増やすjをnから始めてmを超えない範囲でtempNずつ増やす
iを1から3まで1ずつ増やすjをtempNからmまで1ずつ増やす
iを1から3まで1ずつ増やすjをtempNから始めてmを超えない範囲で4ずつ増やす
答え設問1 カ 
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
解説
ファインチューニングに関する問題です。「ファインチューニング」(fine tuning)とは,大量の一般的なテキストで事前学習を終えたモデルに対して,目的に合わせた特定のデータを追加で学習させ,特定のタスクに適用できるように調整する手法です。正解は選択肢「エ」です。

「ア」の強化学習は試行錯誤によって報酬を最大化する別の学習方式であり,ファインチューニングそのものではありません。「イ」は事前学習と同じデータを繰り返し使うという説明であり,ファインチューニングの目的である「特定タスクへの適応」とは異なります。「ウ」は事前学習そのものの説明に近く,大量の一般的なテキストデータを使う点がファインチューニングと矛盾します。ファインチューニングは「少量でも目的に特化したデータ」を使う点がポイントです。
問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

解答群
rest ≧ 0
rest ≧ 5
rest ≧ 10
rest > 0
rest > 5
rest > 10
答え設問1 ア 
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
解説
浮動小数点演算における丸め誤差についての問題です。「丸め誤差」とは,数値を表現できる桁数に限りがあるため,表現しきれない下位の桁を四捨五入・切り上げ・切り捨てすることによって生じる誤差のことです。正解は選択肢「イ」です。

「ア」はオーバーフローの説明であり,丸め誤差とは別の誤差です。「ウ」は指数部の違いによって仮数部の下位が失われる誤差で,これは桁落ちではなく「情報落ち」と呼ばれる別の誤差です。「エ」は絶対値がほぼ等しい数同士を引き算する際に有効桁が失われる「桁落ち」の説明であり,丸め誤差とは異なる現象です。誤差の種類ごとに発生原因が異なるため,混同しないよう整理しておくことが大切です。
問3
 次のプログラム中の [ a ] と [ b ] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列要素番号は1から始まる。

 関数 push は,引数で与えられた整数をスタックに格納する。格納できた場合は true を返し,格納できなかった場合は false を返す。
 関数 pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。
 スタックを,要素数が4である大域の整数型の配列 stack,及び次に値を格納する位置を示す大域の変数 stackPos で表現する。スタックの初期状態を図に示す。
 プログラムでは,配列の領域外を参照してはならないものとする。

図 スタックの初期状態
要素番号1234
stack43

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

解答群
ab
stackPosstackPos + 1
stackPosstackPos - 1
stackPos - 1stackPos + 1
stackPos - 1stackPos - 1
答え設問1 イ 
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
解説
二分探索木の大小関係を問う問題です。「二分探索木」(binary search tree)とは,各節点について「左の子孫はその節点より小さい値,右の子孫はその節点より大きい値」というルールを持つ木構造です。画像の木構造では,根がaで,左の子がb,右の子がcとなっており,bの子がd(左)とe(右),cの子がf(左)とg(右)です。この規則に従うと,aから見て左側全体(b,d,e)はaより小さく,右側全体(c,f,g)はaより大きいことになります。

さらに,bから見てdはbより小さく,eはbより大きくなります。同様にcから見てfはcより小さく,gはcより大きくなります。これらの関係をすべてつなげると,d<b<e<a<f<c<gという順序になり,正解は選択肢「イ」です。他の選択肢は,根や子の大小関係の向きを取り違えているため誤りとなります。二分探索木の問題では,必ず「左が小さく,右が大きい」という基本ルールに沿って確認することが重要です。
問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

解答群
1
2
3
4
5
6
7
8
9
10
答え設問1 ク 
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
解説
MTBFMTTRから稼働率を求める計算問題です。稼働率は「MTBF÷(MTBFMTTR)」で計算されます。MTBF平均故障間隔)は装置が正常に動作している平均時間,MTTR平均修理時間)は故障してから復旧するまでの平均時間を表します。

初期値はMTBFが4,000時間,MTTRが1,000時間で,6年間,毎年MTBFが100時間増え,MTTRが100時間減っていく計画です。6年後にはMTBFが4,000+100×6=4,600時間,MTTRが1,000-100×6=400時間となります。これを稼働率の式に当てはめると,4,600÷(4,600+400)=4,600÷5,000=0.92となり,正解は選択肢「ウ」です。稼働率の計算では,MTBFMTTRの変化を年数分正しく積み上げることがポイントです。
問5
 次の記述中の [ a ] と [ b ] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列要素番号は1から始まる。

 予防接種の病気Xに対する予防効果を調査するために集めたデータの集計結果を基に,病気Xにかかるかどうかが,予防接種の有無に影響されないと仮定した場合の人数を計算する。この人数を理論度数という。表1に集計結果の例を示し,表2に表1を基に計算した理論度数を示す。
 関数 f は,引数 data で受け取った集計結果を基に計算した理論度数を返す。引数と戻り値は二次元配列で,その行が表の行,その列が表の列に対応する。

表1 集計結果の例
病気Xにかからなかった病気Xにかかった
予防接種を受けた82人6人
予防接種を受けていない58人8人

表2 表1を基に計算した理論度数
病気Xにかからなかった病気Xにかかった
予防接種を受けた[ a ]人
予防接種を受けていない[ b ]人
注記 網掛けの部分は表示していない。

プログラム
実数型二次元配列: 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

解答群
ab
4433
588
707
752
806
808
826
答え設問1 オ 
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
解説
ローコード開発ツールに関する説明を選ぶ問題です。「ローコード開発」(low-code development)とは,あらかじめ用意された部品やテンプレート(雛形)をGUI操作で組み合わせることを基本としながらも,必要に応じて一部のソースコードを記述できる開発手法です。正解は選択肢「ア」です。

「イ」はソースコードを一切書かない開発方式であり,これは「ノーコード開発」の説明にあたります。「ウ」は定型的な枠組みを参照しながら独自のコードを記述する方式で,従来型のフレームワークを用いた開発に近く,ローコードの特徴であるGUI操作の要素が抜けています。「エ」は業務の操作手順を自動化ツールに記録して代行させる説明であり,これはRPARobotic Process Automation)の説明にあたります。ローコードノーコードの違いを問う出題は頻出ですので,「一部コードを書けるかどうか」で区別できるようにしておきましょう。
問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にまとめた。

表1 Bさんの評価結果(抜粋)
項番情報セキュリティ管理策評価結果
1(事業継続のためのICTの備え)事業継続の目的及びICT継続の要求事項に基づいて,ICTの備えを計画し,実施し,維持し,試験しなければならない。実施している

Bさんは,移行審査前の内部監査で,内部監査室から表1の項番1に関するファイルサーバの運用について何点か質問を受け,表2のとおり回答した。

表2 内部監査室へのBさんの回答(抜粋)
項番Bさんの回答
1例えば,金曜日の正午に障害が発生した場合, 少なくとも [ a1 ] の時点のデータは復元しなければならない。
2例えば,木曜日の正午に障害が発生し,ファイルサーバの全データが消失したとすると,バックアップからのリストアには [ a2 ] 時間掛かると予想される。
3ICT継続の計画書は, [ a3 ] が承認している。

設問 表2 中の [ a1 ] ~ [ a3 ] に入れる字句の適切な組合せを,aに関する解答群の中から選べ。

aに関する解答群
a1a2a3
月曜日の正午4.25CISO
月曜日の正午4.25情報システム部の担当者
月曜日の正午4.25内部監査室長
月曜日の正午4.50CISO
月曜日の正午4.50情報システム部の担当者
火曜日の正午4.25情報システム部の担当者
火曜日の正午4.25内部監査室長
火曜日の正午4.50CISO
火曜日の正午4.50情報システム部の担当者
火曜日の正午4.50内部監査室長
答え設問1 (a)ク 
分野 : テクノロジ系 › 技術要素 › セキュリティ › 情報セキュリティ管理
解説
SQL文の書き換えに関する問題です。元のSQL文は「仕入先IDがM002またはM004である商品を取得する」という条件をIN演算子で表しています。これと同じ結果を得るには,OR演算子を使って「仕入先ID=M002 OR 仕入先ID=M004」と書くことができ,正解は選択肢「ウ」です。

「ア」はANDで繋いでいるため,一つの行が同時にM002でもM004でもあることは有り得ず,結果が常に空になってしまいます。「イ」のINTERSECTは両方の条件を同時に満たす行の共通部分を求める演算であり,これもM002かつM004という条件になってしまうため,結果は空になります。「エ」のBETWEENはM002からM004までの範囲内の値をすべて含む条件になるため,M003なども含まれてしまい,元のSQL文とは異なる結果になります。IN演算子OR演算子の集合と同じ意味を持つという基本を押さえておくと解きやすい問題です。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる