【筆記】判斷今年是閏年還是平年

C語言複習整理

問題1:什麼是閏年

     維基百科上面是這樣寫的:閏年是比普通年分多出一段時間的年分,在各種曆法中都有出現,目的是爲了彌補人爲規定的紀年與地球公轉產生的差異。

問題2:爲什麼會有曆法?爲什麼一年是365天,一個月30天,一天是24小時,1小時卻是60分鐘?(這些問題不展開討論,感興趣可以去了解)

    古代時期的人類發現四季變換、晝夜交替具有周期性,通過不斷的觀察和總結,人們把四季交替的時間間隔,稱之爲年(迴歸年),太陽東昇西落的時間間隔成爲天(太陽日)。人們通過總結髮現一年大概是365天,但是由於地球公轉時間與人爲規定一年的時間存在時間差(平均迴歸年是一年365.2422天),一年差0.2422天,四年就差了一天,100年就差了一個月(25天),如果不加修正,我們日曆就會偏離自然現象(比如說,出現在春天過中秋節?在冬天過植樹節?這些現象)。未來解決這個問題,人們就發明了閏年和曆法,來消除這種誤差,我們現在用的這種曆法叫做格里曆,爲什麼用它呢?這就和它的閏年規則有關了,它的閏年規則如下:

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

總結起來就是一句口訣:“四年一閏,百年不閏,四百年再閏”。

我們來做一個計算: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<stdio.h>
int main(void)
{
    int year = 2019; //今年是2019年

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

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章