基本情報技術者試験の科目Bの空欄補充問題の解き方を解説|擬似言語で見る判断ポイント
基本情報技術者試験の科目Bで、プログラムの一部が[空欄]になっている問題を見て、「どの選択肢も正しそうに見える」と感じたことはありませんか?
空欄補充の難しさは、空欄に何が入れば、問題文で指定された処理を正しく実現できるかを逆算しなければならない点にあります。
ただし、いきなり選択肢を眺める必要はありません。プログラムの目的を整理し、空欄の役割を見分け、小さな入力値で検証する方法が有効です。
この記事では、条件式・更新式・繰返しの終了条件という3つの代表的な空欄を使い、正解の理由だけでなく、他の選択肢がなぜ誤りかまで解説します。例題は学習用のオリジナル問題で、IPAの実際の出題問題を転載したものではありません。
空欄を見たら「何を求める処理か」「空欄は条件・代入・範囲のどれか」「空欄が正しいときに何が起こるか」を整理し、境界値や反例で選択肢を消していきましょう。
科目Bの空欄補充では何が問われる?¶
基本情報技術者試験の科目Bは、アルゴリズムとプログラミング、情報セキュリティなどを扱う多肢選択式の試験です。試験時間は100分、出題数は20問です。
空欄補充の擬似言語問題では、次のような要素を組み合わせて考えます。
- 変数をいつ初期化・更新するか
ifの条件が真のとき、何をするかforやwhileを何回実行するか- 配列のどの要素を参照するか
- どの値を返せば要求どおりになるか
重要なのは空欄の一行ではなく、処理の前後関係です。
例えば「最大値を求める処理」の中にif ([空欄])があれば、空欄には「今見ている要素が、現在の最大値より大きいときに真になる条件」が必要になります。
空欄を見たときの5つの手順¶
| 手順 | 確認すること | よくある間違い |
|---|---|---|
| 1 | 何を求めるプログラムか | 入力と出力を読まずに選択肢を見る |
| 2 | 空欄の種類は何か | 条件式と更新式を同じ感覚で考える |
| 3 | 主要変数の意味と初期値は何か | カウンタと配列の要素を混同する |
| 4 | 空欄の直前・直後で何が起きるか | 分岐やループ範囲を読み飛ばす |
| 5 | 境界値や反例で確かめられるか | たまたま正しく動く1例だけで決める |
以下の3例題に、この5手順を当てはめていきます。
例題1:最大値を更新する条件式を選ぶ¶
最初は「条件式」の空欄です。配列の添字は1から始まるものとします。
整数型の配列: data ← {12, 7, 18, 14}
整数型: i, largest
largest ← data[1]
for (i を 2 から 4 まで 1 ずつ増やす)
if ([空欄ア])
largest ← data[i]
endif
endfor
問:largestに配列の最大値が残るようにするには、[空欄ア]にどの条件を入れるか。
選択肢
- ア:
data[i] > largest - イ:
data[i] < largest - ウ:
data[i] = largest - エ:
i > largest
何を求める処理か先に確認する¶
このコードの目的は「最大値を求めること」です。largest ← data[1]で、最初の要素12を暫定最大値とします。
その後、iを2から4まで動かし、現在の要素と暫定最大値を比較します。
更新文から条件を逆算する¶
空欄の次の行はlargest ← data[i]です。したがって、現在の要素の方が大きいときだけ、最大値を書き換えたいわけです。
正解はア:data[i] > largestです。
| i | data[i] | 更新前のlargest | data[i] > largest |
更新後のlargest |
|---|---|---|---|---|
| 初期値 | ― | ― | ― | 12 |
| 2 | 7 | 12 | 偽 | 12 |
| 3 | 18 | 12 | 真 | 18 |
| 4 | 14 | 18 | 偽 | 18 |
結果は18です。
ほかの選択肢が誤りの理由¶
- イは小さい要素が現れたときに書き換えるため、最大値を保持できません。
- ウは同じ値が現れたときだけ更新します。より大きい値を取り込めません。
- エは要素の値ではなく添字
iと最大値を比較しています。比較の対象が違います。
空欄の次の行が何を更新するかを先に見ると、正解が決まりやすくなります。
例題2:合計を求める更新式を選ぶ¶
次はifではなく、「代入文」の空欄です。
整数型の配列: numbers ← {3, 6, 2}
整数型: i, total
total ← 0
for (i を 1 から 3 まで 1 ずつ増やす)
total ← [空欄イ]
endfor
問:配列のすべての要素の合計をtotalに残したい。[空欄イ]に入る式はどれか。
選択肢
- ア:
numbers[i] - イ:
total + i - ウ:
total + numbers[i] - エ:
total + 1
「今までの合計」と「現在の要素」を分ける¶
totalはそれまでに集めた合計です。numbers[i]は今見ている要素です。したがって、更新は
total ← total + numbers[i]
となります。正解はウです。
| i | numbers[i] | 更新前のtotal | 更新後のtotal |
|---|---|---|---|
| 1 | 3 | 0 | 3 |
| 2 | 6 | 3 | 9 |
| 3 | 2 | 9 | 11 |
最終値は11です。
ほかの選択肢を考えると、アは直前の要素で上書きするだけ、イは要素ではなく添字を足す、エは要素数を数える処理になります。
似た形のコードでも、合計・件数・現在値のどれを求めているかで正解が変わるというのが判断ポイントです。
例題3:while文の終了条件を選ぶ¶
3つ目は「境界条件」の空欄です。1から4までの整数の合計を求めたいとします。
整数型: i, total
i ← 1
total ← 0
while ([空欄ウ])
total ← total + i
i ← i + 1
endwhile
問:1、2、3、4をすべて1回ずつ加算するには、[空欄ウ]にどの条件を入れるか。
選択肢
- ア:
i < 4 - イ:
i ≦ 4 - ウ:
i > 4 - エ:
i = 4
繰返しの最初と最後を確認する¶
iは1で始まり、ループの最後で1ずつ増えます。4も含めて加算する必要があるので、条件はi ≦ 4です。正解はイです。
| 判定時のi | 条件i ≦ 4 |
処理後のtotal | 処理後のi |
|---|---|---|---|
| 1 | 真 | 1 | 2 |
| 2 | 真 | 3 | 3 |
| 3 | 真 | 6 | 4 |
| 4 | 真 | 10 | 5 |
| 5 | 偽 | ― | ― |
i=5になったとき条件が偽になり、ループは終了します。最終的なtotalは10です。
アでは4を加算せずに終了します。ウとエは最初のi=1で偽なので、最初からループを実行しません。
境界値のミスは、正しいかどうかを一瞬で判定できる¶
<と≦で迷ったら、上限ちょうどの値(今回なら4)を入れてみてください。上限を含めたいかがわかれば、条件を選べます。
発展:同じコードでも「仕様」が違えば条件は変わる¶
例題1では、より大きい値のときだけ最大値を更新しました。しかし、たとえば「同じ最大値が複数あるなら、最後に現れた位置を記録したい」という仕様なら、≧を使う判断が必要になることもあります。
つまり、>と≧のどちらが正しいかは、プログラムの目的と、同値の場合の仕様で決まります。選択肢の見た目だけで覚えるのは避けましょう。
空欄補充でよくある4つの失敗¶
1. 選択肢の印象だけで決める¶
同じ演算子でも、比較する変数や処理目的が違えば正解は変わります。空欄の後の代入や返却処理まで読むことが重要です。
2. 添字の開始位置を勝手に決める¶
配列の添字が0から始まるのか1から始まるのかは、問題の指定に従います。この記事の例題は1から始まる前提です。本番の問題でも必ず確認してください。
3. 「条件が真」の後で何が起きるか見ない¶
ifで真になったあと、変数が増えるのか、フラグが立つのか、最大値が更新されるのかを確認します。真偽だけではなくその結果が何に使われるかを追いましょう。
4. 正しい動作の1例だけで判断する¶
ある入力では偶然同じ結果になる条件式があります。0、1、上限とその前後など、違いが表れる入力で確かめます。
空欄補充の練習問題:自力で選んでみよう¶
最後に、1問だけ確認しましょう。
「配列内で、値が10以上の要素が何個あるか数える」という仕様です。
整数型の配列: values ← {8, 10, 12, 7}
整数型: i, count
count ← 0
for (i を 1 から 4 まで 1 ずつ増やす)
if ([空欄])
count ← count + 1
endif
endfor
選択肢:
- ア:
values[i] > 10 - イ:
values[i] ≧ 10 - ウ:
i ≧ 10 - エ:
values[i] = 10
まず、値が10ちょうどの要素が数えられるべきかを考えてください。
正解はイです。10以上の値は10と12なので、最終的なcountは2になります。アなら12だけ、ウなら該当なし、エなら10だけを数えることになります。
空欄補充を実際の演習につなげる¶
この手順を身につけるには、問題を解き、なぜその選択肢が正しいかまで説明する練習が大切です。
- 記法や代入に不安がある方:Giji Academy「変数と代入」(無料)で基本を復習。
- 最初の問題を試したい方:「擬似言語練習問題」の入門問題へ。
- 条件と繰返しを重点的に鍛えたい方:「条件分岐の練習問題」(有料)や「ループのトレース」(有料)へ。
- 本番レベルの複合問題を解きたい方:練習問題の中級・過去問レベル(有料)に進みましょう。
Giji Academyの問題演習は、入門は無料、基礎・中級・過去問レベルは有料会員向けです。まずは無料範囲で基本を確認し、必要な部分を段階的に練習できます。
空欄補充の前に変数の値を追うのが苦手な場合は、トレース表の書き方も参考になります。
まとめ:空欄補充は「目的」と「前後の処理」から逆算する¶
空欄補充を解くときは、次の順に確認しましょう。
- 目的:最大値・合計・件数・判定など、何を求める処理か。
- 種類:空欄が条件式か、代入式か、繰返し条件か。
- 前後:空欄の結果が次の行でどう使われるか。
- 検証:境界値や反例で正しい選択肢を確かめられるか。
暗記した型に当てはめるだけでなく、「なぜその条件でないといけないか」を説明できるようになると、初見の問題にも対応しやすくなります。