C言語入門:うるう年判定プログラム

C言語でプログラムを書くうえで「もしもこうなったら、こうする」「この場合はこうする」「それ以外の場合はこうする」など、条件によりプログラムを分岐させるif文・else文・else if文の基本的な使い方は前述しました。 ここでは授業の課題(宿題)として良く登場する、閏年(うるう年)判定プログラムを紹介します。

閏年の条件

プログラムを書くうえで、まず最初に理解しなければならないのが、プログラムを書く対象そのものに関する情報です。 今回であれば、閏年になる条件です。

閏年の条件は以下のようになっています。

  • 西暦で示した年が4で割り切れる年は閏年です
  • 西暦で示した年が100で割り切れる年は閏年ではありません
  • 西暦で示した年が400で割り切れる年は閏年です

上記順番通りにプログラムを書くことも可能ですが、4で割り切れるかどうかのif文を最初に書いて、その中で100で割り切れるかどうかや、400で割り切れるかどうかを書いてしまうと、たとえば、次のようにごちゃごちゃしてしまいます。 (割り算の余りを計算する方法が解らない場合は、C言語の演算子の解説ご覧下さい。)


#include <stdio.h>

int
main()
{
 int year = 2404; /* ここの値を変えて下さい */

 if (year % 4 == 0) {
   if (year % 100 == 0) {
     if (year % 400 == 0) {
       printf("うるう年ですn");
     } else {
       printf("うるう年ではありませんn");
     }
   } else {
     printf("うるう年ですn");
   }
 } else {
   printf("うるう年ではありませんn");
 }

 return 0;
}

ひと工夫

そこで、もうちょっとすっきりとプログラムを書く方法を考えます。

この条件文を読み解くと、400で割り切れる年は無条件に閏年になります。 次に、100で割り切れて、400で割り切れない年は閏年ではありません。 4で割り切れて、100で割り切れない年は閏年です。


#include <stdio.h>

int
main()
{
 int year = 2000; /* ここの値を変えて下さい */

 if (year % 400 == 0) {
   printf("うるう年ですn");
 } else if (year % 100 == 0) {
   printf("うるう年ではありませんn");
 } else if (year % 4 == 0) {
   printf("うるう年ですn");
 } else {
   printf("うるう年ではありませんn");
 }

 return 0;
}

もう、ひと工夫

さらに、もうひと工夫することで、もっと短いプログラムにすることが可能です。


#include <stdio.h>

int
main()
{
 int year = 2000; /* ここの値を変えて下さい */

 if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
   printf("うるう年ですn");
 } else {
   printf("うるう年ではありませんn");
 }

 return 0;
}

このように、ちょっとした内容であっても、色々なプログラムの書き方があり、その書き方によって処理速度やバグ修正のしやすさが変わってきます。

最後に

ここでは、if、else if、elseの使い方の例として、閏年を判定するプログラムを紹介しました。 条件分岐に関する復習になれば幸いです。

もし、学校の宿題を調べるためにこのページをご覧になっているのであれば、このサンプルをそのまま提出することは恐らくできません。 このサンプルは、あくまでif、else if、elseを理解して頂くという目的であり、int yearという変数に「年」に関する情報をハードコーディングしているため、プログラムとしては不十分です。 課題提出を目指しているかたは、ユーザからの情報入力部分を調べた上で、付け足して下さい。


次:for文による繰り返し

- C言語入門 記事一覧

おまけ

プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!

   このエントリをはてなブックマークに登録