基本情報【科目B】令和4年度4月サンプル問題問1(条件分岐・以上/以下):前の条件を見落とさないこと

Uncategorized

基本情報技術者試験 科目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以下」だけで正解になります。この仕組みは以下の記事で詳しく解説しています。

【基本情報 科目B】3つ以上の分岐(elseif)の書き方|「上から順に判定」で条件はシンプルに
基本情報技術者試験 科目Bの条件分岐で使う 「3つ以上の分岐」(elseif) の書き方と読み方を、図解で解説します。elseif が 上から順に判定される 仕組みを押さえると、条件をシンプルに書けるようになります。 動画で見たい方はこちら...

(他の選択肢)

  • (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)の基礎が不安な人は、こちらから確認しましょう。

【基本情報 科目B】3つ以上の分岐(elseif)の書き方|「上から順に判定」で条件はシンプルに
基本情報技術者試験 科目Bの条件分岐で使う 「3つ以上の分岐」(elseif) の書き方と読み方を、図解で解説します。elseif が 上から順に判定される 仕組みを押さえると、条件をシンプルに書けるようになります。 動画で見たい方はこちら...

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

基本情報【科目B】令和4年度サンプル問題問2(fizzbuzz):「細かい条件ほど上に」で即答!
基本情報技術者試験 科目Bの「令和4年度(12月公開) サンプル問題 問2」(fizzBuzz・条件分岐)を、図解で解説します。「条件分岐は細かい条件ほど上に書く」 というルールを押さえれば、トレースなしで一発で正解にたどり着けます。 動画...
基本情報【科目B】令和6年度サンプル問題問1(条件分岐):elseifは<前の条件を満たしていない>も条件!
基本情報技術者試験 科目Bの「令和6年度 サンプル問題 問1」(条件分岐・3つの整数の最大値)を、図解で解説します。「return している変数が最大値になる条件は何か」 を逆算するだけで、トレースなしで正解できる入門問題です。 動画で見た...
基本情報科目B-サンプル問題【全44問をがっつり解説】
※一部、執筆途中です。随時アップしていきます。 ※サンプル問題だけを解くのは,非効率です。詳細は以下の動画をご確認ください。 読者限定プレゼント 科目B 演習サイトを無料プレゼント中 ⏱ 2分で終わるアンケートに答えるだけ! ▶ 演習サイト...

関連動画

この問題と同じ「読解系・条件分岐(IF)」の章で、これより前に学ぶ動画です。

講座の全動画はこちら(プレイリスト)。

タイトルとURLをコピーしました