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

C++將閏年判斷與天數計算封裝為函數的完整實現

     編輯:程式設計綜合問答

問題背景

原始代碼在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符合格雷曆規則
  • 月份天數邏輯:2月視閏年決定,4/6/9/11月為30天,其餘31天
  • 職責分離:計算邏輯與IO操作分離,便於單元測試和複用

擴展建議

可進一步增加參數校驗(月份1-12)、異常處理,或將閏年判斷單獨提取為isLeapYear函數,提高代碼可讀性。

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