解答するときの注意
記号で答える問題のほか、【3】5は数値を答えます。【7】⑶⑷の複数解答問題は、問ごとにすべて正答して得点になります。
流れ図は本ページでは擬似コード(字下げでループの範囲を表現)に書き直して収録しています。実際の図はPDFで確認してください。
解説の凡例
すべての問題で、次の表示を共通して使用します。
各設問の問題文、プログラム、流れ図(擬似コード)、解答群を示します。
同じ分野の問題に共通して使える判断基準です。
設問ごとに、正答の根拠、処理の追跡、他の選択肢が不適切な理由を示します。
添字の範囲や比較の向きなど失点しやすい箇所です。
問題PDF末尾の審査基準に基づく最終的な解答です。
出典:公益財団法人 全国商業高等学校協会主催 令和7年度 第73回 情報処理検定試験 プログラミング 第1級(審査基準は問題PDF末尾に収録)
問題・審査基準PDF本記事は全商協会による公式解説ではありません。
設問一覧
正答一覧
| 番号 | 主な論点 | 正答 |
|---|---|---|
| 【1】 | 用語選択 | 1 カ 2 コ 3 イ 4 シ 5 キ |
| 【2】 | 用語と説明文 | 1 ウ 2 ク 3 ア 4 カ 5 ケ |
| 【3】 | 用語・計算 | 1 イ 2 ウ 3 ウ 4 ア 5 4秒 |
| 【4】 | VBAプログラム | ⑴ オ ⑵ イ ⑶ エ ⑷ エ ⑸ ア |
| 【5】 | 流れ図(参加者数一覧表) | ⑴ ケ ⑵ ア ⑶ オ ⑷ ク ⑸ ウ |
| 【6】 | 流れ図(成績一覧表) | ⑴ エ ⑵ キ ⑶ カ ⑷ イ ⑸ コ |
| 【7】 | 流れ図(売上分析) | ⑴ タ ⑵ シ ⑶ ❶ス ❷キ ⑷ ❶ケ ❷ア ⑸ カ |
設問別解説
【1】用語選択
問題文
一般的な解法
用語問題の判断基準
- 各説明文がどの分野の話なのかを確認。
- その分野に関する用語を解答群から確認し、複数ある場合には違いに着目する。
- その違いに着目して説明文を再度読み、正解を導く。
解答群のうち、通信や電子メールで上げられる用語は HTTP、SMTP、POP の3つ。
HTTP(Hyper Text Transfer Protocol)は、主にwebページの配受信で使用される通信規約。
SMTP(Simple Mail Transfer Protocol)は、主にメールの送信で使用される通信規約。
POP(Post Office Protocol)は、主にメールの受信に使われる通信規約。
問題文では「電子メールの受信」に用いられるプロトコルと示しているので、正答はカ.POP
解答群のうち、誤差に関する用語は 桁落ち、情報落ち、丸め誤差 の3つ。
情報落ちは、絶対値の差が極端に大きい2つの値の加減算による誤差のこと。12345 +
0.0000005を計算した際に、0.0000005の情報がデータ容量の関係から抜け落ち、12345として出力されるような誤差のこと。
桁落ちは絶対値の差がほぼない値の加減算により有効数字の桁数が減ることにより発生する誤差。1.23456 - 1.23455 = 0.00001
のような計算。実際には計算対象の値は丸められていたとしても、計算結果にはその結果より下の位の数字は 0 として埋められてしまうため、丸められる前の計算結果について正確に出すことができない。
丸め誤差は四捨五入により生じる誤差のこと。
問題文では「絶対値の差が極端に大きい」とあるので、正答はコ.情報落ち
解答群のうち、「記録したもの」→ログに絡むものは システムログ、アクセスログ の2つ。
システムログは、自社管轄のコンピュータ自体の動き(起動・終了・障害など)を時系列で記録したもの。
アクセスログは、自社管轄のネットワークに、誰がいつどこでどのようにアクセスがあったかを記録したもの。
問題文では「コンピュータ内で起こった動作など」とあるので、正解はイ.システムログ。
解答群のうち、システム評価指標(所謂RASIS)に含まれるのは 完全性、可用性 の2つ。
完全性は、データが欠けや漏れなくそろっているかどうかを示す指標。
可用性は、システムを障害なくいつでも使用できるかどうかを示す指標。稼働率を用いて判断される。
問題文では「継続して稼働し、安定して処理」→いつでも使用できることを言っているので、正解はシ.可用性。
解答群のうち、オブジェクト指向言語に関する用語は カプセル化、インスタンス の2つ。
カプセル化はデータとメソッドを一つのモジュールにまとめること。
インスタンスは「クラス」から生成された「実体」を指す。
問題文に合致するのはキ.カプセル化
【2】用語と説明文の対応
問題文
一般的な解法
対になる用語の区別
- <B群>にある説明文すべてについて、何の用語の説明なのかを考える。
- 合致するものがあるか<A群>から探し、解答する。
ア.
つまるところ、ミスをするような人(fool;フール)でも守る(ploof;プルーフ)という設計思想で、「フールプルーフ」の説明。両手でボタンを押さないと作動しない裁断機などが例。
イ.
社会生活上において発生する、重大な問題につながるような出来事のことを「インシデント」という。
ウ.
ホストアドレス部のビットがすべて1で、全機器に一斉送信するのに使用されるアドレスは「ブロードキャストアドレス」という。
エ.
システムテストのうち、プログラムの中身が求められる条件通りに「そろっているか」を確認するものは「機能テスト」という。
オ.
障害(fault;フォールト)を発生させないように回避(avoidance;アボイダンス)できるように策を尽くす設計思想を「フォールトアボイダンス」という。
カ.
システムが満たすべき機能・性能(=要件)を明確(=定義)する工程を「要件定義」という。
キ.
ネットワークを識別するために、IPv4においてはホストアドレス部をすべて0にした「ネットワークアドレス」が用いられる。
ク.
システムテストのうち、処理速度など、プログラムの中身が求められた条件で「働くか」をテストするのは「性能テスト」という。
ケ.
起こりうる危機(リスク)を認識して対応・管理(マネジメント)する一連のプロセスを、「リスク・マネジメント」という。
コ.
操作・外面レイアウトなど、内部にあって見えないプログラムではなく、我々ユーザが目にできる「外部」の部分の設計を行うのを「外部設計」という。
【3】用語選択と計算
問題文
一般的な解法
- 2進小数の基数変換:
一の位から重みが2^0(=1)、2^1(=2)、2^2(=4)となるように、小数も小数第1位から重みが2^-1(=1/2)、2^-2(=1/4)となっていく。
小数第1位=0.5、第2位=0.25、第3位=0.125 - 転送時間=データ量(bit)÷(回線速度 × 伝送効率)。バイトをビットに直す(×8)。
2進数であらわされた小数を、10進数に直していく。
1.2進小数の加算
1.101(2) = 1 + 0.5 + 0.125 = 1.625 1.111(2) = 1 + 0.5 + 0.25 + 0.125 = 1.875
1.625 + 1.875 = 3.5(2進法では 1.101 + 1.111 = 11.100 → 2 + 1 + 0.5)
暗号化と復号に同じ鍵を使うのは共通鍵暗号方式。n人が参加するネットワークの中で使われる鍵は、n人が自分を除くn-1人との鍵をそれぞれ別個で持つ必要があるため、(重複するものを除いて)合計 n(n-1)/2 個必要となる。
公開鍵方式は暗号化と復号に異なる鍵を使うが、特定の1人に対する鍵はネットワーク内で共通なため、合計 2n 個で済む。
SSL(Secure Socket Layer)はセキュアな通信を実現するための方式。(現在はTLSに代わられている)
プログラム呼び出しの4つの特性
1.リカーシブ(再帰可能)
プログラムを実行中にそのプログラム自身を再度呼び出しても正しく実行できる性質。
2.リロケータブル(再配置可能)
プログラムのどの位置に配置しても正しく実行できる性質。
3.リエントラント(再入可能)
様々なプログラムから同時に呼び出されてもそれぞれ正しく実行できる性質。
4.リユーザブル(再使用可能)
一度使ったプログラムを再度呼び出しても、最初に実行した際の値が残らないなど新しく正しく実行できる性質。
Cookieとは、ユーザの端末に保存される閲覧履歴・ログイン情報のファイルのこと。
MIME(Multipurpose Internet Mail
Extensions)は電子メールで様々なファイルを扱えるようにするための規格。
VoIPはインターネット回線で音声通話ができるための規格。
ビットに直したデータ容量と、伝送効率を加味した実際の回線速度を計算して、転送時間を求める。
5.転送時間
バイト→ビット = 6GB × 8 = 48 Gbit
実際の回線速度 = 16 Gbps × 75% = 12 Gbps
転送時間 = 48Gb ÷ 12 = 4(秒)
【4】問1.VBAプログラム(文字列の挿入法による降順ソート)
問題文
一般的な解法
ソート問題の判断
- ソートの中に3点交換が含まれているか確認。ない→挿入法、ある→最大値・最小値を補完する変数がある→選択法、ない→隣接交換法
- 挿入法:前(後)から順番に、すでに整列された部分と整列されていない先頭の要素とを比較し、その要素が入るべき場所に挿入されるよう、整列されている部分を1つずつ後(前)にずらしていく。
直後に引数として「g」を使っているが、値が定まっていないためここで決定するとわかる。ウ(n-1まで)だと最後の要素が並べ替えられないため、オが答え。
降順なので隣同士の値を比較して、添え字が前の要素が退避値より小さい間、値を後ろの要素に1つずつずらす。
Fish(j + 1) = Fish(j) の部分で、値をずらしているため、その判定のプログラムだとわかる。
比較対象の値はループの頭でFish(0)に入れられているため、この値に比べて、今比較する値(Fish(j))が大きければ処理を実行するようにする。
ずらし終えた位置 Fish(j+1) に Fish(0) に退避しておいた値を入れる。
アの Fish(g) はすでに上書きされている可能性があることに注意。
【4】問2.VBAプログラム(再帰関数による二分探索)
問題文
一般的な解法
二分探索のプログラム
- 二分探索とは、既にソートされている探索先のリストに対し、探索対象の値をそのリストの中央値と比較して大きいか小さいかを判定する。中央値より大きい側(小さい側)にあると判定されれば、リストのうち判定された側の中での中央値を出し、それに対してまた判定する。中央値と同値になるまでそれを繰り返してリスト内から値を見つけ出す方法。
まず、このプログラムでは値が入力されると二分探索を行う関数 Tansaku が実行され、それの戻り値をもとにメッセージが出るようになっている。(このプログラムではあくまで、リストの中にデータが有るか無いかのみを判定するだけである。)
Tansaku の中身を見ると、頭にif文があるが、この条件 Kagen > Jogen というのは探索範囲の下限値のほうが上限値を上回った→データがリスト内に見つからなかったことを表す。このとき戻り値は -1 となる。
(例えば、上記の画像の例では、4回目の判定で上限値と下限値の添字がともに11となることから、探索範囲が1つの要素のみに絞られて決定されるが、その要素に21が格納されていなかった場合は探索を続けようとして、下限値がより大きくなる(上限値がより小さくなる)ため、下限値が上限値を上回ってしまう。)
呼び出し元のプログラムでは、その戻り値が Kekka に代入されていることに注意する。(プロシージャ内のTansakuではない)
目的値が中央値より大きければ上半分(Tyu+1〜Jogen)を再帰的に探索。
【5】流れ図(就職活動イベントの参加者数一覧表:コントロールブレイクと区分集計)
問題文
一般的な解法
- コントロールブレイク(グループトータル):
1か月間、日ごとに集計をしたい場合に、データを読み込んで、日程が変わるごとに小計を出せるようなプログラム。データが対象値によってソートされている必要がある。
ループ2 の比較に使うため Ihi を Ihoz に保存。
処理条件の3の2つ目に「受付時刻をもとに配列 Kubun を探索し、配列 Skei に区分ごとの参加者数を集計する」とある。(3)の処理の下で、Skei(0)を+1(参加者数を数えている)していることから、(3)では区分ごとに参加者数を集計し、ここでは、その集計に必要なSkeiの添字を探索することがわかる。ループ4の中で、添字が1つずつ増えていることから「線形探索」のプログラムだと分かる。受付時刻が区分の終了時刻より大きい間、次の区分へ進むために必要な条件文を当てはめる。
見つかった区分 Soe の参加者数に1を加える。
実行結果と照らし合わせるとここでは「企業名」を表示する。企業名は配列 Kmei に保存されているため、選択肢イかクのどちらかで表示できるが、(4)の部分はループ3の後ろ→企業番号は次のデータで変わっているので保存した Khoz で企業名を表示。
処理条件3の4つ目に「配列 Gkei の1行目には区分ごとの合計を求める」とあるが、このプログラムの中にそれが実行されている箇所はないため、ここで行うと推測する。日計 Gkei(0, f) を合計 Gkei(1, f) に加算する文を選択する。
コの Skei(f) はループ5 で 0 に戻されていることに注意。
【6】流れ図(陸上部の100m走成績一覧表:最速記録の抽出・交換法・備考判定)
問題文
一般的な解法
最小値の抽出と交換法
- 隣接交換法では、添字が前(後)の要素から隣同士を比較してそこで大小関係がどうなっているかをもとに、昇順(降順)に合致していなければ交換を行う。交換は3点交換。
ループ3で「 g ≦ su 」の記述があるが、suは現状初期化されただけなので、このsuに何らかのデータを記録しているとわかる。
この後のソートのプログラムなどで上限値として使われていることから、部員数のカウンタだと推測できる。
部員が変わるごとに集計すればよく、便宜上月曜のデータが読み込まれたタイミングのみカウンタをプラスして、部員数を正確に把握していると考えられる。
データ入力が終了したため、資料4の作業に入っていると推測される。
ループ4の中の「Rec(h,g) → Rec(0,g)」の処理から、資料4の1項め、0行目に最速記録を集計している最中だとわかる。
次のループ4で用いられている添字の開始が2からであり、月曜日が参照されていないことがわかる。
そのため、月曜の記録を仮の最速記録(週)にして、大小比較を進めていると推測される。
同じ人の中での曜日ごとの記録を比較し、より速い(小さい)記録があれば0行目の値を更新する。
比較先(各曜日)の値のほうが小さかったら更新するので、大なり小なりの向きに注意。
下で添字 k が使われているが、初期化されていないためここで設定されると推測する。
こういったバブルソートのプログラムでは、外側のループで参照する範囲を狭めていくとともに、内側のループで比較する場所をずらしていく。そのため、内側のループの上限(下限)値は基本的に外側のループの変数をもとに決まる。
k+1 が j を超えないよう k は j-1 まで。
資料4の3項めから、最速記録の値ごとに表示を変えることがわかる。
3以上に枝分かれする条件分岐の場合、菱形の中に変数1つを入れることで、フローチャートが成立する。
最速記録(週)は Rec の0行目 p 列。行と列を逆にしないよう注意。
【7】流れ図(食器販売店チェーンの売上分析:集計・順位付け・選択法による並べ替え)
問題文
一般的な解法
順位付けと選択法の読み方
- 順位付け:
まず、順位が保存される配列にすべて1を入れて初期化する。
その後、比較対象の要素同士を比較して、順位が下のものに対応する配列の要素を+1していく。 - 選択交換法(セレクションソート):配列のうち順番が未決定の部分の中から最大(最小)の要素を探し、未決定の範囲の一番後(前)の要素と交換していくのを繰り返すことで、並び替える手法。

次の処理で変数 Kin が使用されているが、ここまで出てきていないため、この部分で Kin の値を求めるものと推測する。
資料4の2項めを見ると、売上金額 = 販売数 × 商品単価 - 値引額 とあるので、これをそれぞれ変数に変換している処理を選択する。
単価は Tanka(Cate, Sban)(カテゴリ・商品番号)。
この次から順位付けが行われること、ループ4の f と g の範囲が配列 juni の範囲と合致することから、順位付けに使う配列の初期化を行っていると推測できる。
ループ4 の f が行、ループ5 の g が列なので Juni(f, g) に 1。
次以降のプログラムから、変数hとkを用意する必要があると推測。
h は 1〜9、k は h+1〜10 で全ての組を1回ずつ比較。
仮に①にセを選ぶと、②がキ、サ、いずれでも、kが配列の範囲外に出る。また、イでは順位付けが二重に行われてしまう。
①にスを選んだうえで、②にイが来ると、順位付けが二重に行われてしまう。サにすると、k=10の時が存在しなく、正しく順位付けができない。
② キ.k は h + 1 から 1 ずつ増やして k ≦ 10 の間
資料5の5項めに配列 work を利用し、並び替えるとある。この場合、要素を直接入れ替えるのではなく、workのようなバッファの配列に添字を格納して、その添字のみを入れ替えることで、元の要素を入れ替えずに並び替えを実現できる。juni のように何行かにわたる配列で用いられることが多い。
Work を通した売上金額を比較:Syukei(Ca, Work(r)) > Syukei(Ca, Work(Max)) (降順なのでより大きい値が見つかった)なら Max を更新。
② ア.Syukei(Ca, Work(Max))
並べ替え後のため、添字は Work(g) を使って店舗名と売上金額計を表示。