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

C語言閏年判斷:標準演算法與常見錯誤完全解析

     編輯:C 語言問答

閏年規則(格里曆)

  1. 能被 4 整除 → 閏年。
  2. 但能被 100 整除 → 平年(例外)。
  3. 除非能被 400 整除 → 閏年(例外的例外)。

簡記:四年一閏,百年不閏,四百年再閏。

標準判斷函數

#include <stdbool.h>

bool is_leap_year(int year) {
    if (year % 4 != 0) return false;      // 不能被 4 整除:平年
    if (year % 100 != 0) return true;     // 能被 4、不能被 100:閏年
    if (year % 400 != 0) return false;    // 能被 100、不能被 400:平年
    return true;                          // 能被 400:閏年
}

// 等價單行表達式
bool is_leap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

常見錯誤對照

錯誤寫法反例年份錯誤結果原因
if (year%4==0) leap=1;1900誤判為閏年漏掉百年不閏規則
if (year%400==0) leap=1; else if (year%100==0) leap=0; else if (year%4==0) leap=1;無正確但順序易混淆邏輯正確,可讀性稍差
leap = (year%4==0) ? 1 : 0;1900, 20001900 錯、2000 對同第一種

應用範例:印出 1900~2100 間所有閏年

for (int y = 1900; y <= 2100; y++)
    if (is_leap_year(y))
        printf("%d ", y);
// 輸出: 1904 1908 ... 1996 2000 2004 ... 2096
// 注意:1900 不在列表,2000 在列表

擴展:計算兩日期間天數差

需結合「每月天數表」+「閏年判斷」調整 2 月天數,建議使用標準庫 <time.h> 的 mktime/difftime 避免手寫錯誤。

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