C语言 日历 判断一年的天数

公历纪年以耶稣诞生之年作为纪年的开始。
公元前45年起开始使用儒略历;公元1582年起开始使用格里历,即现在的公历,也称西历。

儒略历,是由罗马共和国独裁官儒略·凯撒(称凯撒大帝)采纳埃及亚历山大的数学家兼天文学家索西琴尼的计算结果,于公元前45年1月1日起执行的取代旧罗马历法的一种历法。
儒略历从三月March到一月January,各月的天数原来依次为31、30、31、30、31、30、31、30、31、30、31;二月February的天数为平年29、闰年30,四年一闰。
而后,屋大维参照凯撒的惯例,用自己的大名命名了八月,原来应排为小月,从二月中抽出一天补上,变为大月,然后将10月、12月改为大月,9月、11月改为小月。各月的天数依次为31、28/29、31、30、31、30、31、31、30、31、30、31。
因当时僧侣错误理解“隔三年设置一闰年”,以致每三年设置了一个闰年。故前45年、前42年、前39年、前36年、前33年、前30年、前27年、前24年、前21年、前18年、前15年、前12年、前9年是闰年,与儒略历实际日期误差有3天。奥古斯都为了纠正以上闰年过多的错误,故取消前5年、前1年、4年3年的闰年,拟补累积误差的天数。此后按儒略历原来的设计每四年有一次闰年。
儒略历中,一年被划分为12个月,大小月交替;四年一闰,平年365日,闰年366日为在当年二月底增加一闰日,年平均长度为365.25日。

格里历,由于实际使用过程中累积的误差随着时间越来越大,1582年教皇格里高利十三世(又译额我略十三世)颁布、推行了以儒略历为基础改善而来的格里历,即公历。

格里历与儒略历大致一样,但格里历特别规定,除非能被400整除,所有的世纪年(能被100整除)都不设闰日;如此,每四百年,格里历仅有97个闰年,比儒略历减少3个闰年。格里历的历年平均长度为365.2425日,接近平均回归年的365.242199074日,即约每3300年误差一日,也更接近春分点回归年的365.24237日,即约每8000年误差一日;而儒略历的历年为365.25日,约每128年就误差一日。到1582年时,儒略历的春分日(3月21日)与地球公转到春分点的实际时间已相差10天。因此,格里历开始实行时,将儒略历1582年10月4日星期四的次日,为格里历1582年10月15日星期五,即有10天被删除,但原星期的周期保持不变。

本节将制作一串代码用于判断一年当中有多少天

#include<stdio.h>
int main()
{
  int year;
  scanf("%d",&year);
  if(year<1582){
   if(year==3 || year== 4) printf("公元 %d 年有 365 天。",year);
   else if(year%4==0) printf("公元 %d 年有 366 天。",year);
   else printf("公元 %d 年有 365 天。",year);
  }
  else if(year==1582) printf("公元 %d 年有 355 天。",year);
  else if(year%4==0){
   if(year%100==0){
    if(year%400==0) printf("公元 %d 年有 366 天。",year);
    else printf("公元 %d 年有 365 天。",year);
   }
   else printf("公元 %d 年有 366 天。",year);
  }
  else printf("公元 %d 年有 365 天。",year);
 return 0;
}

试运行:

这里主要使用if语句对各种情况进行判断

根据常识我们可以知道一年中有366天的情况,将该情况出现的条件定义到if语句中,使其输出相应的天数,其他情况都为365天,不必特别定义

该代码对新手较难,注意情况的划分,基本思路要明确,先判断366天的特殊情况再讨论365天的情况

 (%)为余数运算符 

== 代表等于这一逻辑概念

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gulugulus~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值