60日間全力プログラミング

プログラミング初心者が二ヶ月間でどこまでいけるかを記録したプログラミング学習ブログ

R45 0,35 残日数計算

考察
if (yy%400==0) = あまりゼロ
else if (yy%100!=0 && yy%4==0) = 年を100で割ると余りがでて、4で割ると余りが出ないよ。
まだ自分一人の力だけでは思いつかない部分もあるけど、大まかな書き方は理解できてきた。
この残日数計算機能使ってアプリできそう。
死ぬまでの残日数、残年数を計算して、『あと55回桜の開花が観れるチャンスがあります!』『あと3回オリンピックが観れるかもしれません!』とか結構面白いかも。
 
問題
 年(西暦)、月、日を入力し、元日からの経過日数と年末までの残日数を求める。
 
           表示例
 
---------経過日数と残日数計算---------
年(西暦)を入力してください。--->2003
   月を入力してください。--->6
   日を入力してください。--->12
   経過日数は163日です。
    残日数は202日です。
--------------------------------------
 
 
考え方
(1)前処理
  ①末日テーブル(matubi_t)に{0,31,28,31,30,31,30,31,31,30,31,30,31}を格納する。
  ②年(yy)、月(mm)、日(dd)を入力する。
  ③残数(zansu)に365を格納する。
(2)うるう年の判定
  (うるう年のときは末日テーブルの2月の欄に29、残数に366を格納する。)
  ①年が400で割り切れるときはうるう年。
  ②年が100で割り切れないで4で割り切れるときはうるう年。
(3)経過日数と残数を求める。
  ①経過日数(nissu)に0を格納する。
  ②経過月数分の末日を日数に加算する。
  ③入力した日(dd)を経過日数に加算する。
  ④残数から経過日数を引く。
(4)経過日数と残数を上記レイアウトにしたがって表示する。
 
#include<stdio.h>

int main(void){
   
   
int i,yy,mm,dd,zansu,nissu;
   
int matubi_t[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   
   
    printf(
"-------------経過日数と残日数計算--------------\n");
    printf(
"(西暦)を入力してください。\n");
    scanf(
"%d",&yy);
    printf(
"月を入力してください。\n");
    scanf(
"%d",&mm);
    printf(
"日を入力してください。\n");
    scanf(
"%d",&dd);
   
    zansu =
365;
   
   
if (yy%400==0) {
        matubi_t[
2]=29;
        zansu=
366;
    }
   
else if (yy%100!=0 && yy%4==0) {
        matubi_t[
2]=29;
        zansu=
366;
    }
   
    nissu =
0;
   
    for (i=0; i<mm; i++) {
        nissu += matubi_t[i];
    }
    nissu += matubi_t[i];
    nissu += dd;
    zansu -= nissu;
   
    printf(
"経過日数は%3d日です。\n",nissu);
    printf(
"残日数は%3d日です。\n",zansu);
   
    printf(
"---------------------------------------\n");

   
return 0;
   
}