基本情報技術者「アルゴリズム・プログラミング」の一問一答
📖 基本情報技術者「アルゴリズム・プログラミング」の全135問と解説(一覧)
基本情報技術者のアルゴリズム・プログラミングに関する一問一答(全135問)の正解と解説の一覧です。上の一問一答で実際に解いてから、ここで復習・確認できます。
-
問1.アルゴリズムは、問題を解決するための手順だが明確に定義する必要はない。
正解:×(誤り)
解説:誤り。アルゴリズムは「明確に定義された手順」(曖昧では実装不可)。
-
問2.フローチャートは、テキストでアルゴリズムを記述する手法である。
正解:×(誤り)
解説:誤り。フローチャートは「図式化(フロー図)」(テキスト記述は擬似言語等)。
-
問3.配列は、異なる型のデータを格納するデータ構造である。
正解:×(誤り)
解説:誤り。配列は「同じ型のデータを連続領域に格納」(異なる型は不可)。
-
問4.連結リストでは、各要素は配列のように連続したメモリ領域に格納される。
正解:×(誤り)
解説:誤り。連結リストは「ポインタで連結」(連続メモリは配列)。
-
問5.スタックは、最初に入れたデータを最初に取り出すFIFO方式のデータ構造である。
正解:×(誤り)
解説:誤り。スタックはLIFO(後入れ先出し)。FIFO(先入れ先出し)はキューです。
-
問6.キューは、最後に入れたデータを最初に取り出すLIFO方式である。
正解:×(誤り)
解説:誤り。キューは「先入れ先出し(FIFO)」(LIFOはスタック)。
-
問7.二分探索木では、左の子ノードの値は親より大きく、右の子ノードの値は親より小さい。
正解:×(誤り)
解説:誤り。二分探索木は「左子<親、右子>親」(記述が逆)。
-
問8.ハッシュ法では、線形探索によりデータの格納位置を見つける。
正解:×(誤り)
解説:誤り。ハッシュ法は「ハッシュ関数で位置決定」(線形探索は別手法)。
-
問9.線形探索の平均計算量はO(log n)である。
正解:×(誤り)
解説:誤り。線形探索は「O(n)」(O(log n)は二分探索)。
-
問10.モジュール分割では、モジュール強度(結束性)を弱く、モジュール間の結合度を強くするほど、モジュールの独立性が高くなる。
正解:×(誤り)
解説:誤り。独立性を高めるには、モジュール強度を強く、モジュール間の結合度を弱くする(シラバス中分類12 設計 ②分割基準)。
-
問11.二分探索の計算量はO(n)である。
正解:×(誤り)
解説:誤り。二分探索は、整列済みの配列で探索区間の中央の要素と探索値を比べ、探索値が小さければ前半、そうでなければ後半へと、区間を半分ずつ絞り込んでいく探索法である。1回の比較で候補が半分になるので、比較回数は要素数nの対数に比例し、計算量はO(log n)となる。O(n)は、配列やリストを先頭から1件ずつ調べる線形探索の計算量(見つかる場合の平均比較回数はn/2回)で、二分探索のものではない。
根拠: NIST Dictionary of Algorithms and Data Structures「binary search」 Definition/Note(Run time is O(ln n)) / NIST Dictionary of Algorithms and Data Structures「linear search」 Definition/Note(Average run time is Θ(n/2)) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2. アルゴリズム(2)代表的なアルゴリズム ① 整列・併合・探索のアルゴリズム(用語例)p.7-8(2分探索法・線形探索法)
-
問12.バブルソートは、隣り合う要素の比較と交換を、先頭から末尾まで1回通して行うだけで整列が完了するアルゴリズムである。
正解:×(誤り)
解説:誤り。バブルソートは、隣り合う2つの要素を順に比べて順序が逆なら交換する走査(パス)を、交換が1回も起きなくなるまで繰り返す整列法である。1回のパスで最終位置に確定するのは少なくとも1つの要素にすぎないため、一般には1回の走査だけでは整列は完了しない。計算量は任意のデータでO(n²)で、はじめからほぼ整列されているデータではnに比例する手間に近づく。
根拠: NIST Dictionary of Algorithms and Data Structures「bubble sort」 Definition/Note(Complexity is O(n2)…/at least one item is moved into its final place for each pass) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2. アルゴリズム(2)代表的なアルゴリズム ① 整列・併合・探索のアルゴリズム(用語例)p.7-8(バブルソート)
-
問13.クイックソートの平均計算量はO(n²)、最悪はO(n log n)である。
正解:×(誤り)
解説:誤り。クイックは平均「O(n log n)」、最悪「O(n²)」(記述が逆)。
-
問14.マージソートの最悪計算量はO(n²)である。
正解:×(誤り)
解説:誤り。マージソートは平均・最悪ともに「O(n log n)」(O(n²)はバブル等)。
-
問15.再帰処理は、終了条件がなくても永遠に実行される設計である。
正解:×(誤り)
解説:誤り。再帰には「必ず終了条件(基底条件)が必要」(無限ループは設計ミス)。
-
問16.コンパイラは、ソースコードを1行ずつ解釈実行する方式である。
正解:×(誤り)
解説:誤り。コンパイラは「一括翻訳」(1行ずつ解釈はインタプリタ)。
-
問17.インタプリタは、ソースコードを一括して機械語に翻訳する方式である。
正解:×(誤り)
解説:誤り。インタプリタは「1行ずつ解釈実行」(一括翻訳はコンパイラ)。
-
問18.オブジェクト指向の三大要素は、関数化・順次・分岐である。
正解:×(誤り)
解説:誤り。OOP3要素は「カプセル化・継承・ポリモーフィズム」(プログラミング基本構造とは別)。
-
問19.カプセル化とは、データを直接外部から自由にアクセスさせる仕組みである。
正解:×(誤り)
解説:誤り。カプセル化は「外部からの直接アクセスを制限」(自由アクセスはカプセル化と逆)。
-
問20.継承は、新しいクラスが既存クラスの機能をすべて削除する仕組みである。
正解:×(誤り)
解説:誤り。継承は「既存クラスの機能を引き継ぐ」(削除ではない)。
-
問21.ポリモーフィズムは、異なる名前のメソッドが同じ動作をする性質である。
正解:×(誤り)
解説:誤り。ポリモーフィズムは「同じ名前のメソッドが異なるクラスで異なる動作」(記述が逆)。
-
問22.UMLのクラス図で、継承関係は破線の矢印(→)で表す。
正解:×(誤り)
解説:誤り。UMLの継承は「実線の矢印(▷)」(破線は依存等)。
-
問23.Singletonパターンは、複数のインスタンスを許容するパターンである。
正解:×(誤り)
解説:誤り。Singletonは「インスタンスが1つしか存在しないことを保証」(複数許容ではない)。
-
問24.構造化プログラミングの基本構造は、関数・モジュール・クラスの3つである。
正解:×(誤り)
解説:誤り。構造化プログラミング3要素は「順次・選択・繰返し」(関数・クラスはOOP)。
-
問25.ホワイトボックステストは、内部構造を意識せず仕様に基づくテストである。
正解:×(誤り)
解説:誤り。ホワイトボックスは「内部構造に基づく」、仕様ベースはブラックボックス。
-
問26.ブラックボックステストは、プログラムの内部構造に基づくテストである。
正解:×(誤り)
解説:誤り。ブラックボックスは「内部構造を意識せず仕様ベース」(記述が逆)。
-
問27.単体テスト(ユニットテスト)は、結合テストより後に行う。
正解:×(誤り)
解説:誤り。テストは単体→結合→システム→受入の順で進めます。
-
問28.スタブとは、テスト対象が呼び出される上位モジュールの代替モジュールである。
正解:×(誤り)
解説:誤り。スタブは「下位モジュールの代替」(上位代替はドライバ)。
-
問29.疑似言語は、特定のプログラミング言語の文法に厳密に従う必要がある。
正解:×(誤り)
解説:誤り。疑似言語は「特定言語の文法に依存しない」(汎用記法)。
-
問30.Pythonは動的型付けのインタプリタ型プログラミング言語である。
正解:○(正しい)
解説:正しい。Pythonは動的な型付けのインタープリタ型言語で、プログラムはPythonインタープリタで実行する。洗練された文法とこれらの性質から、スクリプトを書いたり素早くアプリケーションを開発したりするのに理想的な言語とされている(Python 公式チュートリアル)。シラバスでもスクリプト言語の用語例に挙がっている。
根拠: Python チュートリアル(Python 3 公式ドキュメント日本語版) 冒頭(Tip の直後)の本文第1段落/目次 2.「Python インタプリタを使う」 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/4. プログラム言語(1)④ スクリプト言語(用語例)p.9-10
-
問31.JavaScriptは主にWebブラウザ上で動作するクライアントサイドスクリプト言語として始まった。
正解:○(正しい)
解説:正しい。JavaScriptは、ECMAScriptの元になった技術の一つである。この言語は Netscape 社の Brendan Eich が考案し、同社のWebブラウザ Navigator 2.0 で初めて登場した(ECMA-262 の序文)。いまもWebブラウザに組み込まれた言語として最もよく知られる一方、サーバや組込みの用途にも広く使われている。
根拠: ECMA-262 ECMAScript 2025 Language Specification Introduction(第1〜2段落) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/4. プログラム言語(1)④ スクリプト言語(用語例 ECMAScript)p.9-10
-
問32.アジャイル開発におけるスクラムでは、開発期間を「スプリント」と呼ばれる一定期間に区切って反復開発を行う。
正解:○(正しい)
解説:正しい。スクラムでは、開発期間を「スプリント」という1か月以内の決まった長さに区切り、前のスプリントが終わるとすぐに次のスプリントを始める(スクラムガイド 2020年版)。長さを決めておくのは一貫性を保つためである。スプリントプランニング、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブを含め、プロダクトゴールの達成に必要な作業はすべてスプリントの中で行う。
根拠: スクラムガイド(2020年11月版・日本語版) スクラムイベント「スプリント」 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類13 ソフトウェア開発管理技術/1.(1)② アジャイル(c)スクラムの特徴(用語例 スプリント)p.58
-
問33.DevOpsは、開発(Development)と運用(Operations)を連携・統合する考え方・実践である。
正解:○(正しい)
解説:正しい。DevOpsは、開発チームと運用チームが連携し、素早く柔軟にソフトウェア開発を進める考え方と実践である(シラバス)。その特徴として、継続的インテグレーション(CI)、継続的デリバリー(CD)、継続的デプロイ、SRE(サイト信頼性エンジニアリング)、DevSecOps などが挙げられる。CI/CD は DevOps を支える実践の例で、DevOps そのものは開発と運用の連携という考え方と実践を指す。
根拠: IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類13 ソフトウェア開発管理技術/1.(1)③ DevOps(本文・用語例)p.58
-
問34.バージョン管理システムのGitは、分散型バージョン管理システムである。
正解:○(正しい)
解説:Gitは分散型VCSで、各ユーザがローカルリポジトリを持ちます。
-
問35.生成AIの活用において、プロンプトエンジニアリングとは生成AIから望ましい出力を得るための指示(プロンプト)を設計する技術である。
正解:○(正しい)
解説:正しい。プロンプトとは、生成AIへの質問や作業指示として入力するもの(個人情報保護委員会)。プロンプトエンジニアリングは、モデルへの効果的な指示を書き、要件を満たす内容を安定して生成させるための工程である。モデルの出力は同じ入力でも毎回同じになるとは限らないので、望む出力を得るための指示の工夫が要る。シラバスでも用語例に挙がっている。
根拠: OpenAI API Documentation「Prompt engineering」 冒頭「Prompt engineering」の定義文 / 個人情報保護委員会「生成 AI サービスの利用に関する注意喚起等」(令和5年6月2日・別添1) 前文第1段落(生成 AI サービスの説明) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類1 基礎理論/3.(8)④ 自然言語処理,音声・画像・動画の認識・合成・生成などへの応用(用語例 プロンプトエンジニアリング)p.5
-
問36.長さnの配列に対する線形探索の平均計算量はどれか。
- ア.O(n)
- イ.O(log n)
- ウ.O(1)
- エ.O(n²)
正解:ア.O(n)
解説:線形探索は、配列やリストの要素を先頭から1つずつ調べていく探索法である。目的の値が見つかる場合の平均比較回数はn/2回で、要素数nに比例するので計算量はO(n)となる。O(log n)は整列済み配列で探索区間を半分ずつ絞り込む二分探索の計算量、O(1)はハッシュ表で表が十分に大きい場合の定数時間の計算量、O(n²)は選択ソートなどの単純な整列法の計算量で、いずれも線形探索のものではない。
根拠: NIST Dictionary of Algorithms and Data Structures「linear search」 Definition/Note(Average run time is Θ(n/2)) / NIST Dictionary of Algorithms and Data Structures「binary search」 Definition/Note(Run time is O(ln n)) / NIST Dictionary of Algorithms and Data Structures「hash table」 Note(may be constant (Θ(1)) if the table is big enough) / NIST Dictionary of Algorithms and Data Structures「selection sort」 Definition(The run time is Θ(n²))
-
問37.ソートアルゴリズムのうち、平均計算量がO(n²)でないものはどれか。
- ア.バブルソート
- イ.マージソート
- ウ.挿入ソート
- エ.選択ソート
正解:イ.マージソート
解説:マージソートは平均O(n log n)。他3つはO(n²)です。
-
問38.スタックに1,2,3の順にデータをpushした後、順にpopするとどの順序で取り出されるか。
- ア.1,2,3
- イ.2,1,3
- ウ.3,2,1
- エ.3,1,2
正解:ウ.3,2,1
解説:スタックはLIFOのため逆順3,2,1。
-
問39.キューに1,2,3の順にenqueueした後、順にdequeueするとどの順序で取り出されるか。
- ア.3,1,2
- イ.3,2,1
- ウ.2,1,3
- エ.1,2,3
正解:エ.1,2,3
解説:キューはFIFOのため投入順1,2,3。
-
問40.要素数1,024の整列済配列に対する二分探索の最大比較回数として最も近いものはどれか。
- ア.10
- イ.5
- ウ.100
- エ.1024
正解:ア.10
解説:二分探索の最大比較回数は⌊log2 N⌋+1回で、N=1,024ならlog2 1,024=10より最大11回になる。選択肢の中で最も近いのは10で、5・100・1,024は桁が違う。
-
問41.次のうち、安定ソートでないものはどれか。
- ア.バブルソート
- イ.クイックソート
- ウ.挿入ソート
- エ.マージソート
正解:イ.クイックソート
解説:安定ソートとは、同じキーを持つ要素の入力時の並び順が、整列後も必ず保たれる整列法である。クイックソートは、基準値(ピボット)を選び、残りの要素を基準値より大きいものと小さいものに分けて再帰的に整列する方法で、ヒープソートとともに安定ではない整列法とされる。一方、バブルソートは安定ソートに分類され、挿入ソートなどの単純な整列法やマージソートも安定にしやすい。
根拠: NIST Dictionary of Algorithms and Data Structures「stable」 Definition / NIST Dictionary of Algorithms and Data Structures「quicksort」 Definition / NIST Dictionary of Algorithms and Data Structures「bubble sort」 Generalization(in-place sort, stable sort) / 青山学院大学 Martin J. Dürst「Data Structures and Algorithms 第7回 Quicksort, Average Time Complexity(クイックソート、平均計算量)」2015年10月29日 講義資料 Stable Sorting(The simple sorting algorithms and merge sort can easily be made stable/Heap sort and quicksort are not stable)
-
問42.オブジェクト指向で、同一メソッド名でもオブジェクトの型により異なる動作をする性質を何と呼ぶか。
- ア.カプセル化
- イ.継承
- ウ.ポリモーフィズム
- エ.抽象化
正解:ウ.ポリモーフィズム
解説:ポリモーフィズム(多態性)は、同じ名前のメソッドを呼び出しても、オブジェクトの実際の型に応じて異なる処理が実行される性質である。サブクラスが親クラスのメソッドを上書き(オーバーライド)して独自の振る舞いを定義し、実行時には変数の型ではなく参照先のオブジェクトに合ったメソッドが呼ばれる。カプセル化は内部の状態を隠してメソッド経由でだけ操作させること、継承は既存クラスの状態と振る舞いを引き継ぐことである。抽象化も、同名メソッドの動作が型で変わる性質を指す語ではない。
根拠: The Java Tutorials「Polymorphism」(Oracle) 本文(Subclasses of a class can define their own unique behaviors…/The two subclasses override the printDescription method/virtual method invocation) / The Java Tutorials「What Is an Object?」(Oracle) data encapsulation の説明 / The Java Tutorials「What Is Inheritance?」(Oracle) 本文第1段落 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/3.(1)⑦ オブジェクト指向プログラミング(用語例 オーバーライド)p.9
-
問43.UMLで、クラス間の「is-a」関係を表す記法はどれか。
- ア.関連
- イ.集約
- ウ.依存
- エ.汎化(継承)
正解:エ.汎化(継承)
解説:UMLで is-a関係(継承関係)は汎化で表す(白抜き三角形矢印)。is-a関係はサブクラス→スーパークラスの汎化を意味する。has-a は集約・コンポジション。
-
問44.ソフトウェア開発手法のうち、要件→設計→実装→テストを順次進める手法はどれか。
- ア.ウォーターフォール
- イ.アジャイル
- ウ.スパイラル
- エ.プロトタイピング
正解:ア.ウォーターフォール
解説:ウォーターフォール型開発は、要件定義・設計・実装・テストなどの工程に分け、1つの工程を終えてから次の工程に進み、前の工程には戻らない開発手法で、要求が変化しないことを前提にしている(IPA)。プロトタイプ・スパイラル・アジャイルは、要求が日々変化することを前提にした非ウォーターフォール型の開発の例で、工程を一方向に順に進める手法とは別の型である。
根拠: IPA/SEC「非ウォーターフォール型開発WG活動報告書」(概要資料)平成23年3月31日 p.4(PDF 5ページ目)「アジャイル開発とは何か?」 / アジャイル開発講座(厚生労働省掲載資料) p.4 スライド「アジャイル開発の概要(特徴)1」の解説文 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類13 ソフトウェア開発管理技術/1.(1)① ソフトウェア開発モデル(用語例)p.58
-
問45.テスト技法のうち、入力値を代表的な範囲に分けて、各範囲から1つずつ代表値を選ぶ手法はどれか。
- ア.境界値分析
- イ.同値分割
- ウ.原因結果グラフ
- エ.エラー推測
正解:イ.同値分割
解説:同値分割法は、テスト対象が同じように処理すると想定される値の集まり(同値パーティション)に入力データを分け、各パーティションから値を1つ選んでテストする技法で、1つの値で見つかる欠陥は同じパーティションの他の値でも見つかるはずだという考えに基づく。境界値分析はパーティションの最小値・最大値を確かめる技法、エラー推測は担当者の知識から誤りを予測する技法、原因結果グラフは入力(原因)と関連する出力(結果)を図式表現してテストケースの設計に使うもので、いずれも代表値を選ぶ技法ではない。
根拠: JSTQB テスト技術者資格制度 Foundation Level シラバス Version 2023V4.0.J02 4.2.1 同値分割法/4.2.2 境界値分析/4.4.1 エラー推測(p.39-40, 44) / ISTQB Glossary(日本語版)「原因結果グラフ(cause-effect graph)」 用語「原因結果グラフ」の定義 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類12 システム開発技術/3. 実装・構築(8)④ テストの手法(用語例 限界値分析法,同値分析法,原因結果グラフ法)p.53
-
問46.境界値分析テストで、条件「1≦x≦100」に対してテストすべき境界値として適切でないものはどれか。
- ア.0
- イ.1
- ウ.50
- エ.101
正解:ウ.50
解説:50は代表値(同値分割)。境界は0,1,100,101です。
-
問47.アジャイル開発の価値観として、アジャイルソフトウェア開発宣言で重視されているものはどれか。
- ア.包括的なドキュメント
- イ.契約交渉
- ウ.計画に従うこと
- エ.変化への対応
正解:エ.変化への対応
解説:アジャイルソフトウェア開発宣言は「プロセスやツールよりも個人と対話を、包括的なドキュメントよりも動くソフトウェアを、契約交渉よりも顧客との協調を、計画に従うことよりも変化への対応を」価値とすると述べ、前者にも価値はあるが後者により価値をおくとしている。選択肢のうち、より価値をおく側に挙げられているのは変化への対応だけである。包括的なドキュメント・契約交渉・計画に従うことは、価値は認めつつも比べて重視度を下げる側に挙げられた項目である。
根拠: アジャイルソフトウェア開発宣言(日本語訳) 本文 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類13 ソフトウェア開発管理技術/1.(1)②(a)アジャイルの概要(用語例 アジャイルソフトウェア開発宣言)p.58
-
問48.次のうち、バージョン管理システムの分散型(DVCS)に該当するものはどれか。
- ア.Git
- イ.Subversion
- ウ.CVS
- エ.VSS
正解:ア.Git
解説:Git、Mercurialが分散型。CVS/Subversion/VSSは集中型です。
-
問49.フェイルセーフの考え方として最も適切なものはどれか。
- ア.故障そのものが起きにくいように、信頼性の高い部品を使う
- イ.障害発生時に、システムを安全な状態に保つ
- ウ.障害発生時に、機能を縮退させながら処理を続ける
- エ.利用者が誤った操作をしても、システムが誤動作しないようにする
正解:イ.障害発生時に、システムを安全な状態に保つ
解説:フェールセーフは、故障したときに安全を保てるシステムの性質で、障害時にシステムを安全な状態に保つことがその考え方である(JIS Z 8115)。何を安全とするかは用途に合わせて決めることが望ましい。機能を縮退させながら処理を続けるのは、優先順位を付けて機能を徐々に止めるフェールソフト、故障が起きにくい部品を使うのはフォールトアボイダンス、誤操作でも誤動作しないようにするのはフールプルーフの考え方である。
根拠: JIS Z 8115:2019 ディペンダビリティ(総合信頼性)用語 192-10 信頼性設計:用語「フェールセーフ」(定義・注記1)、「フェールソフト」(定義・注記1)、「フォールト排除,フォールトアボイダンス」(定義)、192J-10:「フールプルーフ」(定義) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類2 コンピュータシステム/中分類4 システム構成要素/1.(7)信頼性設計(用語例 フェールセーフ,フェールソフト,フールプルーフ,フォールトアボイダンス)p.17
-
問50.生成AIを業務で活用する際の留意点として、最も適切なものはどれか。
- ア.出力の誤りを防ぐため、同じ質問を複数回入力し、最も多く出た回答をそのまま採用する
- イ.本人の同意を得ていない個人データを含むプロンプトでも、利用目的の範囲内と確認できれば、機械学習に使われるかは確認しなくてよい
- ウ.誤った情報が出力されることがあるため、出力を人間が確認してから利用する
- エ.出力が自然で流暢な文章であれば、内容は事実に基づいていると判断してよい
正解:ウ.誤った情報が出力されることがあるため、出力を人間が確認してから利用する
解説:AIの出力には、誤った情報・偏った情報・古い情報が含まれることがあり(ハルシネーションなど)、出力を人間が確認してから使うことが大切である(シラバス)。同じ質問を繰り返して多く出た回答を採るだけでは、人間による確認の代わりにならない。応答は確率的な相関関係に基づくので、自然な文章でも不正確なことがある。事業者が本人の同意なく個人データを入力するときは、利用目的の範囲内かに加え、機械学習に使われないことなども確かめる必要がある。
根拠: IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類8 経営戦略/中分類21 ビジネスインダストリ/1.(4)③ AI を利活用する上での留意事項(本文・用語例 ハルシネーション)p.92 / 個人情報保護委員会「生成 AI サービスの利用に関する注意喚起等」(令和5年6月2日・別添1) (1)個人情報取扱事業者における注意点 ①②/(3)一般の利用者における留意点 ②
-
問51.プログラムの基本制御構造は、順次・選択・反復の3種類である。
正解:○(正しい)
解説:構造化プログラミング3要素:順次(sequence)・選択(if-else)・反復(while/for)。すべてのアルゴリズムを表現可。
-
問52.配列は、同じ型の要素を連続したメモリに格納するデータ構造で、添字で要素にアクセスできる。
正解:○(正しい)
解説:配列:固定長・連続メモリ。添字で O(1) アクセス。挿入・削除はO(n)(要素移動必要)。
-
問53.連結リストは、各要素がポインタで次の要素を指し示すデータ構造である。
正解:○(正しい)
解説:連結リスト:要素+次要素へのポインタ。挿入・削除はO(1)(位置特定済の場合)、ランダムアクセスはO(n)。
-
問54.スタックの操作は、要素を追加する push と取り出す pop が基本である。
正解:○(正しい)
解説:スタック:LIFO(後入先出)。push(追加)・pop(取出)・peek(先頭参照)。関数呼出・式評価で使用。
-
問55.キューの操作は、要素を追加する enqueue と取り出す dequeue が基本である。
正解:○(正しい)
解説:キュー:FIFO(先入先出)。enqueue(末尾追加)・dequeue(先頭取出)。BFS・タスクキュー等で使用。
-
問56.二分木は、各ノードが最大2つの子ノードを持つ木構造である。
正解:○(正しい)
解説:二分木:左子・右子の2分岐。二分探索木は左<親<右の規則で順序保持、検索O(log n)(バランス時)。
-
問57.二分探索(バイナリサーチ)は、ソート済み配列に対し、計算量O(log n)で目的の値を探索する。
正解:○(正しい)
解説:二分探索:中間値比較で範囲を半減。ソート前提で線形探索O(n)より圧倒的高速。
-
問58.ハッシュ法のアクセスは平均計算量O(n)である。
正解:×(誤り)
解説:誤り。ハッシュ法は「平均O(1)」(定数時間)。
-
問59.バブルソートは、隣接要素の比較・交換を繰り返してソートするアルゴリズムである。
正解:○(正しい)
解説:バブルソート:単純で実装容易、計算量O(n²)。教育用に頻出だが実務性能は劣る。
-
問60.選択ソートは、未ソート部分から最小(または最大)値を選び先頭に配置する処理を繰り返すアルゴリズムである。
正解:○(正しい)
解説:正しい。選択ソートは、未整列の部分から最小の要素を探し、その要素を最終位置(未整列部分の先頭)へ移す操作を繰り返す整列法である。最大の要素を選んで末尾へ移す形でも同じ考え方になる。計算量はO(n²)だが、交換回数はO(n)で済む。なお、最小の要素を次の位置の要素と交換する一般的な実装は安定ソートではなく、同じキーの要素の順序が入れ替わることがある。
根拠: NIST Dictionary of Algorithms and Data Structures「selection sort」 Definition/Note(this implementation of the algorithm is not stable) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2. アルゴリズム(2)代表的なアルゴリズム ① 整列・併合・探索のアルゴリズム(用語例)p.7-8(選択ソート)
-
問61.挿入ソートは、未ソート部分から最大値を選んで先頭に置くアルゴリズムである。
正解:×(誤り)
解説:誤り。挿入ソートは「ソート済み部分に未ソート要素を1つずつ挿入」(最大値選択は選択ソート)。
-
問62.マージソートは、配列を分割して再帰的にソートし、マージで結合するアルゴリズムで、計算量はO(n log n)である。
正解:○(正しい)
解説:マージソート:分割統治法。最悪ケースもO(n log n)、安定ソート。追加メモリO(n)が必要。
-
問63.クイックソートは、最悪計算量がO(n log n)で安定したアルゴリズムである。
正解:×(誤り)
解説:誤り。クイックソートは「最悪O(n²)」(平均O(n log n)、不安定でもある)。
-
問64.再帰関数は、自分自身を呼び出す関数で、基底条件(終了条件)が必要である。
正解:○(正しい)
解説:再帰:基底条件+再帰条件。スタックオーバーフローに注意。フィボナッチ・階乗・木探索等で使用。
-
問65.プログラム言語のオブジェクト指向プログラミングでは、クラスをインスタンス化してオブジェクトを生成する。
正解:○(正しい)
解説:OOP:クラス(設計図)→インスタンス(オブジェクト)。new演算子等で生成。インスタンス変数は各オブジェクト固有、クラス変数は共有。
-
問66.プログラムの変数の有効範囲(スコープ)には、ローカル変数(関数内)・グローバル変数(全体)等がある。
正解:○(正しい)
解説:スコープ:ローカル・グローバル・ブロックスコープ等。可視性と寿命を制御し、命名衝突を回避。
-
問67.配列とリストの違いは、配列が可変長で、リストが固定長であることである。
正解:×(誤り)
解説:誤り。配列は「固定長・連続メモリ」、リストは「可変長・非連続」(記述が逆)。
-
問68.プログラムにおける例外処理は、エラー発生時に通常処理から離脱して特別な処理を行う仕組みである。
正解:○(正しい)
解説:例外処理:try-catch-finally。通常制御フローと例外フローを分離して読みやすく安全なコードを実現。
-
問69.デバッグの基本手法には、ステップ実行・ブレークポイント設定・ログ出力等がある。
正解:○(正しい)
解説:デバッグ:IDE(Visual Studio Code等)でブレークポイント・ステップ実行・変数監視。ログはprintf debugging。
-
問70.プログラムのテストには、単体テスト・結合テスト・システムテストの段階がある。
正解:○(正しい)
解説:テスト段階:単体(関数単位)・結合(複数モジュール)・システム(全体)・受入(顧客)。V字モデル参照。
-
問71.次のソートアルゴリズムのうち、平均計算量が O(n log n) でないものはどれか。
- ア.マージソート
- イ.クイックソート
- ウ.ヒープソート
- エ.バブルソート
正解:エ.バブルソート
解説:バブルソートは平均/最悪ともO(n²)。マージ・クイック・ヒープはO(n log n)。
-
問72.次のうち、データ構造とアクセス特性の組合せとして誤っているものはどれか。
- ア.スタック:FIFO(先入先出)
- イ.連結リスト:先頭からO(n)走査
- ウ.配列:添字でO(1)アクセス
- エ.ハッシュテーブル:平均O(1)アクセス
正解:ア.スタック:FIFO(先入先出)
解説:スタックは、最後に追加した要素だけを取り出せるデータ構造で、後入れ先出し(LIFO)である。先入れ先出し(FIFO)は最も早く追加した要素から取り出すキューの性質なので、スタックとFIFOの組合せが誤り。連結リストは各要素が次の要素へのリンクをもつ構造で探索は先頭からの線形探索(O(n))、配列は添字で任意の要素に直接アクセスでき(O(1))、ハッシュテーブルはハッシュ関数でキーを配列の位置に対応させ、表が十分大きければ定数時間で操作できるので、これらの組合せは正しい。
根拠: NIST Dictionary of Algorithms and Data Structures「stack」 Definition / NIST Dictionary of Algorithms and Data Structures「queue」 Definition / NIST Dictionary of Algorithms and Data Structures「linked list」 Definition/Note(must be searched with a linear search) / NIST Dictionary of Algorithms and Data Structures「array」 Definition / NIST Dictionary of Algorithms and Data Structures「hash table」 Definition/Note(may be constant (Θ(1))) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/1. データ構造(2)データ構造の種類 ①配列 ②リスト ③スタックとキュー(用語例)p.7
-
問73.次のうち、二分探索の前提条件として正しいものはどれか。
- ア.データが連結リストで保持されている
- イ.データがキーの順に整列されている
- ウ.データの件数が2のべき乗である
- エ.データのキーに重複が無い
正解:イ.データがキーの順に整列されている
解説:二分探索は、探索区間の中央の要素と探索値を比べ、区間を半分ずつ絞り込んでいく方法なので、データがキーの順に整列されていることが前提となる。件数は2のべき乗でなくても区間を半分にでき、キーに重複があっても探索値と一致する要素を見つけられる。連結リストは前提ではなく、中央の要素へ直接アクセスできない連結リストでは、比較回数はO(log n)でも要素をたどる手間が線形探索と同じO(n)かかる。
根拠: NIST Dictionary of Algorithms and Data Structures「binary search」 Definition/Note(Binary search may be effective with an ordered linked list. It makes O(n) traversals…) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2. アルゴリズム(2)代表的なアルゴリズム ① 整列・併合・探索のアルゴリズム(用語例)p.7-8(2分探索法)
-
問74.プログラム制御構造の3要素として誤っているものはどれか。
- ア.順次
- イ.選択
- ウ.並列
- エ.反復
正解:ウ.並列
解説:構造化プログラミング3要素:順次・選択・反復。並列処理は別概念(マルチスレッド等)。
-
問75.次のうち、再帰関数で必須の要素はどれか。
- ア.ループ構文
- イ.配列引数
- ウ.グローバル変数
- エ.基底条件(終了条件)
正解:エ.基底条件(終了条件)
解説:再帰は、関数が処理を進めるために、より小さな部分の問題について自分自身を呼び出す技法である。再帰による解法は、問題が十分に簡単で直接解ける基底条件(ベースケース)と、問題を小さく分けて自分自身を呼び出す再帰ケースからなり、基底条件が無いと呼び出しが止まらない。ループ構文は繰返し(反復)で同じ処理を書く別の方法で、配列引数やグローバル変数も再帰に必須ではなく、整数1つを引数にとる関数でも再帰は書ける。
根拠: NIST Dictionary of Algorithms and Data Structures「recursion」 Definition/Note(base case(s)…recursive case(s))/See also(iteration) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2.(2)② 再帰のアルゴリズム/2.(3)アルゴリズム設計(用語例 再帰)p.8
-
問76.Big-O表記は、入力サイズが小さいときの実行時間を表す。
正解:×(誤り)
解説:誤り。Big-Oは「入力サイズが大きい時の漸近的増加傾向」(小さい時ではない)。
-
問77.動的計画法は、各段階で最適な選択をするだけで済む単純な手法である。
正解:×(誤り)
解説:誤り。動的計画法は「部分問題に分解しメモ化」(最適選択は貪欲法)。
-
問78.貪欲法は、全パターン探索でグローバル最適を保証する手法である。
正解:×(誤り)
解説:誤り。貪欲法は「局所最適選択を繰返す」(グローバル最適保証ではない)。
-
問79.DFSは、グラフを階層ごとに探索する方式である。
正解:×(誤り)
解説:誤り。DFSは「深く掘り下げてから戻る」(階層探索はBFS)。
-
問80.BFSは、グラフを深く掘り下げてから戻る探索方法である。
正解:×(誤り)
解説:誤り。BFSは「階層ごとに探索」(深掘りはDFS、記述が逆)。
-
問81.ダイクストラ法は、負の重みのあるグラフでも最短経路を求められる。
正解:×(誤り)
解説:誤り。ダイクストラは「負の重み不可」(負重み対応はベルマン-フォード)。
-
問82.文字列の連結(concat)は、複数の文字列を1つにつなげる操作である。
正解:○(正しい)
解説:文字列操作:連結・部分文字列取得・検索・置換等。Java:concat()/+演算子、Python:+演算子/join()。
-
問83.文字列の正規表現(Regular Expression)は、文字列のパターンマッチングに使われる表現法である。
正解:○(正しい)
解説:正規表現:PCRE・POSIX等。メールアドレス検証・ログ解析・テキスト置換等で広範に使用。
-
問84.線形代数の行列は、行と列で構成された数の配列で、画像処理・機械学習等で頻繁に使われる。
正解:○(正しい)
解説:行列:m×n配列。行列積・転置・逆行列等の演算。3DCG・画像変換・機械学習・量子計算等の基盤。
-
問85.算術平均は、データの中央値を求める統計指標である。
正解:×(誤り)
解説:誤り。算術平均は「合計÷個数」(中央値はメディアン、別概念)。
-
問86.中央値は、データの合計を個数で割った値である。
正解:×(誤り)
解説:誤り。中央値は「並べた中央の値」(合計÷個数は平均値)。
-
問87.標準偏差は、平均からの差の合計をデータ数で割った値である。
正解:×(誤り)
解説:誤り。標準偏差は分散の平方根で、分散は各データと平均との差(偏差)を2乗して足し合わせ、データ数(標本ではデータ数−1)で割ったものである。問題文の「平均からの差の合計」は、平均の定義から正と負の差が打ち消し合って常に0になるため、データ数で割っても0となり、ばらつきを表せない。差を2乗する代わりに絶対値をとって平均したものは平均絶対偏差と呼ばれ、標準偏差とは別の指標である。
根拠: NIST/SEMATECH e-Handbook of Statistical Methods 1.3.5.6 Measures of Scale Definitions of Variability(variance・standard deviation・average absolute deviation) / NIST/SEMATECH e-Handbook of Statistical Methods 1.3.5.1 Measures of Location Definition of Location(mean) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類1 基礎理論/2.(1)② 統計(用語例 標準偏差,分散)p.3
-
問88.疑似乱数は、コンピュータが計算で生成する乱数で、シードを固定すれば同じ列が再現できる。
正解:○(正しい)
解説:疑似乱数:完全な乱数ではなく決定論的アルゴリズムで生成。シード再利用で再現可能(テスト・デバッグに利用)。
-
問89.コンパイル方式は実行が遅く、インタプリタ方式が高速である。
正解:×(誤り)
解説:誤り。コンパイル方式は「実行高速」、インタプリタは「逐次解釈で遅め」(記述が逆)。
-
問90.プログラミングのフレームワークは、特定領域のアプリケーション開発を効率化するための共通基盤・ライブラリ集である。
正解:○(正しい)
解説:フレームワーク:Web(Django・Rails・Spring)、UI(React・Vue・Angular)、AI(TensorFlow・PyTorch)等。共通機能を提供。
-
問91.関数型プログラミングは、関数を第一級オブジェクトとして扱い、副作用を避けるプログラミングパラダイムである。
正解:○(正しい)
解説:関数型:Haskell・Lisp・F#・Erlang等。副作用最小化・参照透過性・高階関数。並行処理・テスト容易性で再評価。
-
問92.バージョン管理システムは、ソースコードのコンパイル機能を提供する。
正解:×(誤り)
解説:誤り。バージョン管理は「変更履歴管理+複数人協力支援」(コンパイルは別ツール)。
-
問93.リファクタリングは、ソースコードの動作を大きく変更する作業である。
正解:×(誤り)
解説:誤り。リファクタリングは「動作を変えず内部構造改善」(動作変更ではない)。
-
問94.コードレビューは、コード作者単独で行う作業である。
正解:×(誤り)
解説:誤り。コードレビューは「他の開発者がチェック」(単独ではない、品質向上・知識共有)。
-
問95.テスト駆動開発(TDD)は、実装後にテストコードを書く手法である。
正解:×(誤り)
解説:誤り。TDDは「テストコードを先に」書く(実装後は通常開発)。
-
問96.キーの取りうる値の個数が要素数n以下のデータを整列するとき、次のソートアルゴリズムのうち、最悪計算量がO(n²)になる可能性があるものはどれか。
- ア.マージソート
- イ.ヒープソート
- ウ.カウントソート
- エ.クイックソート
正解:エ.クイックソート
解説:クイックソートは、基準値(ピボット)より大きい要素と小さい要素に分けて再帰的に整列する方法で、通常はO(n log n)だが、最悪はO(n²)になる。マージソートとヒープソートは最悪でもO(n log n)で、O(n²)にはならない。カウントソートは比較をせず、キーの値ごとの出現回数を補助の配列に数え、累計をとって各要素を最終位置に置く。手間は要素数nと値の個数kに比例するO(n+k)で、kがn以下ならO(n)にとどまる。
根拠: NIST Dictionary of Algorithms and Data Structures「quicksort」 Definition/Note(Θ(n²) in the worst case, but it is typically O(n log n)) / NIST Dictionary of Algorithms and Data Structures「merge sort」 Definition(Run time is Θ(n log n)) / NIST Dictionary of Algorithms and Data Structures「heapsort」 Definition(Run time is O(n log n)) / NIST Dictionary of Algorithms and Data Structures「counting sort」 Definition(2-pass/counts the occurrences of each key in an auxiliary array/running total) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2. アルゴリズム(2)代表的なアルゴリズム ① 整列・併合・探索のアルゴリズム(用語例)p.7-8
-
問97.辺の重みがすべて0以上の重み付き有向グラフで、1つの始点から他の各頂点への最短経路を求めるアルゴリズムはどれか。
- ア.ダイクストラ法
- イ.深さ優先探索
- ウ.クラスカル法
- エ.トポロジカルソート
正解:ア.ダイクストラ法
解説:ダイクストラ法は、辺の重みがすべて0以上の有向グラフで、1つの始点から他のすべての頂点への最短経路を求めるアルゴリズムである。深さ優先探索は、行けるところまで奥へ進んでから隣の枝に移る探索の順序の決め方、クラスカル法は別々の部分木を結ぶ最も短い辺を加えていく最小全域木の求め方、トポロジカルソートは前後関係の決まり(半順序)に従って要素を並べる方法で、いずれも最短経路を求めるものではない。
根拠: NIST Dictionary of Algorithms and Data Structures「Dijkstra's algorithm」 Definition / NIST Dictionary of Algorithms and Data Structures「depth-first search」 Definition (1)(outgoing edges (children) … before any of the vertex's siblings/Extremes are searched first) / NIST Dictionary of Algorithms and Data Structures「Kruskal's algorithm」 Definition / NIST Dictionary of Algorithms and Data Structures「topological sort」 Definition / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/2.(2)③ グラフのアルゴリズム(用語例 深さ優先探索,最短経路探索,ダイクストラ法)p.8
-
問98.統計の代表値のうち、外れ値の影響を最も受けにくいものはどれか。
- ア.算術平均
- イ.中央値
- ウ.幾何平均
- エ.ミッドレンジ(最大値と最小値の中間の値)
正解:イ.中央値
解説:中央値は、データを小さい順に並べたとき、半分のデータがそれより小さく半分がそれより大きくなる値である。データの順位に基づくので、裾にある極端な値(外れ値)の影響を受けにくい。算術平均は全データの合計を個数で割るため、極端な値に引っ張られる。最大値と最小値の中間の値(ミッドレンジ)は両端の2つの値だけで決まるので外れ値に弱い。幾何平均は値の積を使って中心的な値を表すので、極端な値もそのまま計算に入る。
根拠: NIST/SEMATECH e-Handbook of Statistical Methods 1.3.5.1 Measures of Location Definition of Location(mean・median)/Cauchy Distribution の説明/Alternative Measures of Location(Mid-range) / Python 3 公式ドキュメント「statistics --- 数理統計関数」 statistics.median(中央値は外れ値の影響を受けにくい)/statistics.geometric_mean(using the product of the values) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類1 基礎理論/2.(1)② 統計(用語例 中央値(メジアン),平均値)p.3
-
問99.次のプログラミング言語のうち、関数型プログラミング言語に分類されるものはどれか。
- ア.C
- イ.COBOL
- ウ.Haskell
- エ.Assembly
正解:ウ.Haskell
解説:Haskellは純粋関数型のプログラミング言語である(Haskell 公式サイト)。ほかに OCaml・F#・Erlang も関数型の言語である。関数型言語は、手続型言語・論理型言語・オブジェクト指向言語と並ぶプログラム言語の分類の一つで、C と COBOL は手続型言語に入る。アセンブラ言語は、機械語、アセンブラ言語、高水準言語と発展してきたうちの高水準言語より前の段階の言語で、関数型言語ではない。
根拠: Haskell Language 公式サイト トップページ(An advanced, purely functional programming language/Purely functional) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類1 基礎理論/3.(10)プログラム言語論(用語例 手続型言語,関数型言語,論理型言語,オブジェクト指向言語)p.5 / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類1 基礎理論/中分類2 アルゴリズムとプログラミング/4.(1)① プログラム言語の変遷と分類、② 手続型言語(用語例 COBOL,C)p.9 / OCaml 公式サイト トップページ(An industrial-strength functional programming language) / F# Software Foundation 公式サイト トップページ(F# is functional first and immutable by default) / Erlang/OTP 公式サイト トップページ(Practical functional programming for a parallel world)
-
問100.次のうち、TDD(テスト駆動開発)の正しい順序はどれか。
- ア.実装→テスト→リファクタリング
- イ.テスト→リファクタリング→実装
- ウ.実装→リファクタリング→テスト
- エ.テスト→実装→リファクタリング
正解:エ.テスト→実装→リファクタリング
解説:テスト駆動開発(TDD)は、テストを最初に書き、次にそのテストを満たすようにコードを書き、最後にテストとコードをリファクタリングする、という手順を繰り返す(JSTQB)。この3段階は Red(これから足す機能のテストを書く)、Green(テストが通るまでコードを書く)、Refactor(新旧のコードを整える)と要約される。実装をテストより先に置く順序はTDDの要点に反し、リファクタリングはテストを満たすコードができた後に行うので、実装の前に置く順序も誤り。
根拠: JSTQB テスト技術者資格制度 Foundation Level シラバス Version 2023V4.0.J02 2.1.3 テストが主導するソフトウェア開発(テスト駆動開発(TDD))p.27 / Martin Fowler「TestDrivenDevelopment」(bliki, martinfowler.com) 本文(three simple steps:Write a test…/Write the functional code until the test passes/Refactor both new and old code…/often summarized as Red - Green - Refactor) / IPA「基本情報技術者試験(レベル2)」シラバス Ver.9.2 大分類4 開発技術/中分類13 ソフトウェア開発管理技術/1.(1)②(b)XP の特徴(用語例 テスト駆動開発(TDD),リファクタリング)p.58
-
問101.プログラミング言語は、低水準言語(機械語・アセンブラ)と高水準言語(C・Java・Python等)に大別される。
正解:○(正しい)
解説:低水準:CPU命令に近い、性能高・記述難。高水準:人間の思考に近い、生産性高・抽象度高。
-
問102.プログラムの単体テストでは、関数・メソッド単位で正しく動作するかを検証する。
正解:○(正しい)
解説:単体テスト(ユニットテスト):JUnit・pytest等のフレームワーク使用。TDD・CIで自動化が標準。
-
問103.入力されたビットに対して出力されるビットが0 か1 のいずれかである確率を遷移確率という。遷移確率を表にしたとき,a,b,c,d の関係はどれか。

- ア.a + b + c + d = 1
- イ.a + b = 1, c + d = 1
- ウ.a + c = 1, b + d = 1
- エ.a + d = 1, b + c = 1
正解:イ.a + b = 1, c + d = 1
解説:表の1行が「ある入力に対する出力の確率」を並べたものである。入力が0のとき,出力は0か1のどちらかにしかならず,ほかに起こりようがない。したがって入力0の行を足すと必ず1になり,a + b = 1 である。入力が1のときも同じで c + d = 1 になる。行ごとに合計が1になるのでイが正しい。アは表全体の合計を1としているが,行が2つあるので実際には合計は2になる。ウとエは列や対角線で足しているが,たとえば a と c は「入力が0のとき」と「入力が1のとき」という別々の条件のもとでの確率なので,足し合わせても意味のある値にはならない。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目A 公開問題」問1
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問104.クイックソートの処理方法を説明したものはどれか。
- ア.既に整列済みのデータ列の正しい位置に,データを追加する操作を繰り返していく方法である。
- イ.データ中の最小値を求め,次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく方法である。
- ウ.適当な基準値を選び,それよりも小さな値のグループと大きな値のグループにデータを分割する。同様にして,グループの中で基準値を選び,それぞれのグループを分割する。この操作を繰り返していく方法である。
- エ.隣り合ったデータの比較と入替えを繰り返すことによって,小さな値のデータを次第に端の方に移していく方法である。
正解:ウ.適当な基準値を選び,それよりも小さな値のグループと大きな値のグループにデータを分割する。同様にして,グループの中で基準値を選び,それぞれのグループを分割する。この操作を繰り返していく方法である。
解説:クイックソートは基準値(ピボット)を1つ選び,それより小さい値の組と大きい値の組に分けたうえで,各組に対して同じことを繰り返す分割統治法である。ウがその説明にあたる。アは整列済みの列に1つずつ差し込んでいく挿入ソート,イは残りの中から最小値を選び出す操作を繰り返す選択ソート,エは隣どうしを比べて入れ替えるバブルソートの説明である。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目A 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問105.あるシステムにおいて,“プログラムの記述方法が統一されていないので保守がしづらい”という問題が発生している。今後の新規開発プロジェクトにおけるこの問題の低減策として,最も適切なものはどれか。
- ア.コーディング規約を見直し,教育する。
- イ.セキュアプログラミングを採用する。
- ウ.単体テストでの命令網羅度を上げる。
- エ.プロジェクト管理レビューに全プログラマーが参加する。
正解:ア.コーディング規約を見直し,教育する。
解説:問題の原因は「記述方法が統一されていない」ことである。書き方の基準そのものであるコーディング規約を見直し,それを全員が守れるように教育するのが直接の対策になる。イのセキュアプログラミングは脆弱性を作り込まないための書き方で,目的が違う。ウの命令網羅度はテストがどれだけコードを通ったかの尺度で,上げても書き方は揃わない。エのプロジェクト管理レビューは進捗や体制を確認する場であり,全員が出席してもソースコードの書き方が統一されるわけではない。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目A 公開問題」問11
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問106.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 次のプログラムは,整数型の配列data の末尾の要素の値を先頭の要素に移動する。この際,末尾以外の各要素の値は,一つずつ後ろの要素に移動する。 〔プログラム〕 整数型の配列: data ← {1, 2, 3, 4, 5, 6, 7, 8, 9} 整数型: top, i 整数型: len ← dataの要素数 top ← data[len] for (i を □ ) data[i] ← data[i - 1] endfor data[1] ← top
- ア.2 から len - 1 まで 1 ずつ増やす
- イ.2 から len まで 1 ずつ増やす
- ウ.len - 1 から 2 まで 1 ずつ減らす
- エ.len から 2 まで 1 ずつ減らす
正解:エ.len から 2 まで 1 ずつ減らす
解説:末尾の値はあらかじめ top に退避してあるので,あとは各要素を一つずつ後ろへずらせばよい。ずらす代入は data[i] ← data[i - 1] である。ここで i を小さい方から回すと,次に読むはずの値を先に上書きしてしまう。実際 data[2] ← data[1] を行った直後に data[3] ← data[2] を行うと,data[3] には元の data[2] ではなく data[1] の値が入ってしまう。したがって後ろから前へ回さなければならない。更新すべきなのは data[len] から data[2] までなので,i を len から 2 まで1ずつ減らす。ウは len - 1 から始めるため data[len] が更新されず,末尾に元の data[len - 1] が移らない。アとイは増やす向きなので上に書いた上書きが起き,さらにアは data[len] も更新しない。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目B 公開問題」問1
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問107.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。 関数complement は,引数として渡された8 ビット型の値x について,x に加算すると00000000 になる値を返す。8 ビット型の加算は,値を符号なし2 進数とみなしたときの加算とし,桁あふれが発生したときのあふれた桁は無視する。演算子∧,∨,▽は,それぞれビット単位の論理積,論理和,排他的論理和を表す。 〔プログラム〕 ○8ビット型: complement(8ビット型: x) 8ビット型: y y ← □ y ← y + 00000001 return y
- ア.x ∧ 01111111
- イ.x ∧ 11111111
- ウ.x ∨ 01111111
- エ.x ∨ 11111111
- オ.x ▽ 01111111
- カ.x ▽ 11111111
正解:カ.x ▽ 11111111
解説:x に足して0になる値(桁あふれは無視)は2の補数であり,「各ビットを反転してから1を足した値」で求まる。プログラムは最後に1を足しているので,□には「xの各ビットを反転した値」が入る。ビットの反転は,すべてのビットが1である11111111との排他的論理和で得られる。よってカ。オの01111111との排他的論理和は,最上位ビットだけ反転されずに残るので反転になっていない。論理積は,11111111と取ってもxのままで何も変わらず(イ),01111111と取ると最上位ビットを0にするだけである(ア)。論理和は,11111111と取ると結果が必ず11111111になり(エ),01111111と取ると下位7ビットを1にするだけである(ウ)。いずれも反転ではない。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目B 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問108.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 関数func1 に与える引数と,関数func2 に与える引数とが同じとき,二つの関数は同じ値を返す。プログラムでは,配列の領域外を参照してはならないものとする。 〔プログラム〕 ○整数型: func1(整数型: n) if (nが2以下) return 1 endif return 2 × func1(n - 2) + func1(n - 1) ○整数型: func2(整数型: n) 整数型の配列: data ← {1, 1, 1} 整数型: i /* nが3より小さいときは繰返し処理を実行しない */ for (iを3からnまで1ずつ増やす) data[1] ← data[2] data[2] ← data[3] data[3] ← □ endfor return data[3]
- ア.2 × data[1] + data[2]
- イ.2 × data[2] + data[1]
- ウ.2 × data[i - 1] + data[i - 2]
- エ.2 × data[i - 2] + data[i - 1]
- オ.data[3] + 2 × data[1] + data[2]
- カ.data[3] + 2 × data[2] + data[1]
- キ.data[3] + 2 × data[i - 1] + data[i - 2]
- ク.data[3] + 2 × data[i - 2] + data[i - 1]
正解:ア.2 × data[1] + data[2]
解説:func1 は f(n)=1(n が2以下),f(n)=2 × f(n - 2) + f(n - 1) という漸化式である。func2 はこれを3つの要素だけを使い回して繰返しで計算する。i 回目のループに入る直前の data が {f(i - 3), f(i - 2), f(i - 1)} だとすると,data[1] ← data[2] で data[1] が f(i - 2) に,data[2] ← data[3] で data[2] が f(i - 1) になる。この時点で data[3] に入れるべきは f(i)=2 × f(i - 2) + f(i - 1) であり,それはちょうど 2 × data[1] + data[2] である。よってア。イは掛ける相手が入れ替わっており,2 × f(i - 1) + f(i - 2) を計算してしまう。ウとエは data[i - 1],data[i - 2] を参照するが,data の要素数は3しかないのでi が5以上になると配列の領域外を参照することになり,設問の条件に反する。オからクはいずれも data[3](この時点では f(i - 1))を余分に足しており,漸化式と合わない。なお n が2以下のときはループが一度も回らず data[3]=1 が返り,func1 の値と一致する。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目B 公開問題」問3
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問109.次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 単方向リストを,配列dataList と配列pointerList の二つの配列で表現する。dataList にリストの要素の値を格納し,pointerList にリストの次の要素に対応するdataList の要素番号を格納する。単方向リストの先頭は,dataList[1] 及びpointerList[1] の組みである。単方向リストの末尾に対応するpointerList の要素は未定義である。dataList のうち単方向リストの要素の値を格納していない要素と,対応するpointerList の要素は未定義である。 プログラムが扱うdataList 及びpointerList の内容を図1 に示す。先頭の次の要素の要素番号は,pointerList[1] に格納された3 であり,値はdataList[3] に格納された20 である。その次の要素の要素番号はpointerList[3] に格納された2 であり,値はdataList[2] に格納された30 である。 関数orderList は,図1 のdataList 及びpointerList で表現した単方向リストの値を,単方向リストの先頭からたどって順番に格納した配列を返す。関数orderList が返す配列を図2 に示す。 〔プログラム〕 大域: 整数型の配列: dataList ← {10, 30, 20, 40, 未定義の値} 大域: 整数型の配列: pointerList ← {3, 4, 2, 未定義の値, 未定義の値} ○整数型の配列: orderList() 整数型: i, p ← 1 整数型の配列: linearList ← {} // 要素数0の配列 for (i を 1 から dataListの要素数 まで 1 ずつ増やす) linearListの末尾 に dataList[p]の値 を追加する if ([a] が 未定義) 繰返し処理を終了する endif p ← [b] endfor return linearList

- ア.[a]dataList[p] [b]i
- イ.[a]dataList[p] [b]pointerList[p]
- ウ.[a]pointerList[p] [b]i
- エ.[a]pointerList[p] [b]pointerList[p]
正解:エ.[a]pointerList[p] [b]pointerList[p]
解説:p は「いま見ている要素の要素番号」である。ループの中では,まず現在の要素の値 dataList[p] を linearList に足し,次に「この先まだ要素があるか」を調べ,あれば p を次の要素番号に進める。「次の要素番号」は pointerList[p] であり,末尾ではそれが未定義になる。したがって a も b も pointerList[p] である。図1の値で追うと,p=1で10を足し pointerList[1]=3 なので p=3,20を足し pointerList[3]=2 なので p=2,30を足し pointerList[2]=4 なので p=4,40を足したところで pointerList[4] が未定義なので終了し,{10, 20, 30, 40} を返す。図2と一致する。a を dataList[p] にすると(ア・イ),末尾の要素 dataList[4] には40が入っていて未定義ではないのでそこで打ち切れない。イではこのあと p が未定義になり,次の周回で dataList[未定義] を参照してしまう。b を i にすると(ア・ウ),p がリストのつながりではなくループの回数になる。ウを図1の値で追うと {10, 10, 30, 20, 40} が返り,図2と違う。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目B 公開問題」問4
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問110.次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 一つの要素だけが1 で他の要素が0 であるような整数型の配列による表現を,本問ではOne-Hot 表現という。関数oneHotEncoding は,図のように,色の名前が格納されている要素数1 以上の文字列型の配列を引数として受け取り,配列に含まれる色の名前(図の例では3 種類)に基づいて,各要素をOne-Hot 表現に変換し,整数型配列の配列に格納して返す。関数oneHotEncoding における変換の例を図に示す。 引数の例: {"Red", "Green", "Blue", "Red"} ↓ "Red"のOne-Hot 表現 : {1, 0, 0} "Green"のOne-Hot 表現: {0, 1, 0} "Blue"のOne-Hot 表現 : {0, 0, 1} ↓ 引数の例に対応する戻り値: {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 0}} 図 関数oneHotEncoding における変換の例 〔プログラム〕 ○整数型配列の配列: oneHotEncoding(文字列型の配列: colors) 整数型: i, j, k 文字列型の配列: colorVector ← {} // 要素数0の配列 整数型の配列: tempVector 整数型配列の配列: oneHotVector ← {} // 要素数0の配列 /* 名前一覧の作成 */ for (i を 1 から colorsの要素数 まで 1 ずつ増やす) if (colorVector の要素のいずれにも colors[i]の値 が格納されていない) colorVectorの末尾 に [a] を追加する endif endfor /* One-Hot表現への変換 */ for (j を 1 から colorsの要素数 まで 1 ずつ増やす) tempVector ← {} // 要素数0の配列 for (k を 1 から colorVectorの要素数 まで 1 ずつ増やす) if ([b]) tempVectorの末尾 に 1 を追加する else tempVectorの末尾 に 0 を追加する endif endfor oneHotVectorの末尾 に tempVector を追加する endfor return oneHotVector
- ア.[a]colors[i]の値 [b]colors の要素のいずれかに colorVector[k]の値 が格納されている
- イ.[a]colors[i]の値 [b]colors[j] が colorVector[k] と等しい
- ウ.[a]未定義の値 [b]colors の要素のいずれかに colorVector[k]の値 が格納されている
- エ.[a]未定義の値 [b]colors[j] が colorVector[k] と等しい
正解:イ.[a]colors[i]の値 [b]colors[j] が colorVector[k] と等しい
解説:前半のループは色名の一覧 colorVector を作る部分である。colors を先頭から見て,まだ colorVector に入っていない色名が現れたら,その色名すなわち colors[i]の値 を末尾に足す。よって a は colors[i]の値 である。後半のループは,colors の j 番目の色を One-Hot 表現に直す部分である。colorVector を k で走査し,その k 番目の色名が j 番目の色と同じなら1を,違えば0を並べる。よって b は「colors[j] が colorVector[k] と等しい」である。したがってイ。a を「未定義の値」とすると(ウ・エ),colorVector に色名が入らず一覧が作れない。b を「colors の要素のいずれかに colorVector[k]の値 が格納されている」とすると(ア・ウ),colorVector はもともと colors から作った一覧なので,この条件はどの k でも必ず真になる。その結果すべての要素が1の配列ができてしまい,One-Hot 表現にならない。
出典:情報処理推進機構「令和8年度 基本情報技術者試験 科目B 公開問題」問5
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問111.浮動小数点形式で表現された数値の演算結果における丸め誤差の説明はどれか。
- ア.演算結果がコンピュータの扱える最大値を超えることによって生じる誤差である。
- イ.数表現のけた数に限度があるので,最下位けたより小さい部分について四捨五入や切上げ,切捨てを行うことによって生じる誤差である。
- ウ.乗除算において,指数部が小さい方の数値の仮数部の下位部分が失われることによって生じる誤差である。
- エ.絶対値がほぼ等しい数値の加減算において,上位の有効数字が失われることによって生じる誤差である。
正解:イ.数表現のけた数に限度があるので,最下位けたより小さい部分について四捨五入や切上げ,切捨てを行うことによって生じる誤差である。
解説:丸め誤差は,扱えるけた数に限りがあるために,入りきらない下位の部分を四捨五入・切上げ・切捨てで処理したときに生じる誤差である。よってイ。アはオーバフロー(あふれ)。ウは情報落ちで,絶対値の大きく違う数を足し引きしたときに小さいほうの下位が消える現象である。エは桁落ちで,ほぼ等しい数の引き算で上位が打ち消し合い,有効数字が減る現象である。4つとも誤差の名前だが,原因がそれぞれ違う。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目A 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問112.図の木構造は2 分探索木である。a~g の値の大小関係として,適切なものはどれか。ここで,a~g の値は重複しないものとする。

