【C言語】閏年かどうかを判定するプログラム
今回は、閏年判定プログラムについて考えてみたいと思います。
本ブログ初めてのプログラミングについての内容です。今後もいろんな内容を扱いたいと思いますので、よろしくお願いします。
ソースコードを考える前に、まずは閏年の定義について確認しましょう。
閏年とは
そもそも、閏年とはどういう年なのでしょうか?
Wikipediaによりますと、以下のように定義されているようです。
閏年は、太陽暦では季節(天動説では太陽の運行)と暦のずれとを、太陰暦では月の運行とのずれを補正するために、平年より暦日が一つ多く、太陰太陽暦では、月の運行を基準にしていることで生じる季節(太陽の運行)とのずれを補正するために、平年より暦月が一つ多い。
Wikipediaより抜粋
つまり、例年より日数が1日多い年を閏年と呼ぶわけですね。ちなみに、閏年ではない年のことを、平年と呼ぶそうです。
閏年の言葉の意味が分かったところで、閏年がどのような周期で訪れるのかを整理しましょう。
1.西暦年が4で割り切れる年は(原則として)閏年。
Wikipediaより抜粋
2.ただし、西暦年が100で割り切れる年は(原則として)平年。
3.ただし、西暦年が400で割り切れる年は必ず閏年。
こちらもWikipediaより抜粋しました。もっと閏年について知りたい方は以下のページに詳しく記載してあります。さきほどの引用も、下記ページから行っています。
閏年(外部ページ)
先程の説明を整理すると、、、
大前提として、400で割り切れる年は例外なく閏年ということですね。
400で割り切れない場合、100で割り切れる年は平年で、割り切れない年のうち、4で割り切れる年が閏年ということのようです。言葉だけじゃわかりにくいので、ベン図で整理しましょう。
ベン図で図示
ベン図は、集合同士の関係を表すときに使います。
今回は400で割れるものに関しては無条件で閏年と決まるので、400で割り切れない年について整理しましょう。
閏年に該当する年は、斜線部分になるかと思います。
ここでは、400では割り切れない年の中で、4で割り切れる年の集合をAとして、100で割り切れるものをBとしました。
閏年に該当する部分は、斜線部分になるでしょう。つまり、「4で割り切れるもののうち、100で割り切れないもの」が閏年に該当すると思います。
以上のことを踏まえて、C言語を用いてソースコードを作成した例が↓です。
ソースコード(SAMPLE)
サクラエディタを用いて作成しました。
解説
最初に変数定義を行います。
繰り返して判定を行うものとして作成したので、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など、他の言語で書くことも可能です。他の言語での書き方については、別の機会で取り上げたいと思います。
今回の内容はここで終わりです。
最後までお読みいただき、ありがとうございました。