科目B

基本情報技術者試験 科目B サンプル問題(2022年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
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問1(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:カ

覚える知識

if~elseifの条件判定順と境界値

if~elseif~else は上から順に判定され、最初に真になった枝だけが実行される。後ろの条件は前の条件がすべて偽という前提で書けるので、前の条件で除かれた範囲をもう一度書く必要はない。

この問題で必要なこと

elseif は先の if(age が 3 以下)が偽のときだけ評価されるので、この時点で age は 4 以上と分かっている。そのため 300 円の範囲(4〜9 歳)は上限だけを見ればよく、「age が 9 以下」で決まる。age=9 なら 300、age=10 なら else に進んで 500 となり、正解はカ。

ひっかけ

アとキは「9 より小さい」なので 9 歳が 500 円になる(境界の ±1)。エとオは上限が無いので 10 歳以上も 300 円になる。ウも正しく動くが選択肢にない形で、オと同様に「4 より大きい」と書くと、4 歳がすでに前段で除かれていることに気づかず下限を書き足す思い違いを誘う。イは 4 と 9 だけ。