- ア.a < b < d < e < c < f < g
- イ.d < b < e < a < f < c < g
- ウ.d < e < f < g < b < c < a
- エ.g < f < c < e < d < b < a
正解:イ.d < b < e < a < f < c < g
解説:2分探索木では,どの節点についても「左の部分木の値 < その節点の値 < 右の部分木の値」が成り立つ。したがって左の子・自分・右の子の順にたどる通りがけ順(中間順)で並べれば,値は小さい順に並ぶ。図の木は根がa,その左がb(子はdとe),右がc(子はfとg)なので,この順にたどると d,b,e,a,f,c,g となる。よってイ。アは根のaを最小にしているが,根の左にbがある以上 b < a でなければならない。ウは葉をすべて内部の節点より小さいとしているが,eはbの右の子なので b < e であり成り立たない。エは全体を逆順にしたもので,やはり左が小さいという規則に反する。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目A 公開問題」問3
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問113.ローコード開発ツールを用いたソフトウェア開発の説明はどれか。
- ア.アプリケーションソフトウェアの開発基盤の上で,用意された部品やテンプレートをGUI を用いた操作で組み合わせたり,必要に応じて一部の処理のソースコードを記述したりすることによって,アプリケーションソフトウェアを作成する。
- イ.アプリケーションソフトウェアの開発基盤の上で,用意された部品やテンプレートをGUI を用いた操作で組み合わせるだけで,ソースコードを記述せずに,アプリケーションソフトウェアを作成する。
- ウ.アプリケーションソフトウェアの定型的な枠組みを参照して,独自の処理のソースコードを記述することによって,アプリケーションソフトウェアを作成する。
- エ.利用者がシステムを利用して行う作業を自動化ツールに代行させるために,利用者によるシステムの操作手順をツールに登録する。
正解:ア.アプリケーションソフトウェアの開発基盤の上で,用意された部品やテンプレートをGUI を用いた操作で組み合わせたり,必要に応じて一部の処理のソースコードを記述したりすることによって,アプリケーションソフトウェアを作成する。
解説:ローコード(low-code)は「コードが少ない」という意味で,基本はGUI で部品を組み合わせて作り,足りないところだけをコードで書き足す方式である。よってア。イはコードをまったく書かないノーコードの説明で,ローコードとの違いはまさに「一部はコードを書けるかどうか」にある。ウはフレームワークを使った開発の説明。エはRPA(ロボティックプロセスオートメーション)の説明である。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目A 公開問題」問5
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問114.オブジェクト指向プログラミングの特徴のうち,異なるクラスのオブジェクトを同一のインタフェースで操作したときに,操作対象クラスに応じた異なる動作を可能にすることを何と呼ぶか。
- ア.委譲
- イ.継承
- ウ.コンポジション
- エ.多相性
正解:エ.多相性
解説:同じ呼び出し方をしても,実際のクラスによって違う動きをすることを多相性(ポリモーフィズム)という。よってエ。たとえば図形クラスの「描く」を呼ぶと,円なら円が,四角なら四角が描かれる。アの委譲は,自分への依頼を別のオブジェクトに任せること。イの継承は,あるクラスの性質を引き継いで新しいクラスを作ること(多相性を実現する手段の一つではあるが,多相性そのものではない)。ウのコンポジションは,あるオブジェクトを部品として内部に持つ関係である。
出典:情報処理推進機構「令和7年度 基本情報技術者試験 科目A 公開問題」問12
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問115.次のプログラム中の [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
- ア.[a]iを1から2まで1ずつ増やす [b]jをnから始めてmを超えない範囲でtempNずつ増やす
- イ.[a]iを1から2まで1ずつ増やす [b]jをtempNからmまで1ずつ増やす
- ウ.[a]iを1から2まで1ずつ増やす [b]jをtempNから始めてmを超えない範囲で4ずつ増やす
- エ.[a]iを1から3まで1ずつ増やす [b]jをnから始めてmを超えない範囲でtempNずつ増やす
- オ.[a]iを1から3まで1ずつ増やす [b]jをtempNからmまで1ずつ増やす
- カ.[a]iを1から3まで1ずつ増やす [b]jをtempNから始めてmを超えない範囲で4ずつ増やす
正解:カ.[a]iを1から3まで1ずつ増やす [b]jをtempNから始めてmを超えない範囲で4ずつ増やす
解説: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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問116.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。 関数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
正解:ア.rest ≧ 0
解説:このプログラムは,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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問117.次のプログラム中の [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
正解:イ.[a]stackPos [b]stackPos - 1
解説: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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問118.次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は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
正解:ク.8
解説: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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問119.次の記述中の [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

- ア.[a]44 [b]33
- イ.[a]58 [b]8
- ウ.[a]70 [b]7
- エ.[a]75 [b]2
- オ.[a]80 [b]6
- カ.[a]80 [b]8
- キ.[a]82 [b]6
正解:オ.[a]80 [b]6
解説:プログラムのとおり「その行の合計 × その列の合計 ÷ 全体の合計」で求める。 まず合計を出す。行の合計は,予防接種を受けた=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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問120.X 及びY はそれぞれ0 又は1 の値をとる変数である。X □Y をX とY の論理演算としたとき,次の真理値表が得られた。X □Y の真理値表はどれか。

- ア.X□Y=0,0,0,1(X,Yが00,01,10,11の順)

- イ.X□Y=0,1,0,1(X,Yが00,01,10,11の順)

- ウ.X□Y=1,1,0,1(X,Yが00,01,10,11の順)

- エ.X□Y=1,1,1,0(X,Yが00,01,10,11の順)

正解:ウ.X□Y=1,1,0,1(X,Yが00,01,10,11の順)
解説:X AND (X□Y) と X OR (X□Y) の値から,X□Y を1行ずつ逆算する。X=0 の行では X AND (X□Y) は必ず0になるので手掛かりにならず,X OR (X□Y) がそのまま X□Y の値になる。1行目も2行目も1なので,0□0=1,0□1=1。X=1 の行では逆に X OR (X□Y) が必ず1になるので手掛かりにならず,X AND (X□Y) がそのまま X□Y の値になる。3行目は0,4行目は1なので,1□0=0,1□1=1。まとめると X□Y は上から 1,1,0,1 で,これはウである。なおこの演算は「X ならば Y」(含意)で,X が1で Y が0のときだけ0になる。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目A 公開問題」問1
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 - ア.X□Y=0,0,0,1(X,Yが00,01,10,11の順)
-
問121.キーが小文字のアルファベット1 文字(a,b,…,z のいずれか)であるデータを,大きさが10 のハッシュ表に格納する。ハッシュ関数として,アルファベットのASCII コードを10 進表記法で表したときの1 の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCII コードでは,昇順に連続した2 進数が,アルファベット順にコードとして割り当てられている。
- ア.a とi
- イ.b とr
- ウ.c とl
- エ.d とx
正解:エ.d とx
解説:小文字のアルファベットのASCII コードは a が97 で,以降1ずつ増える。ハッシュ値はその10進表記の1の位なので,a=7,b=8,c=9,d=0,e=1,…と10文字ごとに同じ値へ戻る。つまりアルファベット順で10個離れた文字どうしが衝突する。a は1番目,d は4番目,x は24番目なので,d と x は20個離れており衝突する。よってエ。ア(a は1番目・i は9番目)は8個違い,イ(b は2番目・r は18番目)は16個違い,ウ(c は3番目・l は12番目)は9個違いで,いずれも10の倍数でないから衝突しない。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目A 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問122.階層構造のモジュール群から成るソフトウェアの結合テストを,上位のモジュールから行う。この場合に使用する,下位のモジュールの代替となるテスト用のモジュールはどれか。
- ア.エミュレータ
- イ.シミュレータ
- ウ.スタブ
- エ.ドライバ
正解:ウ.スタブ
解説:上位のモジュールから順に結合していくトップダウンテストでは,まだできていない下位のモジュールの代わりに,呼ばれたら決まった値を返すだけの仮のモジュールを用意する。これをスタブという。よってウ。エのドライバは逆に,下位から結合していくボトムアップテストで,まだできていない上位の代わりに下位を呼び出す仮のモジュールである。アのエミュレータとイのシミュレータは,別の機器の動きを再現する仕組みで,テスト用の仮モジュールではない。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目A 公開問題」問11
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問123.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。 関数maximum は,異なる三つの整数を引数で受け取り,そのうちの最大値を返す。 〔プログラム〕 ○整数型: maximum(整数型: x, 整数型: y, 整数型: z) if (□) return x elseif (y > z) return y else return z endif
- ア.x > y
- イ.x > y and x > z
- ウ.x > y and y > z
- エ.x > z
- オ.x > z and z > y
- カ.z > y
正解:イ.x > y and x > z
解説:最初の if で x を返すのだから,その条件は「x が3つの中でいちばん大きい」でなければならない。それは x > y かつ x > z である。よってイ。この条件が偽なら x は最大ではないので,残る y と z を比べればよく,あとの elseif (y > z) と else はそのままで正しく動く。アの x > y だけでは,x > y でも z がもっと大きい場合に x を返してしまう。エの x > z だけも同様である。ウの x > y and y > z は x が最大であることに加えて y > z まで求めており,x > z > y のときに条件が偽になって x を返せない。オも同じ形で条件が狭すぎる。カの z > y は x について何も言っていない。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目B 公開問題」問1
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問124.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。 関数convDecimal は,引数として与えられた,“0”と“1”だけから成る,1 文字以上の文字列を,符号なしの2 進数と解釈したときの整数値を返す。例えば,引数として“10010”を与えると18 が返る。 関数convDecimal が利用する関数int は,引数で与えられた文字が“0”なら整数値0 を返し,“1”なら整数値1 を返す。 〔プログラム〕 ○整数型: convDecimal(文字列型: binary) 整数型: i, length, result ← 0 length ← binaryの文字数 for (i を 1 から length まで 1 ずつ増やす) result ← □ endfor return result
- ア.result + int(binary の (length - i + 1)文字目の文字)
- イ.result + int(binary の i文字目の文字)
- ウ.result × 2 + int(binary の (length - i + 1)文字目の文字)
- エ.result × 2 + int(binary の i文字目の文字)
正解:エ.result × 2 + int(binary の i文字目の文字)
解説:2進数を左(上位)から1桁ずつ読むときは,それまでの値を2倍して桁を1つ繰り上げてから,新しい桁を足す。ループは i を1から増やすので i 文字目は左から数えた桁であり,result × 2 + int(binary の i文字目の文字) が正しい。よってエ。“10010”で追うと,0→1→2→4→9→18 となり,例に示された18 に一致する。アとイは2倍していないので,各桁の値を足すだけになり,“10010”なら1の個数である2しか返らない。ウは2倍はしているが右(下位)から読んでおり,“10010”を左右反転した“01001”を変換して9を返してしまう。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目B 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問125.次のプログラム中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 図1 に示すグラフの頂点には,1 から順に整数で番号が付けられている。グラフは無向グラフであり,各頂点間には高々一つの辺がある。一つの辺は両端の頂点の番号を要素にもつ要素数2 の整数型の 配列で表現できる。例えば,{1,3} は頂点1 と頂点3 を端点とする辺を表す。グラフ全体は,グラフに含まれる辺を表す要素数2 の配列を全て格納した配列(以下,辺の配列という)で表現できる。辺の配列の要素数はグラフの辺の個数と等しい。図1 のグラフは整数型配列の配列{{1, 3}, {1, 4}, {3, 4}, {2, 4}, {4, 5}}と表現できる。 関数edgesToMatrix は,辺の配列を隣接行列に変換する。隣接行列とは,グラフに含まれる頂点の個数と等しい行数及び列数の正方行列で,i 行j 列の成分は頂点i と頂点j を結ぶ辺があるときに1 となり,それ以外は0 となる。行列の対角成分は全て0 で,無向グラフの場合は対称行列になる。図1 のグラフを表現する隣接行列を図2 に示す。 関数edgesToMatrix は,引数edgeList で辺の配列を,引数nodeNum でグラフの頂点の個数をそれぞれ受け取り,隣接行列を表す整数型の二次元配列を返す。 〔プログラム〕 ○整数型の二次元配列: edgesToMatrix(整数型配列の配列: edgeList, 整数型: nodeNum) 整数型の二次元配列: adjMatrix ← {nodeNum行nodeNum列の 0} 整数型: i, u, v for (i を 1 から edgeListの要素数 まで 1 ずつ増やす) u ← edgeList[i][1] v ← edgeList[i][2] □ endfor return adjMatrix

- ア.adjMatrix[u, u] ← 1
- イ.adjMatrix[u, u] ← 1 adjMatrix[v, v] ← 1
- ウ.adjMatrix[u, v] ← 1
- エ.adjMatrix[u, v] ← 1 adjMatrix[v, u] ← 1
- オ.adjMatrix[v, u] ← 1
- カ.adjMatrix[v, v] ← 1
正解:エ.adjMatrix[u, v] ← 1 adjMatrix[v, u] ← 1
解説:無向グラフでは辺に向きが無いので,頂点u と頂点v を結ぶ辺があればu 行v 列と v 行u 列の両方が1になる(設問にも「対称行列になる」と書かれている)。したがって2か所を1にする必要があり,エが正しい。ウやオのように片側だけを1にすると,対称行列にならない。図1 の辺{1, 3} を例にとると,ウでは1行3列だけが1になり3行1列が0のままで,図2 と食い違う。アとカとイは対角成分(u 行u 列など)を1にしているが,対角成分は「自分自身への辺」を意味し,設問では全て0と決められている。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目B 公開問題」問3
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問126.次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 関数merge は,昇順に整列された整数型の配列data1 及びdata2 を受け取り,これらを併合してできる昇順に整列された整数型の配列を返す。 関数merge をmerge({2, 3}, {1, 4}) として呼び出すと,/*** α ***/ の行は □ 。 〔プログラム〕 ○整数型の配列: merge(整数型の配列: data1, 整数型の配列: data2) 整数型: n1 ← data1の要素数 整数型: n2 ← data2の要素数 整数型の配列: work ← {(n1 + n2)個の 未定義の値} 整数型: i ← 1 整数型: j ← 1 整数型: k ← 1 while ((i ≦ n1) and (j ≦ n2)) if (data1[i] ≦ data2[j]) work[k] ← data1[i] i ← i + 1 else work[k] ← data2[j] j ← j + 1 endif k ← k + 1 endwhile while (i ≦ n1) work[k] ← data1[i] i ← i + 1 k ← k + 1 endwhile while (j ≦ n2) work[k] ← data2[j] /*** α ***/ j ← j + 1 k ← k + 1 endwhile return work
- ア.実行されない
- イ.1 回実行される
- ウ.2 回実行される
- エ.3 回実行される
正解:イ.1 回実行される
解説:data1={2, 3},data2={1, 4} で,n1=2,n2=2 である。最初の while は,どちらの配列にもまだ要素が残っている間だけ回る。1周目は data1[1]=2 と data2[1]=1 を比べ,2 ≦ 1 は偽なので work[1] に1を入れて j=2。2周目は 2 ≦ 4 が真なので work[2] に2を入れて i=2。3周目は 3 ≦ 4 が真なので work[3] に3を入れて i=3。ここで i が n1 を超えたので最初の while を抜ける。次の while は i ≦ n1 が偽なので1度も回らない。最後の while は j=2 ≦ n2=2 なので1回だけ回り,work[4] に4を入れる。この行が /*** α ***/ なので1回実行される。よってイ。最後まで残るのは片方の配列だけで,この例では data2 の4が1つ残っている。両方の while が回ることはない。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目B 公開問題」問4
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問127.次のプログラム中の [a] ~ [c] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。 一度の注文で購入された商品のリストを,注文ごとに記録した注文データがある。表に,注文データの例を示す。 注文データから,商品x と商品y とが同一の注文で購入されやすい傾向を示す関連度Lxy を,次の式で計算する。 ここで,Mxy は商品x と商品y とが同一の注文で購入された注文数,Kx は商品x が購入された注文数,Ky は商品y が購入された注文数を表す。表の例では,MAB が2,全注文数が6,KA が4,KB が3 であるので,商品A と商品B の関連度LAB は,(2 × 6) / (4 × 3) = 1.0 である。 手続putRelatedItem は,大域変数orders に格納された注文データを基に,引数で与えられた商品との関連度が最も大きい商品のうちの一つと,その関連度を出力する。プログラムでは,商品は文字列で表し,注文は購入された商品の配列,注文データは注文の配列で表している。注文データには2 種類以上の商品が含まれるものとする。また,注文データにある商品以外の商品が,引数として与えられることはないものとする。 〔プログラム〕 // 注文データ(ここでは表の例を与えている) 大域: 文字列型配列の配列: orders ← {{"A", "B", "D"}, {"A", "D"}, {"A"}, {"A", "B", "E"}, {"B"}, {"C", "E"}} ○putRelatedItem(文字列型: item) 文字列型の配列: allItems ← ordersに含まれる文字列を 重複なく辞書順に格納した配列 // 表の例では {"A", "B", "C", "D", "E"} 文字列型の配列: otherItems ← allItemsの複製から値がitemである 要素を除いた配列 整数型: i, itemCount ← 0 整数型の配列: arrayK ← {otherItemsの要素数個の0} 整数型の配列: arrayM ← {otherItemsの要素数個の0} 実数型: valueL, maxL ← -∞ 文字列型の配列: order 文字列型: relatedItem for (orderにordersの要素を順に代入する) if (orderのいずれかの要素の値がitemの値と等しい) itemCountの値を1増やす endif for (iを1からotherItemsの要素数まで1ずつ増やす) if (orderのいずれかの要素の値がotherItems[i]の値と等しい) if (orderのいずれかの要素の値がitemの値と等しい) [a] の値を1増やす endif [b] の値を1増やす endif endfor endfor for (iを1からotherItemsの要素数まで1ずつ増やす) valueL ← (arrayM[i] × [c]) ÷ (itemCount × arrayK[i]) /* 実数として計算する */ if (valueLがmaxLより大きい) maxL ← valueL relatedItem ← otherItems[i] endif endfor relatedItemの値とmaxLの値をこの順にコンマ区切りで出力する

- ア.[a]arrayK[i] [b]arrayM[i] [c]allItemsの要素数
- イ.[a]arrayK[i] [b]arrayM[i] [c]ordersの要素数
- ウ.[a]arrayK[i] [b]arrayM[i] [c]otherItemsの要素数
- エ.[a]arrayM[i] [b]arrayK[i] [c]allItemsの要素数
- オ.[a]arrayM[i] [b]arrayK[i] [c]ordersの要素数
- カ.[a]arrayM[i] [b]arrayK[i] [c]otherItemsの要素数
正解:オ.[a]arrayM[i] [b]arrayK[i] [c]ordersの要素数
解説:式の3つの量が,プログラムのどの変数に当たるかを対応づける。 Kx(商品x が買われた注文数)は itemCount である。これは外側のループで「注文に item が入っていれば1増やす」としているところで数えている。 [b]は,注文に otherItems[i] が入っていれば無条件に1増える位置にある。これは相手の商品が買われた注文数なので Ky,つまり arrayK[i] である。 [a]は,そのさらに内側で「注文に item も入っている」ときだけ1増える位置にある。これは両方が同じ注文で買われた注文数なので Mxy,つまり arrayM[i] である。 最後の計算式は valueL ← (arrayM[i] × [c]) ÷ (itemCount × arrayK[i]) で,式の (Mxy × 全注文数) ÷ (Kx × Ky) と並べると [c] は全注文数である。全注文数は注文データの件数なので ordersの要素数。表の例では6になる。 したがってオ。allItemsの要素数(商品の種類数・表の例では5)やotherItemsの要素数(自分を除いた商品数・表の例では4)は注文の件数ではない。
出典:情報処理推進機構「令和6年度 基本情報技術者試験 科目B 公開問題」問5
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問128.16 進小数0.C を10 進小数に変換したものはどれか。
- ア.0.12
- イ.0.55
- ウ.0.75
- エ.0.84
正解:ウ.0.75
解説:16進数の小数第1位は16分の1の位である。C は10進数の12なので,0.C は 12 ÷ 16 = 0.75。よってウ。16進数の1桁は2進数の4桁に当たるので,0.C を2進数にすると 0.1100 で,0.5 + 0.25 = 0.75 と計算しても同じ値になる。アの0.12 は C を12と読んでそのまま小数点以下に並べた値で,位取りをしていない。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目A 公開問題」問1
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問129.双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員G を社員A と社員K の間に追加する。追加後の表のポインタa~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。

- ア.a,b,e,f
- イ.a,e,f
- ウ.a,f
- エ.b,e
正解:ウ.a,f
解説:双方向リストなので,つなぎ替えが要るのは「切れ目の両側」だけである。追加前の並びは 社員A → 社員K → 社員T で,社員A と社員K の間に社員G を入れる。変わるのは,社員A の次ポインタ(社員K を指していたのが社員G を指す)と,社員K の前ポインタ(社員A を指していたのが社員G を指す)の2つだけである。表では前者がa,後者がf なのでウ。社員A の前ポインタb は先頭のままなので0で変わらない。社員T は切れ目から離れているので,次ポインタc も前ポインタd も変わらない。社員K の次ポインタe も社員T を指したままで変わらない。新しく作る社員G のx とy は「追加前と比べて」という条件の外にある。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目A 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問130.次の流れ図において,① → ② → ③ → ⑤ → ② → ③ → ④ → ② → ⑥の順に実行させるために,①においてm とn に与えるべき初期値a とb の関係はどれか。ここで,a,b はともに正の整数とする。

- ア.a=2b
- イ.2a=b
- ウ.2a=3b
- エ.3a=2b
正解:エ.3a=2b
解説:流れ図は,②で m と n が等しいかを見て,等しければ⑥で印字して終わる。等しくなければ③へ進み,m > n なら④で m ← m - n,m < n なら⑤で n ← n - m を行い,また②へ戻る(ユークリッドの互除法を引き算で行う形)。 指定された順は,1回目が③→⑤(m < n),2回目が③→④(m > n),3回目が②→⑥(m = n)である。 1回目に⑤を通るので a < b。ここで n は b - a になる。 2回目に④を通るので a > b - a。ここで m は a - (b - a) = 2a - b になる。 3回目に等しくなるので 2a - b = b - a,すなわち 3a = 2b。よってエ。 検算すると,例えば a = 2,b = 3 のとき,1回目は 2 < 3 で n = 1,2回目は 2 > 1 で m = 1,3回目は 1 = 1 で印字となり,指定の順に一致する。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目A 公開問題」問11
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問131.次のプログラム中の [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】maxNum 【b】i ÷ j の余り が 0 と等しい
- イ.【a】maxNum 【b】i ÷ j の商 が 1 と等しくない
- ウ.【a】maxNum + 1 【b】i ÷ j の余り が 0 と等しい
- エ.【a】maxNum + 1 【b】i ÷ j の商 が 1 と等しくない
正解:ア.【a】maxNum 【b】i ÷ j の余り が 0 と等しい
解説:[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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問132.次の記述中の □ に入れる正しい答えを,解答群の中から選べ。 次のプログラムにおいて,手続proc2 を呼び出すと,□ の順に出力される。 〔プログラム〕 ○proc1() "A" を出力する proc3() ○proc2() proc3() "B" を出力する proc1() ○proc3() "C" を出力する
- ア.“A”,“B”,“B”,“C”
- イ.“A”,“C”
- ウ.“A”,“C”,“B”,“C”
- エ.“B”,“A”,“B”,“C”
- オ.“B”,“C”,“B”,“A”
- カ.“C”,“B”
- キ.“C”,“B”,“A”
- ク.“C”,“B”,“A”,“C”
正解:ク.“C”,“B”,“A”,“C”
解説:proc2 は,まず proc3 を呼ぶので“C”が出る。次に自分で“B”を出す。最後に proc1 を呼ぶので“A”が出て,proc1 の中でさらに proc3 が呼ばれて“C”が出る。したがって“C”,“B”,“A”,“C”の順である。よってク。 キの“C”,“B”,“A”は,proc1 の最後の proc3 を数え落としたときの答えである。
出典:情報処理推進機構「令和5年度 基本情報技術者試験 科目B 公開問題」問2
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問133.次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は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
- ア.1 2 3 4 5
- イ.1 2 3 5 4
- ウ.2 1 3 4 5
- エ.2 1 3 5 4
正解:エ.2 1 3 5 4
解説: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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問134.次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は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)
- ア.{-1, 3, -1, 18, 11}
- イ.{-1, 11, -1, 3, -1}
- ウ.{-1, 11, -1, 18, -1}
- エ.{-1, 18, -1, 3, 11}
- オ.{-1, 18, 11, 3, -1}
正解:エ.{-1, 18, -1, 3, 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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。 -
問135.次のプログラム中の [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

- ア.【a】(vector1[i] × vector2[i])の正の平方根 【b】denominator × (tempの正の平方根)
- イ.【a】(vector1[i] × vector2[i])の正の平方根 【b】denominator + (tempの正の平方根)
- ウ.【a】(vector1[i] × vector2[i])の正の平方根 【b】tempの正の平方根
- エ.【a】vector1[i] × vector2[i] 【b】denominator × (tempの正の平方根)
- オ.【a】vector1[i] × vector2[i] 【b】denominator + (tempの正の平方根)
- カ.【a】vector1[i] × vector2[i] 【b】tempの正の平方根
- キ.【a】vector1[i]の2乗 【b】denominator × (tempの正の平方根)
- ク.【a】vector1[i]の2乗 【b】denominator + (tempの正の平方根)
- ケ.【a】vector1[i]の2乗 【b】tempの正の平方根
正解:エ.【a】vector1[i] × vector2[i] 【b】denominator × (tempの正の平方根)
解説:式の分子は 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
本試験の問題です。出題当時の法令・制度にもとづいているため、その後の改正で現在の扱いと異なる場合があります。