プログラミングの基礎(擬似言語のトレース)
次の関数 isLeap は、西暦 y 年がうるう年なら true を返す。and は or より先に計算する。isLeap(y) が true を返す y はどれか。
○論理型: isLeap(整数型: y)
return y mod 4 = 0 and y mod 100 ≠ 0 or y mod 400 = 0
- A1800
- B1900
- C2000
答えと解説を見る
正解:C. 2000
and が or より優先されるので、条件は (y mod 4 = 0 and y mod 100 ≠ 0) or y mod 400 = 0 と同じ意味です。4で割り切れて100で割り切れない年か、400で割り切れる年がうるう年になります。1800 と 1900 は100で割り切れて400では割り切れないので false です。2000 は400で割り切れるので true になります。
- A. 1800 mod 100 = 0 で and の側は偽、1800 mod 400 = 200 で or の右側も偽なので false です。
- B. 1900 mod 100 = 0 で and の側は偽、1900 mod 400 = 300 で or の右側も偽なので false です。
- C. 正しい。2000 mod 400 = 0 なので true です。