課題 [3] プログラムの流れの分岐(7/9)

問 7(提出プログラム名:ex0307.c)

西暦(整数)を読み込み,その年が閏(うるう)年かどうかを出力するプログラムを次の手順に従って作成しなさい.
提出するソースファイル(ソースプログラム)のファイル名は ex0307.c としなさい.

【プログラムとして実現する処理手順】必ずこれに従うこと.さもなくば不正解とする.
① 西暦として整数 y を読み込む.
② もし y400 の倍数ならば◯◯◯◯年は閏年です」と出力する.
③ そうでない(②ではない)場合,
 y100 の倍数ではないが,4 の倍数ではあるならば「◯◯◯◯年は閏年です」と出力する.
④ そうでない(②でも③でもない)場合は◯◯◯◯年は閏年ではありませんと出力する.

【ヒント】
上の手順では「上から順番に条件のチェックをやって,該当しなければ別の条件をチェックする」というパターンになっているので if ... else if ... else ... という構造を使うとよいです.

if 文での条件チェックですが,「y400 の倍数である」というのは「 y % 400 == 0 」という条件式になり,「y100 の倍数ではない」というのは「 y % 100 != 0 」という条件式になります.

【補足説明】
意外と知られていませんが,4 の倍数の年(夏季オリンピックの年)が必ず閏年というわけではありません
閏年はその他の年よりも 1 日多いですが,これは地球の公転がぴったり 365 日ではないため,4 年に 1 回だけは 1 日増やしてズレを調整しようとしたものです.ただし,それでも微妙なズレが生じてしまう(逆にちょっとだけ長くなる)ため,100 年に 1 回だけは閏年でない年を作って再調整をしています.すなわち,2100年は 4 の倍数の年ですが閏年ではありません
しかしそれでもなお調整が必要な(そうすることで今度はちょっとだけ短い)ため,400 年に 1 回だけはやっぱり閏年にしているのです.2000 年は閏年でしたが,実はこれはかなり珍しいケースであり,400 年に 1 回しか巡ってこない特別な閏年だったのです.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    出力に際して「 2000 年は」が「2000 が」になってしまわないよう(「年」を忘れないよう)注意せよ
年(西暦)を入力してください:2000
2000 年は閏年です
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
年(西暦)を入力してください:2024
2024 年は閏年です
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
年(西暦)を入力してください:2100
2100 年は閏年ではありません
  • 【プログラムの実行結果】(その4)赤字は実行時にキーボードから入力する内容
年(西暦)を入力してください:2022
2022 年は閏年ではありません

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
  (例1)上の3種類の実行例を試していない.あるいは結果をよく確認していない.
  (例2)表示内容の語尾が「です」,「ではありません」になっていない.
  (例3)「〇〇〇〇年は」と表示させるのを忘れている.
■ プログラムの内容が問題文で与えられている手順と違っている
 目的の動作を実現する方法は複数あるので問題文で与えられている手順以外でもうまく動く
 プログラムを作ることは可能ではあるが,ここでは手順(専門用語でアルゴリズムという)通り
 に作ることの練習を兼ねている
ので,指定された手順以外で作った場合は不正解扱いになる.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問8 (ex0308.c) ]