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

C 語言計算某年某月某日是當年第幾天:修正邏輯錯誤與代碼優化

     編輯:程式設計疑難解答

原代碼問題

使用 while(leap==1) 和 while(leap==0) 並配合 break,實際上等同於 if-else,但邏輯冗餘且易出錯。

修正後代碼

int calculatedDays(int year, int month, int day) {
    int leap = 0, totaldays = 0;
    if ((year%4==0 && year%100!=0) || (year%400==0)) leap = 1;

    if (leap) { // 閏年
        switch(month) {
            case 12: totaldays += 30;
            case 11: totaldays += 31;
            case 10: totaldays += 30;
            case 9:  totaldays += 31;
            case 8:  totaldays += 31;
            case 7:  totaldays += 30;
            case 6:  totaldays += 31;
            case 5:  totaldays += 30;
            case 4:  totaldays += 31;
            case 3:  totaldays += 29;
            case 2:  totaldays += 31;
            case 1:  totaldays += day; break;
        }
    } else { // 平年
        switch(month) {
            case 12: totaldays += 30;
            case 11: totaldays += 31;
            case 10: totaldays += 30;
            case 9:  totaldays += 31;
            case 8:  totaldays += 31;
            case 7:  totaldays += 30;
            case 6:  totaldays += 31;
            case 5:  totaldays += 30;
            case 4:  totaldays += 31;
            case 3:  totaldays += 28;
            case 2:  totaldays += 31;
            case 1:  totaldays += day; break;
        }
    }
    printf("該日是該年的第:%d天\n", totaldays);
    return totaldays;
}

優化建議

  • 使用靜態數組存儲每月天數,避免冗長 switch。
  • 輸入驗證:月份 1-12,日期合法性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved