科目B

基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問2

次のプログラム中の a ~ c に入れる正しい答えの組合せを,解答群の中から選べ。 関数 fizzBuzz は,引数で与えられた値が,3 で割り切れて 5 で割り切れない場合は“3 で割り切れる”を,5 で割り切れて 3 で割り切れない場合は“5 で割り切れる”を,3 と 5 で割り切れる場合は“3 と 5 で割り切れる”を返す。それ以外の場合は“3 でも 5 でも割り切れない”を返す。 〔プログラム〕
○文字列型: fizzBuzz(整数型: num)
  文字列型: result
  if (num が a で割り切れる)
    result ← "aで割り切れる"
  elseif (num が b で割り切れる)
    result ← "bで割り切れる"
  elseif (num が c で割り切れる)
    result ← "cで割り切れる"
  else
    result ← "3 でも 5 でも割り切れない"
  endif
  return result
答えを選ぶ

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

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

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

答えと解説を見る

正解:ウ

覚える知識

条件分岐の判定順序(範囲の狭い条件を先に)

多分岐では上から順に判定し、最初に真になった分岐だけを実行する。包含関係がある条件は、範囲の狭いもの(両方を満たす場合)を先に書く。

この問題で必要なこと

if〜elseif は最初に当てはまった分岐だけを実行する。「3で割り切れる」を先に判定すると、15 のような 3と5 の両方で割り切れる数がそこで止まってしまう。なので一番狭い条件「3と5」を a に置き、その後に 3、5 と並べるウが正解。

ひっかけ

説明文の順(3→5→3と5)のまま並べると、15 が「3で割り切れる」と判定され、「3と5」の分岐に永久に届かない(ア・イ・エ・オ)。