【基本情報】コード掲載!科目B問2「比較演算子と選択処理のプログラム」について解説

20231105_sample_b_q2 資格試験

基本情報の午後試験はプログラム問題です.

科目B問題を解けるようになるにはプログラムを元に自分でコードを書いてみるのが1番良いでしょう.

今回は科目B問2「比較演算子と選択処理のプログラム」の解説とそのコードを紹介します..
プログラムを元にPythonで書き直しました.

Pythonで書いてみたので是非手元で実行してみてください.

サンプル問題 科目B 問2「比較演算子と選択処理のプログラム」

問題文は以下のとおりです.
fizzBuzz問題ですね.

問2 問題文と回答選択肢|クリックして拡大できます
サンプル問題[科目B]問2 比較演算と選択処理のプログラム

Pythonでプログラムを書く

プログラムをPythonで書き換えました.

def fizzBuzz(num: int):
    if (num % 3 == 0 and num % 5 == 0): #この条件式がtrueのとき他の処理は実行されない a
        result = '3と5で割り切れる' # a
    elif (num % 3 == 0):
        result = '3で割り切れる' # 1つ目がfalseでこの条件式がtrueのとき出力される b
    elif (num % 5 == 0): # b
        result = '5で割り切れる' # 1, 2つ目がfalseでこの条件式がtrueのとき出力される c 
    else:
        result = '3でも5でも割り切れない' # すべてfalseのときに出力される c
    
    return result

print(fizzBuzz(3))
print(fizzBuzz(5))
print(fizzBuzz(15))
print(fizzBuzz(17))
プログラムの実行結果|クリックして拡大できます

よくあるfizzbuzz問題ですが甘く見てはいけません.
3の倍数,5の倍数,15の倍数,それ以外の数を入れて検算するとミスが減るのでおすすめです.

  • aは「3と5」
  • bは「3」
  • cは「5」

この順番でa, b, cに数字が入りました.
よって答えは「ウ」になります.

ポイント 公倍数を先に処理する

fizzbuzzでは素数よりも先に公倍数で割れるか確認しましょう.

先に素数で割るとこのような結果になります.

3で割る処理を初めに持ってきた場合|クリックして拡大できます
def fizzBuzz(num: int):
    if (num % 3 == 0):
        result = '3で割り切れる'
    elif (num % 5 == 0):
        result = '5で割り切れる'
    elif (num % 3 == 0 and num % 5 == 0):
        result = '3と5で割り切れる'
    else:
        result = '3でも5でも割り切れない' # すべてfalseのときに出力される
    
    return result

print(fizzBuzz(3))
print(fizzBuzz(5))
print(fizzBuzz(15))
print(fizzBuzz(17))

15のときは「3と5で割り切れる」と表示したいですが「3で割り切れる」と表示されています.

これは15が3でも割り切れるためです.
そのため条件式は真となり後の処理まで実行されません.

後の処理が実行されるためには前の条件式が偽である必要があります.

実行順番を意識することは大切ですね.

まとめ

今回は科目B問2「比較演算子と選択処理のプログラム」について紹介しました.

fizzbuzz問題懐かしいですね.
研修で取り組んだ人も多いのではないでしょうか.

簡単だと見くびっていると間違えてしまうので注意が必要です.

fizzbuzzは素数で割れることを先に確認してはいけません.
必ず公倍数で割れることから確認して後で素数で割れることを確認するようにしましょう!