原始代碼在main函數中直接實現了年份輸入、閏年判斷、年天數與月天數計算的所有邏輯,缺乏模塊化,代碼複用性差。需要將核心計算邏輯提取為獨立函數。
設計一個計算函數foo,接收年份和月份參數,通過引用參數返回年天數和月天數,主函數僅負責輸入輸出。
#include <iostream>
using namespace std;
void foo(int year, int month, int& ycount, int& mcount) {
// 判斷閏年並設置年天數
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
ycount = 366;
else
ycount = 365;
// 根據月份計算月天數
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
mcount = 29;
else
mcount = 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11)
mcount = 30;
else
mcount = 31;
}
int main() {
int year, month;
cout << "請輸入年份和月份:";
cin >> year >> month;
int mcount, ycount;
foo(year, month, ycount, mcount);
cout << year << "年的天數為:" << ycount << "天" << endl;
cout << month << "月的天數為" << mcount << "天" << endl;
return 0;
}
int&讓函數能修改主函數中的變量值(year%4==0 && year%100!=0) || year%400==0符合格雷曆規則可進一步增加參數校驗(月份1-12)、異常處理,或將閏年判斷單獨提取為isLeapYear函數,提高代碼可讀性。