資格道場
学習状況 お問い合わせ ログイン 無料登録
📄 本試験 公開問題

基本情報技術者試験 2023年度(令和5年度) 科目B 公開問題

6問(本試験20問中の公開分) ・ 目安 正答率60%

基本情報技術者の2023年度(令和5年度) 科目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ページ目) 擬似言語の記述形式(科目Bの全問で共通。原本の2〜3ページ目) 擬似言語の記述形式(科目Bの全問で共通。原本の2〜3ページ目)
問 1
次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 関数findPrimeNumbers は,引数で与えられた整数以下の,全ての素数だけを格納した配列を返す関数である。ここで,引数に与える整数は2 以上である。 〔プログラム〕 ○整数型の配列: findPrimeNumbers(整数型: maxNum)  整数型の配列: pnList ← {} // 要素数0の配列  整数型: i, j  論理型: divideFlag  for (i を 2 から [a] まで 1 ずつ増やす)   divideFlag ← true   /* iの正の平方根の整数部分が2未満のときは,繰返し処理を実行しない */   for (j を 2 から iの正の平方根の整数部分 まで 1 ずつ増やす) // α    if ([b])     divideFlag ← false     αの行から始まる繰返し処理を終了する    endif   endfor   if (divideFlag が true と等しい)    pnListの末尾 に iの値 を追加する   endif  endfor  return pnList
正解:ア
[a]は,どこまで調べるかである。返すのは「引数で与えられた整数以下の素数」なので,i は maxNum まで回せばよい。maxNum + 1 まで回すと引数より大きい数まで調べてしまい,その数が素数のときに余分に入る(maxNum が4 なら5 が入ってしまう)。 [b]は,i が素数でないと判定する条件である。i が j で割り切れれば i は素数ではないので,「i ÷ j の余り が 0 と等しい」が正しい。よってア。 「i ÷ j の商 が 1 と等しくない」は割り切れるかどうかとは別のことを見ている。例えば i=5,j=2 は割り切れないのに商は2 で1 と等しくないので,素数の5 を除いてしまう。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問1
報告ありがとうございました。内容を確認します。
問 2
次の記述中の □ に入れる正しい答えを,解答群の中から選べ。 次のプログラムにおいて,手続proc2 を呼び出すと,□ の順に出力される。 〔プログラム〕 ○proc1()  "A" を出力する  proc3() ○proc2()  proc3()  "B" を出力する  proc1() ○proc3()  "C" を出力する
正解:ク
proc2 は,まず proc3 を呼ぶので“C”が出る。次に自分で“B”を出す。最後に proc1 を呼ぶので“A”が出て,proc1 の中でさらに proc3 が呼ばれて“C”が出る。したがって“C”,“B”,“A”,“C”の順である。よってク。 キの“C”,“B”,“A”は,proc1 の最後の proc3 を数え落としたときの答えである。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問2
報告ありがとうございました。内容を確認します。
問 3
次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 次の手続sort は,大域の整数型の配列data の,引数first で与えられた要素番号から引数last で与えられた要素番号までの要素を昇順に整列する。ここで,first < last とする。手続sort をsort(1, 5)として呼び出すと,/*** α ***/の行を最初に実行したときの出力は“□”となる。 〔プログラム〕 大域: 整数型の配列: data ← {2, 1, 3, 5, 4} ○sort(整数型: first, 整数型: last)  整数型: pivot, i, j  pivot ← data[(first + last) ÷ 2 の商]  i ← first  j ← last  while (true)   while (data[i] < pivot)    i ← i + 1   endwhile   while (pivot < data[j])    j ← j - 1   endwhile   if (i ≧ j)    繰返し処理を終了する   endif   data[i]とdata[j]の値を入れ替える   i ← i + 1   j ← j - 1  endwhile  dataの全要素の値を要素番号の順に空白区切りで出力する /*** α ***/  if (first < i - 1)   sort(first, i - 1)  endif  if (j + 1 < last)   sort(j + 1, last)  endif
正解:エ
data は{2, 1, 3, 5, 4}で,sort(1, 5) では pivot ← data[(1 + 5) ÷ 2 の商] = data[3] = 3,i ← 1,j ← 5 から始まる。 外側の while の1周目を追う。data[i] < pivot の間 i を進めるので,data[1]=2,data[2]=1 を越えて i = 3 で止まる(data[3]=3 は3 より小さくない)。次に pivot < data[j] の間 j を戻すので,data[5]=4,data[4]=5 を越えて j = 3 で止まる。ここで i ≧ j(3 ≧ 3)が成り立つので,値の入替えを一度もしないまま繰返しを終える。 α の行はこの直後にあり,再帰呼出しはさらに後ろなので,最初に実行される α はこの呼出しのものである。data は初期値のままなので,出力は 2 1 3 5 4 となる。よってエ。 アの 1 2 3 4 5 は整列がすべて終わったあとの並びで,α が最初に実行される時点ではまだそこまで進んでいない。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問3
報告ありがとうございました。内容を確認します。
問 4
次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 関数add は,引数で指定された正の整数value を大域の整数型の配列hashArray に格納する。格納できた場合はtrue を返し,格納できなかった場合はfalse を返す。ここで,整数value をhashArray のどの要素に格納すべきかを,関数calcHash1 及びcalcHash2 を利用して決める。 手続test は,関数add を呼び出して,hashArray に正の整数を格納する。手続test の処理が終了した直後のhashArray の内容は,□ である。 〔プログラム〕 大域: 整数型の配列: hashArray ○論理型: add(整数型: value)  整数型: i ← calcHash1(value)  if (hashArray[i] = -1)   hashArray[i] ← value   return true  else   i ← calcHash2(value)   if (hashArray[i] = -1)    hashArray[i] ← value    return true   endif  endif  return false ○整数型: calcHash1(整数型: value)  return (value mod hashArrayの要素数) + 1 ○整数型: calcHash2(整数型: value)  return ((value + 3) mod hashArrayの要素数) + 1 ○test()  hashArray ← {5個の -1}  add(3)  add(18)  add(11)
正解:エ
hashArray は要素数5 で,最初は全ての要素が -1(空き)である。calcHash1(value) = (value mod 5) + 1,calcHash2(value) = ((value + 3) mod 5) + 1 になる。 add(3):calcHash1(3) = (3 mod 5) + 1 = 4。hashArray[4] は空きなので3 を入れる。→ {-1, -1, -1, 3, -1} add(18):calcHash1(18) = (18 mod 5) + 1 = 3 + 1 = 4。ここは3 で埋まっているので calcHash2(18) = ((18 + 3) mod 5) + 1 = 1 + 1 = 2。hashArray[2] は空きなので18 を入れる。→ {-1, 18, -1, 3, -1} add(11):calcHash1(11) = (11 mod 5) + 1 = 1 + 1 = 2。ここは18 で埋まっているので calcHash2(11) = ((11 + 3) mod 5) + 1 = 4 + 1 = 5。hashArray[5] は空きなので11 を入れる。→ {-1, 18, -1, 3, 11} よってエ。アは3 と18 の置き場所を入れ替えたもので,calcHash1(3) を2 と読み違えると出てくる。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問4
報告ありがとうございました。内容を確認します。
問 5
次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数calcCosineSimilarity は,いずれも要素数がn(n≧1)である実数型の配列vector1 とvector2 を受け取り,二つの配列のコサイン類似度を返す。配列vector1 が{a1, a2, …, an},配列vector2 が{b1, b2, …, bn}のとき,コサイン類似度は次の数式で計算される。ここで,配列vector1 と配列vector2 のいずれも,全ての要素に0 が格納されていることはないものとする。 〔プログラム〕 ○実数型: calcCosineSimilarity(実数型の配列: vector1,                実数型の配列: vector2)  実数型: similarity, numerator, denominator, temp ← 0  整数型: i  numerator ← 0  for (i を 1 から vector1の要素数 まで 1 ずつ増やす)   numerator ← numerator + [a]  endfor  for (i を 1 から vector1の要素数 まで 1 ずつ増やす)   temp ← temp + vector1[i]の2乗  endfor  denominator ← tempの正の平方根  temp ← 0  for (i を 1 から vector2の要素数 まで 1 ずつ増やす)   temp ← temp + vector2[i]の2乗  endfor  denominator ← [b]  similarity ← numerator ÷ denominator  return similarity
問5の図
正解:エ
式の分子は a1b1 + a2b2 + … + anbn,すなわち対応する要素どうしの積の総和である。numerator にはこれを積み上げるので,[a]は vector1[i] × vector2[i] である。「(vector1[i] × vector2[i])の正の平方根」では,積そのものではなく積の平方根を足すことになり,式と合わない。 式の分母は,vector1 の各要素の2乗和の平方根と,vector2 の各要素の2乗和の平方根との「積」である。[b]の直前で denominator には前者が入っており,temp には vector2 の2乗和が入っている。したがって [b]は denominator × (tempの正の平方根) である。よってエ。 + にすると分母が和になってしまい,tempの正の平方根 だけにすると vector1 側が消えてしまう。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問5
報告ありがとうございました。内容を確認します。
問 6
A 社は,放送会社や運輸会社向けに広告制作ビジネスを展開している。A 社は,人事業務の効率化を図るべく,人事業務の委託を検討することにした。A 社が委託する業務(以下,B 業務という)を図1 に示す。 ・採用予定者から郵送されてくる入社時の誓約書,前職の源泉徴収票などの書類をPDF ファイルに変換し,ファイルサーバに格納する。 (省略) 図1 B 業務 委託先候補のC 社は,B 業務について,次のようにA 社に提案した。 ・B 業務だけに従事する専任の従業員を割り当てる。 ・B 業務では,図2 の複合機のスキャン機能を使用する。 ・スキャン機能を使用する際は,従業員ごとに付与した利用者ID とパスワードをパネルに入力する。 ・スキャンしたデータをPDF ファイルに変換する。 ・PDF ファイルを従業員ごとに異なる鍵で暗号化して,電子メールに添付する。 ・スキャンを実行した本人宛てに電子メールを送信する。 ・PDF ファイルが大きい場合は,PDF ファイルを添付する代わりに,自社の社内ネットワーク上に設置したサーバ(以下,B サーバという)1)に自動的に保存し,保存先のURL を電子メールの本文に記載して送信する。 注1) B サーバにアクセスする際は,従業員ごとの利用者ID とパスワードが必要になる。 図2 複合機のスキャン機能(抜粋) A 社は,C 社と業務委託契約を締結する前に,秘密保持契約を締結した。その後,C 社に質問表を送付し,回答を受けて,業務委託での情報セキュリティリスクの評価を実施した。その結果,図3 の発見があった。 ・複合機のスキャン機能では,電子メールの差出人アドレス,件名,本文及び添付ファイル名を初期設定1)の状態で使用しており,誰がスキャンを実行しても同じである。 ・複合機のスキャン機能の初期設定情報はベンダーのWeb サイトで公開されており,誰でも閲覧できる。 注1) 複合機の初期設定はC 社の情報システム部だけが変更可能である。 図3 発見事項 そこで,A 社では,初期設定の状態のままではA 社にとって情報セキュリティリスクがあり,初期設定から変更するという対策が必要であると評価した。 設問 対策が必要であるとA 社が評価した情報セキュリティリスクはどれか。解答群のうち,最も適切なものを選べ。
正解:ア
図3 の発見は二つとも,「複合機が出す電子メールは誰が実行しても同じ見た目で,しかもその見た目は誰でも調べられる」ことを指している。つまり攻撃者は,複合機からの通知にそっくりな電子メールを作れる。B 業務の従業員はふだん同じ形の通知を受け取っているので,偽物と気付かずに本文中のURL をクリックし,フィッシングサイトへ誘導されてしまう。その結果,採用予定者の個人情報が漏えいする。この筋道は初期設定を変えることで断てるので,A 社が対策の必要を認めたリスクはアである。 イは業務が遅れるという話で,初期設定を変えても防げるとは限らず,図3 の発見とも結び付かない。 ウは,添付するPDF ファイルは従業員ごとに異なる鍵で暗号化されている(図2)ので,盗聴しても中身は読めない。身代金の要求も初期設定とは関係がない。 エは,B サーバへアクセスするには従業員ごとの利用者ID とパスワードが必要(図2 の注1))なので,URL を知っただけではアクセスできない。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問6
報告ありがとうございました。内容を確認します。

この回の最終更新:

掲載の過去問題は 独立行政法人 情報処理推進機構(IPA) の著作物です。同機関が公表する試験問題を、教育目的での利用に許諾・使用料を要しないとする同機関の方針に従い、出典を明記して掲載しています。無断転載を許可するものではありません。解説は当サイトが独自に作成したものです。