首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言判斷閏年:三種寫法與「四百年再閏」的數學原理

     編輯:關於C

閏年規則回顧

公曆閏年規則(格里高利曆):

  1. 能被 400 整除 → 閏年(如 2000)。
  2. 能被 4 整除但不能被 100 整除 → 閏年(如 2024)。
  3. 其他情況 → 平年(如 1900、2100)。

口訣:「四年一閏,百年不閏,四百年再閏」。

三種實現風格對比

寫法一:層層巢狀 if-else(最直觀)

for (year = 1000; year <= 2000; year++) {
    if (year % 4 == 0) {
        if (year % 100 == 0) {
            if (year % 400 == 0) leap = 1;
            else leap = 0;
        } else leap = 1;
    } else leap = 0;
    if (leap) printf("%d ", year);
}

寫法二:分兩類獨立判斷(易讀)


寫法三:單一邏輯表達式(最簡潔)


效能與可讀性取捨

  • 現代編譯器優化後,三者機器碼幾乎一致。
  • 團隊協作建議用寫法三並加註釋,或封裝為 is_leap_year(int y) 函式。
  • 注意運算子優先順序:&& 高於 ||,括號可加可不加但建議保留。

年份範圍擴展:3200 年與 172800 年規則

天文學上更精確的規則:能被 3200 整除者不為閏年;能被 172800 整除者再為閏年。但在 1000-2000 區間內不影響結果。若寫通用庫函式,可考慮加入:

#include <stdio.h>

int main(void) {
    int count = 0;
    for (int y = 1000; y <= 2000; y++) {
        if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
            printf("%4d%c", y, ++count % 10 == 0 ? '\n' : ' ');
        }
    }
    if (count % 10) putchar('\n');
    printf("Total leap years: %d\n", count);
    return 0;
}

總結

閏年判斷是經典邏輯練習,關鍵在於正確表達「被 4 整除且非世紀年,或被 400 整除」的布林邏輯。掌握三種寫法優劣,能靈活應對面試、教學與工程實踐的不同需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved