【笔记】判断今年是闰年还是平年

C语言复习整理

问题1:什么是闰年?

     维基百科上面是这样写的:闰年是比普通年分多出一段时间的年分,在各种历法中都有出现,目的是为了弥补人为规定的纪年与地球公转产生的差异。

问题2:为什么会有历法?为什么一年是365天,一个月30天,一天是24小时,1小时却是60分钟?(这些问题不展开讨论,感兴趣可以去了解)

    古代时期的人类发现四季变换、昼夜交替具有周期性,通过不断的观察和总结,人们把四季交替的时间间隔,称之为年(回归年),太阳东升西落的时间间隔成为天(太阳日)。人们通过总结发现一年大概是365天,但是由于地球公转时间与人为规定一年的时间存在时间差(平均回归年是一年365.2422天),一年差0.2422天,四年就差了一天,100年就差了一个月(25天),如果不加修正,我们日历就会偏离自然现象(比如说,出现在春天过中秋节?在冬天过植树节?这些现象)。未来解决这个问题,人们就发明了闰年和历法,来消除这种误差,我们现在用的这种历法叫做格里历,为什么用它呢?这就和它的闰年规则有关了,它的闰年规则如下:

  1. 公元年分除以4可整除但除以100不可整除,为闰年。
  2. 公元年分除以400可整除但除以3200不可整除,为闰年。
  3. 公元年分除以3200可整除但除以172800可整除,为闰年。

【笔记】判断今年是闰年还是平年_第1张图片

总结起来就是一句口诀:“四年一闰,百年不闰,四百年再闰”。

我们来做一个计算:400年有多少个闰年?400/4-400-100+400/400=100-4+1=97个闰年。400年平均每年多少天?365+97/400=365.2425天,是不是非常接近平均回归年(365.2422天),比较之下平均一年的误差只有0.0003天,也就是说每1/0.0003=3333年的时间,误差只有一天。

所以这种闰年的计算规则,就是一套人为设计的算法,用来近似自然年,以弥补人类习以为常的整数计数历法和自然规律之间的恒差。

举个简单的例子(暂时不考虑一千年以后的事情---除去公元3200年)

#include
int main(void)
{
    int year = 2019; //今年是2019年

    if((year%4==0&&year%100!=0)||year%400==0)
    {
        printf("今年是闰年\n");
    }
    else
    {
        printf("今年是平年\n");
    }

    return 0;
}

 

你可能感兴趣的:(C语言,笔记,C语言,笔记,闰年)