基本情報技術者試験 科目Bの「令和4年度4月 サンプル問題 問1」(条件分岐・入場料・以上/以下)を、図解で解説します。「最初の分岐を満たしていない」ことも条件となる、という条件分岐の定番ポイントが問われます。
動画で見たい方はこちら▼
問題(令和4年度4月 サンプル問題 問1)
次のプログラム中の【 】に入れる正しい答えを,解答群の中から選べ。
ある施設の入場料は,0歳から3歳までは100円,4歳から9歳までは300円,10歳以上は500円である。関数 fee は,年齢を表す0以上の整数を引数として受け取り,入場料を返す。
○整数型:fee(整数型:age)
整数型:ret
if(age が 3 以下)
ret ← 100
elseif(【 】)
ret ← 300
else
ret ← 500
endif
return ret
解答群
ア (age が 4 以上) and (age が 9 より小さい)
イ (age が 4 と等しい) or (age が 9 と等しい)
ウ (age が 4 より大きい) and (age が 9 以下)
エ age が 4 以上
オ age が 4 より大きい
カ age が 9 以下
キ age が 9 より小さい
本番さながらの環境で解いてみたい方はこちら↓
解説
正解は カ age が 9 以下 です。
① 【 】の分岐が真のとき実行されるのは ret ← 300(入場料を300円にする処理)です。
② 問題文より、入場料が300円になるのは「4歳から9歳まで」。
③ 最初の if で age が 3 以下 を判定済みなので、elseif(【 】) に 到達する時点で「3以下ではない」=「4以上」が確定 しています。
④ あとは「9歳まで」かどうかを判定すればよいので、正解は カ age が 9 以下 です。
Point: 前の条件が「下限」を兼ねる
elseif は前の条件が偽(false)のときだけ判定されます。今回は「3以下」ではない(つまり、4以上の)時だけelseif の判定が行われるので、上限の「9以下」だけで正解になります。この仕組みは以下の記事で詳しく解説しています。

(他の選択肢)
- ア
(age が 4 以上) and (age が 9 より小さい)… 「9より小さい」に 9歳が含まれない ため誤り。 - ウ
(age が 4 より大きい) and (age が 9 以下)… 「4より大きい」に 4歳が含まれない ため誤り。
Point: 「以下/より小さい」「以上/より大きい」を取り違えない
「9以下」は9を含み、「9より小さい」は9を含みません。「4以上」は4を含み、「4より大きい」は4を含みません。以下、以上、より下、より上を正確に理解しましょう。
Point:「4以上 and 9以下」も正解では?
「(age が 4 以上) and (age が 9 以下) も正解じゃないの?」と思った人——その感覚はとても正しいです。これは プログラムとしても正しく動くので、実際に正解になり得ます。前段の if (age が 3 以下) が無くても、この1行だけで「4歳〜9歳」を表せます。
実は開発の現場(実務)では、(age が 4 以上) and (age が 9 以下) のように 条件を省略せず全部書くことが推奨される場合があります。その行だけ見れば「4歳〜9歳が対象」と一目で分かるからです。今回の正解 age が 9 以下 は、上の 3 以下 の分岐まで読まないと「何が300円になるのか」が分かりません。
一方、基本情報の試験では、読みやすさよりも「無駄のない記述(効率重視)」が選ばれる傾向にあります。elseif に来た時点で「3以下ではない=4以上」が確定しているので、4 以上 の判定は不要、という考え方です。
なので本問のように 4以上 and 9以下 が選択肢に並ぶことは、まずありません。出るのは「上の条件も踏まえた最小の表現(9 以下)」のほうです。「両方書いても正しいのに」とモヤッとしても、試験では 前の条件を活かした最小の条件 を選べばOK、と割り切りましょう。
まとめ
条件分岐の穴埋めは、elseif に来た時点で「前の条件は偽」が確定していることを使うと、書くべき条件が最小限に絞れます。あとは「以下/より小さい」などの境界を取り違えないこと。この2点で確実に解けます。
関連リンク
条件分岐(IF)の基礎が不安な人は、こちらから確認しましょう。

同じ条件分岐(IF)の関連問題です。



関連動画
この問題と同じ「読解系・条件分岐(IF)」の章で、これより前に学ぶ動画です。
講座の全動画はこちら(プレイリスト)。
