• ベストアンサー

うるう年を求めるプログラム

1900から2100年のうるう年を求めるプログラムが作りたいのですが どうしたらよいでしょうか? forを使って1900から2100までかぞえる。 4で割り切れるものは閏年 しかし100で割り切れるものは閏年でない。 400で割り切れるものは閏年である。 最後の条件の分岐から閏年のみを表示させたいのですがわかりません 。

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.4

int uruu; int year; for(year = 1900; year <= 2100; year++) {  if(year % 4 == 0) {   // 4で割り切れる   if(year % 100 == 0) {    // 100で割り切れる    if(year % 400 == 0) {     // 400で割り切れる = 閏年     uruu = 1;    } else {     // 400で割り切れない = 閏年では無い     uruu= 0;    }   } else {    // 100で割り切れない = 閏年    uruu = 1;   }  } else {   // 4で割り切れない = 閏年ではない   uruu = 0;  }  if(uruu == 1) {   // 閏年のときの処理  } else {   // 閏年ではないときの処理  } } 規則どおりに書くのならこうなるね。 改良の余地はあるかもしれないけど。

santye
質問者

お礼

細かく教えていただきありがとうございます。 参考にさせてもらいます。

その他の回答 (4)

  • nebel
  • ベストアンサー率37% (117/308)
回答No.5

/* 閏年判定関数    引数に西暦を渡し、閏年なら1を閏年でなければ0を返す*/ int leapyear( int year ){ return (((year%4==0) && (year%100!=0) || (year%400==0)) ? 1 : 0); } int main(){ int i; for(i=1900;i<=2100;i+=4){ if( leapyear(i) ){ print("%d\n",i); } } leapyear関数自体は汎用。 main内のループは、1900から2100までの閏年ってのに合わせてある。

  • qtea
  • ベストアンサー率77% (38/49)
回答No.3

かなり、手を抜くなら… 1900から2100の間で ・4で割り切れる ・100で割り切れる ・400で割り切れない ものは、1900と2100だけなんですよね。 なので、1904から4づつ足していったものを表示するだけで良いような… で、2096以下になったら、ループを抜ける、と。

santye
質問者

お礼

そういえばそうですね、気付きませんでした。 回答ありがとうございます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

誤魔化して書くなら、こう。 int nen; for (nen = 1901;nen < 2100;nen++) {   if ((nen & 3) == 0) ptintf("%d年は閏年\n",nen); } ループの最初と最後の、1900年と2100年は通常年なので、ループしないで除外し、4で割れるかしか見ていない。 実際、1901~2099年の期間で使用する、年を下2桁しか持たないカレンダーICチップは、閏年の判定は「4で割り切れるなら閏年」としか判定しない。 更に言うなら年の割り算さえしない。年を保持するメモリの下位2ビットを取り出し、この2ビットが共に0の時は閏年、と処理している。 どうしてこういう手抜きをするかと言えば、計算が簡単になれば回路も簡単になり、それだけコストダウンになるのが理由。 ループから1900と2100を除外しないなら、こう。 int nen; for (nen = 1900;nen <= 2100;nen++) {   if ((nen==1900)||(nen==2100)) continue;   if ((nen & 3) == 0) ptintf("%d年は閏年\n",nen); } 年の制限をせずに、きっちり全部判断したいなら、質問者さんで工夫して下さい。

noname#25358
noname#25358
回答No.1

 4で割り切れるかどうかを調べるには、割余演算子を使います。  C言語の場合、% 演算子です。  if ( nen % 4 = 0 ) {   // 4で割り切れる  }  こんな感じ。他の条件も一緒です。

関連するQ&A

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • 閏年について

    Excelで「1900/2/29」と入力すると、閏年でないのに、日付として認知され、標準表示形式では「60」と表示されます。1900年は閏年として認識しているのでしょうか?Visual Basicで西暦と和暦のプログラムを作成(1900年未満)している途中で計算が合わなくなり、この疑問にぶつかりました。回答をよろしくお願いします。

  • 閏年が何個含まれるか求めるプログラム

    3桁、あるいは4桁の整数を10個程度入力して、これらの中 に閏年が何個含まれるか求めるプログラムの書き方を教え てください。  お願いします。

  • C++でうるう年判定のプログラムを作りたいのですが

    C++でうるう年判定のプログラムが作りたいのですが・・・ #include <iostream> using namespace std; int main() { return 0; } 問題のこの下の部分の内容が書けません 変数をa % 4という計算と%100と%400をしなければいけないことはわかっています。この式の入れ方がわかりませんif文だとは思っているのですが 表示は「<<a<<"はうるう年です";」と「<<a<<"はうるう年ではありません";」という判定を表示したいです。

  • 基本的なプログラム

    基本的なプログラム 学校の教科書に載っている問題がわかりません。 是非教えて下さい。 Cによる基本的な条件分岐(if,else if文)のプログラムです。 西暦年(4けたの整数)を入力し、その年がうるう年かどうかを判断するプログラムを作りなさい。 4で割り切れるときはうるう年であるが、100で割り切れるときはうるう年ではない。 しかし、400で割り切れればうるう年である。 ・・・とゆう問題文です。 #include<stdio.h> int main(void) { int x; printf("西暦を入力して下さい¥n"); scanf("%d",&x); if(x%4==0) printf("うるう年である¥n"); else if(x%400==0) printf("うるう年である¥n"); else if(x%100!==0) printf("うるう年でない¥n"); else printf("うるう年でない¥n"); return 0; } ・・・とりあえず自分で考えてみたのですがどうでしょうか; 間違ってると思いますが頑張って考えました・・・;; 4けたの整数ってゆうのはどう書けばいいんでしょうか? 実際にこのプログラムは動くのでしょうか? もっと省略して書くことができるのでしょうか?  等、色々わからないことばかりです。 プログラミングの授業自体に苦手意識を持っているので得意ではありません。 間違いなど指摘していただけたらと思います!! よろしくお願いします!

  • 2004年の前のうるう年をjavaで表せが出来ませ

    大学の講義で出題せれたのですが、javaでそれぞれ1901年、2004年、2007年、2009年の前のうるう年を表示しろということで、うるう年の検索、判定のプログラムまでは組めたのですが、前の年ということで、うるう年である2004年で表示さなくてはいけないのが1996年なのですが、どうしても2004年と表示されてしまいます。 色々と調べてみたのですが分からず、初めての投稿をさせていただきました。 どう組めば良いか教えてください。下が組んだプログラムです。 public static int preleap(int n){ if((n%4 == 0) & (n%100 != 0) ||n%400 == 0){ return n; }else{ return preleap(n-1); } }

    • ベストアンサー
    • Java
  • 閏年

    2000年は、閏年ですか。高等学校の地学の教師が2000年は、4と400で割れるから閏年だけど2000年は、オリンピックがあったから閏年ではない。と、言ってました。どうなんでしょ~

  • 閏年自動判定

    プログラム初心者です。 VbScript(ASP)で以下のプログラムを書く場合の書き方を教えてください。 閏年を自動的に判定し、以下の処理をしたいです。 前年同月の集計結果を表示したいです。 その判別は以下の通りです。 (1)もし当年が閏年で無く、前年が閏年の場合  2/28日に集計すると前年分は2/29(までの)のものを表示 (2)もし当年が閏年の場合、2/29に集計すると  前年分は2/28(までの)のものを集計 宜しくお願いします。

  • うるう年って?

    うるう年は二月が29日までになりますが、なぜ二月なのですか? 12月ではだめなのでしょうか?一年の最後の年のほうがいいような・・・。二月って中途半端ではないですか?二月が28日で短いからだと思うのですが、そもそもなぜ二月が28日かもわかりません。教えてください。

  • 閏年の算出方法についての疑問です。

    お世話になります。 閏年の算出の条件ですが、 まず、求めたい年をYYYY年とすると、 ・YYYY年が4で割切ることができる年を閏年とする。 ・YYYY年が4で割り切れて、100で割り切れる年の内、  400で割り切れない年は閏年としない。 の条件があると思います。 ここで思ったことは、「400で割切ることができれ ば閏年とする」ではいけないのか。 という疑問を持ちました。 4で割切ることができるなどはいらないのではないか と思います。 この考えは間違い等のアドバイスがあれば、 いただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう