閏年計算是條件邏輯練習的經典案例。本文展示三種遞進式實現方式,從嵌套分支到邏輯運算優化,並說明格里曆規則邊界條件。
口訣:「四年一閏,百年不閏,四百年再閏」。
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);
}
邏輯清晰但層級較深。
for (year = 1000; year <= 2000; year++) {
if (year % 4 == 0 && year % 100 != 0) printf("%d ", year);
if (year % 400 == 0) printf("%d ", year);
}
利用互斥條件分開判斷,減少嵌套。
for (year = 1000; year <= 2000; year++) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d ", year);
}
最簡潔,運算子優先級:&& 高於 ||,邏輯正確。
對於極大年份(> 10000),需考慮:
計數器配合換行邏輯,每 10 個換行,提升可讀性:
if (count % 10 == 0) printf("\n");
三種版本各有優勢:教學用版本一,工程用版本三,理解邏輯等價關係是關鍵。