基本情報技術者試験の科目Bの空欄補充問題の解き方を解説|擬似言語で見る判断ポイント
基本情報技術者試験の科目Bを勉強していると、擬似言語の空欄補充問題で手が止まることがあります。
プログラムの一部が空欄になっていて、選択肢から正しい処理や条件を選ぶ問題です。
本文を読んでも、どこを見れば答えが決まるのか分からなくなることはありませんか?
科目Bの空欄補充問題は、暗記だけでは解きにくいです。
ただし、センスだけで解くものでもありません。空欄の前後を見て、変数の役割を確認し、処理の目的から逆算すれば、初心者でも少しずつ判断できるようになります。
この記事では、基本情報技術者試験の科目Bに出る空欄補充問題の解き方を、擬似言語のサンプルを使いながら解説します。
科目Bの空欄補充問題とは¶
まずは、科目Bの空欄補充問題がどのようなものかを整理しておきましょう。
基本情報技術者試験の科目Bは、主にアルゴリズムとプログラミング、情報セキュリティの分野で構成されています。なかでもアルゴリズムとプログラミングでは、擬似言語で書かれたプログラムを読んで、処理の流れを考える力が問われます。
空欄補充は流れを読む問題です¶
空欄補充問題では、プログラムの一部が抜けています。
受験者は、問題文の仕様やプログラム全体の流れを読み取り、空欄に入る正しい条件式や代入文を選びます。つまり、単に記号の意味を知っているだけでは足りません。
大切なのは、このプログラムは何をしたいのかを先に理解することです。
最大値を探しているのか、条件に合うデータを数えているのか、配列を並べ替えているのか。目的が見えると、空欄に必要な処理も見えやすくなります。
科目Bでは擬似言語の読解が中心になります¶
科目Bでは、PythonやJavaなど特定の言語の知識ではなく、擬似言語を使って処理を読み取る力が問われます。
擬似言語の基本に不安がある方は、先にこちらの記事を確認しておくと理解しやすいです。
【関連記事】擬似言語とは?IT初心者にもわかる意味・書き方・プログラミングとの違いをやさしく解説
擬似言語は実在のプログラミング言語とは少し違いますが、考え方はかなり近いです。変数、代入、条件分岐、繰り返し、配列を読む力が、空欄補充問題の土台になります。
空欄補充問題で最初に見るべき場所¶
空欄補充問題を見ると、つい空欄そのものに目が行きます。
でも、いきなり空欄だけを見ても答えは出ません。空欄は、前後の処理や問題文の仕様とセットで考える必要があります。
まず問題文の目的を確認する¶
最初に見るべきなのは、プログラムの目的です。
たとえば、点数の配列から合格者数を数える処理なのか、配列の中から最大値を探す処理なのかで、空欄に入る条件はまったく変わります。
目的を確認せずにコードを読むと、ただ記号を追うだけになってしまいます。
私も実務で他人のコードを読むとき、いきなり細部には入りません。まず、この処理は何を実現したいのかを確認します。
次に空欄の種類を見分ける¶
空欄には、いくつかの種類があります。
よく出るパターンを整理すると、次のようになります。
| 空欄の種類 | 入りやすい内容 | 判断ポイント |
|---|---|---|
| 条件式の空欄 | x > max など |
ifやwhileの目的を見る |
| 代入文の空欄 | count ← count + 1 など |
どの変数を更新するか見る |
| 配列アクセスの空欄 | data[i] など |
何番目の値を使うか見る |
| ループ範囲の空欄 | 1からnまで など |
何回繰り返すか見る |
| returnの空欄 | return result など |
関数が何を返すか見る |
空欄の種類が分かると、見るべき場所が絞れます。
条件式なら、分岐したあとに何をしているかを見ます。代入文なら、更新される変数の役割を見ます。
空欄補充問題の基本的な解き方¶
ここからは、空欄補充問題を解くときの流れを具体的に見ていきます。
難しい問題でも、基本の手順は同じです。焦って選択肢を見る前に、まずはプログラムの構造を整理しましょう。
手順1:入力と出力を確認する¶
最初に、何を受け取って何を返すのかを確認します。
関数であれば、引数と戻り値を見ます。手続であれば、どの変数や配列が変化するのかを見ます。
たとえば、合計を返す関数なら、空欄には合計を更新する処理や、合計を返す処理が入りやすいです。
逆に、最大値を返す関数なら、比較条件や最大値の更新が空欄になりやすいです。入力と出力を見るだけで、候補をかなり絞れます。
手順2:変数の役割を日本語にする¶
次に、変数の役割を日本語にします。
sumなら合計、countなら件数、maxなら最大値、iなら繰り返し用の番号であることが多いです。変数名が短くても、役割を仮に置くと読みやすくなります。
| 変数名の例 | よくある役割 | 読むときの意識 |
|---|---|---|
i |
配列の番号、ループ回数 | 今何番目かを追う |
sum |
合計 | 何を足しているか見る |
count |
件数 | どんな条件で増えるか見る |
max |
最大値 | いつ更新されるか見る |
flag |
判定結果 | trueとfalseの意味を見る |
もちろん、問題によって変数名の意味は変わります。
それでも、変数の役割を仮説として置くだけで、空欄の意味を考えやすくなります。
手順3:空欄の前後を読む¶
空欄補充で一番大切なのは、空欄の前後です。
空欄の直前で何を準備しているのか。空欄の直後でどの変数を使っているのか。ここを見ると、必要な処理が見えてきます。
たとえば、空欄の直後に count ← count + 1 があるなら、その空欄は件数を数えるための条件式かもしれません。
逆に、空欄の直後に max ← data[i] があるなら、今見ている値が最大値より大きいかを判定している可能性が高いです。
サンプル1:件数を数える空欄補充¶
ここからは、具体的なサンプルで考えてみましょう。
まずは、配列の中から60点以上の人数を数える処理です。
点数 ← {72, 55, 80, 40, 91}
人数 ← 0
for (i を 1 から 5 まで 1 ずつ増やす)
if ( 空欄 )
人数 ← 人数 + 1
endif
endfor
print(人数)
このプログラムの目的は、60点以上の人数を数えることです。
人数が増えるのは、今見ている点数が60点以上のときです。したがって、空欄には次の条件が入ります。
点数[i] >= 60
この例では、72、80、91が条件を満たすので、最終的に人数は3になります。
判断ポイントは更新される変数です¶
この問題では、空欄の直後に 人数 ← 人数 + 1 があります。
つまり、空欄は人数を増やすかどうかの条件です。ここに気づければ、選択肢に似た式が並んでいても判断しやすくなります。
私の感覚でも、条件式を見るときは、条件が真になったときに何が起きるかを必ず確認します。
条件だけを見ても意味は決まりません。条件の中身と、その後の処理をセットで見ることが大切です。
サンプル2:最大値を求める空欄補充¶
次に、最大値を求める処理を見てみましょう。
これは科目Bでも頻出の考え方です。まず仮の最大値を置いて、配列を順番に見ながら更新していきます。
data ← {12, 35, 7, 48, 20}
max ← data[1]
for (i を 2 から 5 まで 1 ずつ増やす)
if ( 空欄 )
max ← data[i]
endif
endfor
print(max)
このプログラムは、配列dataの中から最大値を探しています。
空欄の直後には max ← data[i] があります。つまり、今見ているdata[i]を新しい最大値として採用する条件が入ります。
data[i] > max
現在の最大値よりも、今見ている値の方が大きい場合だけ更新します。
最大値問題は更新条件を探す¶
最大値や最小値の問題では、空欄に比較条件が入ることが多いです。
最大値なら、今の値が現在の最大値より大きいかを見ます。最小値なら、今の値が現在の最小値より小さいかを見ます。
ここで、data[i] < max のような逆の条件を選ぶと、まったく違う結果になります。
不等号の向きは、小さな違いに見えて大きな失点につながります。焦らず、どちらを更新したいのかを日本語で確認しましょう。
サンプル3:配列の探索で考える空欄補充¶
次は、配列の中に目的の値があるかを探す処理です。
探索問題では、見つかったかどうかを表す変数がよく使われます。これをフラグと呼ぶことがあります。
data ← {4, 8, 15, 16, 23}
target ← 15
found ← false
for (i を 1 から 5 まで 1 ずつ増やす)
if ( 空欄 )
found ← true
endif
endfor
print(found)
このプログラムは、dataの中にtargetと同じ値があるかを調べています。
foundがtrueになるのは、今見ているdata[i]がtargetと等しいときです。したがって、空欄には次の条件が入ります。
data[i] = target
この例では、data[3]が15なので、foundはtrueになります。
フラグは意味を決めてから読む¶
foundのような論理型の変数は、何を表すのかを先に決めると読みやすくなります。
foundがtrueなら見つかった、falseならまだ見つかっていない。こう考えると、空欄に必要な条件が自然に見えてきます。
科目Bでは、フラグの意味を読み間違えると選択肢で迷いやすいです。
特に、notが出てくる問題では混乱しやすいので、trueとfalseの意味をメモしておくと安心です。
空欄補充でよくある失敗¶
ここまで解き方を見てきましたが、初心者がやりがちな失敗もあります。
先に失敗パターンを知っておくと、本番で同じミスを避けやすくなります。
選択肢から先に見てしまう¶
空欄補充問題では、選択肢から先に見ると迷いやすいです。
どれもそれっぽく見えるからです。特に、> と < が逆になっているだけの選択肢や、and と or が違うだけの選択肢は、焦ると見間違えます。
まず自分で空欄に入りそうな処理を予想しましょう。
その後で選択肢を見ると、近いものを選びやすくなります。これは実務でバグの原因を探すときにも近い考え方です。
ループの範囲を見落とす¶
繰り返しの範囲を見落とすと、空欄の意味を誤解しやすくなります。
たとえば、配列の1番目を初期値として使っている場合、ループは2番目から始まることがあります。最大値を探す処理ではよく出るパターンです。
max ← data[1]
for (i を 2 から n まで)
...
endfor
この場合、data[1]はすでに確認済みです。
だからループは2から始まります。ここを見落として、1から始まる選択肢を選ぶと間違えることがあります。
配列の要素番号を見落とす¶
科目Bの問題では、配列の要素番号が1から始まると指定されることがあります。
実際のプログラミング言語では0から始まるものも多いので、経験者ほど逆に混乱することがあります。問題文の注記を必ず確認しましょう。
擬似言語の記号や配列のルールを整理したい方は、こちらも参考になります。
【関連記事】擬似言語の記号・記述形式一覧|試験前のチェック早見表
空欄補充問題を解くための判断ポイント¶
ここで、空欄補充問題で見るべき判断ポイントをまとめます。
ただし、丸暗記するというより、問題を解くときのチェックリストとして使うイメージです。
| 判断ポイント | 見る場所 | 例 |
|---|---|---|
| 処理の目的 | 問題文の冒頭 | 最大値を求める、件数を数える |
| 変数の役割 | 宣言と初期値 | countは件数、sumは合計 |
| 空欄の前後 | 空欄の直前直後 | 更新処理、return文 |
| ループ範囲 | forやwhile | 1から始まるか、2から始まるか |
| 条件の真偽 | ifの中 | 真のとき何が起きるか |
| 配列の添字 | data[i] |
今何番目を見ているか |
こうして見ると、空欄補充問題は勘で選ぶ問題ではありません。
読むべき場所を順番に確認すれば、答えの候補はかなり絞れます。
エンジニア歴10年の私が意識している読み方¶
ここで少し、実務目線の話をします。
私はエンジニアとして10年ほど働いてきましたが、コードを読むときに一番大切だと感じるのは、速さより正確さです。
いきなり全体を理解しようとしない¶
複雑なコードを見たとき、最初から全部を理解しようとすると疲れます。
実務でも、まずは入力、出力、重要な変数だけを見ます。細かい処理は、そのあとで追います。
科目Bの空欄補充問題も同じです。
最初からすべての行を同じ重さで読む必要はありません。空欄に関係する変数と、その前後の処理を優先して読みましょう。
小さい値で試すと見えることがある¶
実務でよくやるのが、小さいデータで試すことです。
配列が100個あるなら、まず3個だけで考えます。ループが何十回も回るなら、最初の2回だけを表にします。
科目Bの問題でも、具体的な値を入れて考えると流れが見えやすくなります。
頭の中だけで考えるより、紙に書いてトレースした方が確実です。これは初心者だけでなく、現場のエンジニアでも同じです。
空欄補充問題の勉強法¶
最後に、空欄補充問題の勉強法を紹介します。
いきなり難しい過去問を解くより、短いコードで空欄の意味を考える練習をした方が伸びやすいです。
短いコードで予想してから解く¶
最初は、5行から10行くらいの短いコードで練習しましょう。
空欄を見たら、すぐ選択肢を見るのではなく、まず自分で入る処理を予想します。その後で選択肢と照らし合わせると、考える力がつきます。
擬似言語の勉強方法を全体的に知りたい方は、こちらの記事も参考になります。
【関連記事】擬似言語の勉強方法とは?IT初心者でも無理なく身につく学習ステップを解説
間違えた理由を残す¶
空欄補充問題は、正解したかどうかだけを見るともったいないです。
間違えたときに、なぜ間違えたのかを残しましょう。不等号の向きなのか、ループ範囲なのか、配列の番号なのかで、次の対策が変わります。
自分のミスの傾向が分かると、本番で注意すべき場所も分かります。
私も実務で同じようなバグを繰り返さないように、原因をメモすることがあります。試験勉強でも、間違いの記録はかなり効果があります。
まとめ:空欄補充は前後の処理から逆算しよう¶
基本情報技術者試験の科目Bの空欄補充問題は、最初は難しく見えるかもしれません。
でも、解き方の順番を知ると、少しずつ読めるようになります。大切なのは、空欄だけを見ないことです。
まず問題文から処理の目的を確認します。
次に、変数の役割、初期値、空欄の前後、ループ範囲、配列の添字を見ます。条件式なら、真になったときに何が起きるかを確認しましょう。
空欄補充は、勘で選ぶ問題ではありません。
擬似言語の流れを読み、必要な処理を逆算する問題です。最初は時間がかかっても、短いコードで練習すれば判断できる場面が増えていきます。
科目Bで大切なのは、プログラムを丸暗記することではありません。
処理の流れを自分で追えるようになることです。焦らず、まずは小さな空欄補充問題から練習していきましょう。