【C言語】閏年かどうかを判定するプログラム

今回は、閏年判定プログラムについて考えてみたいと思います。

本ブログ初めてのプログラミングについての内容です。今後もいろんな内容を扱いたいと思いますので、よろしくお願いします。

ソースコードを考える前に、まずは閏年の定義について確認しましょう。

閏年とは

そもそも、閏年とはどういう年なのでしょうか?

Wikipediaによりますと、以下のように定義されているようです。

閏年は、太陽暦では季節(天動説では太陽の運行)と暦のずれとを、太陰暦では月の運行とのずれを補正するために、平年より暦日が一つ多く、太陰太陽暦では、月の運行を基準にしていることで生じる季節(太陽の運行)とのずれを補正するために、平年より暦月が一つ多い。

Wikipediaより抜粋

つまり、例年より日数が1日多い年を閏年と呼ぶわけですね。ちなみに、閏年ではない年のことを、平年と呼ぶそうです。

閏年の言葉の意味が分かったところで、閏年がどのような周期で訪れるのかを整理しましょう。

1.西暦年が4で割り切れる年は(原則として)閏年。
2.ただし、西暦年が100で割り切れる年は(原則として)平年。
3.ただし、西暦年が400で割り切れる年は必ず閏年。

Wikipediaより抜粋

こちらもWikipediaより抜粋しました。もっと閏年について知りたい方は以下のページに詳しく記載してあります。さきほどの引用も、下記ページから行っています。

関連ページ

閏年(外部ページ)

先程の説明を整理すると、、、

大前提として、400で割り切れる年は例外なく閏年ということですね。

400で割り切れない場合、100で割り切れる年は平年で、割り切れない年のうち、4で割り切れる年が閏年ということのようです。言葉だけじゃわかりにくいので、ベン図で整理しましょう。

ベン図で図示

ベン図は、集合同士の関係を表すときに使います。

今回は400で割れるものに関しては無条件で閏年と決まるので、400で割り切れない年について整理しましょう。

閏年に該当する年は、斜線部分になるかと思います。

図1

ここでは、400では割り切れない年の中で、4で割り切れる年の集合をAとして、100で割り切れるものをBとしました。

閏年に該当する部分は、斜線部分になるでしょう。つまり、「4で割り切れるもののうち、100で割り切れないもの」が閏年に該当すると思います。

以上のことを踏まえて、C言語を用いてソースコードを作成した例が↓です。

ソースコード(SAMPLE)

図2

サクラエディタを用いて作成しました。

解説

最初に変数定義を行います。

繰り返して判定を行うものとして作成したので、do while文を用いました。1回しか判定しないのであれば、do while文は不要です。

最初のif文は、400で割り切れるかどうかの判定です。400で割り切れれば閏年で確定です。そうでない場合の処理がelse文の中です。

18行目のif文は、100で割り切れるかどうかの判定です。400で割り切れないもののうち100で割り切れるもの(100年や2100年など)は閏年ではないので、これらを弾きます。

22行目のif文は、4で割り切れるかどうかの判定です。400で割り切れず、100で割り切れず、その中で4で割り切れるものは(2020年や2006年など)閏年であり、4で割り切れなければ閏年ではありません。

最後に

今回は、「閏年かどうかを判定するプログラム」をC言語で作成しました。今回私が作ったプログラムはあくまで一例なので、これが正解!というわけではありません。

また、閏年が訪れる周期を理解していれば、JavaやPythonなど、他の言語で書くことも可能です。他の言語での書き方については、別の機会で取り上げたいと思います。


今回の内容はここで終わりです。

最後までお読みいただき、ありがとうございました。