初學者編寫閏年判斷程序時,常因 if-else 結構不當導致邏輯錯誤。以下代碼即為典型案例:
#include <stdio.h>
void main() {
int n;
do {
scanf("%d", &n);
if ((n % 4 == 0) && (n % 100 != 0))
printf("是\n");
if (n % 400 == 0)
printf("是\n");
else
printf("不是\n");
} while (1);
}
代碼中存在兩個獨立的 if 語句,而非 if-else if-else 鏈:
if 判斷「能被 4 整除且不能被 100 整除」。if 判斷「能被 400 整除」,其 else 僅屬於第二個 if。以 2012 為例:
else → 輸出「不是」。以 2000 為例:
使用 else if 串聯,確保互斥:
if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)
printf("是\n");
else
printf("不是\n");
或分層寫法:
if (n % 400 == 0)
printf("是\n");
else if (n % 4 == 0 && n % 100 != 0)
printf("是\n");
else
printf("不是\n");
if - else if - else 結構,避免獨立 if 導致多路執行。理解控制流結構是寫出正確邏輯的基礎,建議初學者多畫流程圖輔助思考。