首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C/C++ 學習之路(第 06 課):計算指定日期是當年的第幾天

     編輯:關於C語言

問題描述

輸入年、月、日 (如 2012 4 24),輸出該日期是當年的第幾天。核心在於正確判斷閏年並累加前幾個月天數。

閏年判斷規則

格里曆閏年規則:

  • 能被 4 整除但不能被 100 整除 → 閏年
  • 能被 400 整除 → 閏年
  • 其餘為平年

程式碼實作:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0

完整程式碼

void theDayOfYear() {
    int nonleapYear[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int leapYear[12]    = {31,29,31,30,31,30,31,31,30,31,30,31};
    int year, month, day, num = 0;

    printf("please input date like: 2012 4 24\n");
    scanf("%d %d %d", &year, &month, &day);

    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        for (int i = 0; i < month - 1; i++) num += leapYear[i];
    } else {
        for (int i = 0; i < month - 1; i++) num += nonleapYear[i];
    }
    num += day;
    printf("the day of year is: %d\n", num);
}

執行範例

please input date like: 2012 4 24
the day of year is: 115

優化建議

  • 使用累積天數陣列避免迴圈:int cumDays[12] = {0,31,59,90,...}; 查表 O(1)
  • 輸入驗證:檢查月份 1-12、日期合法性 (含閏年 2 月 29 日)
  • 支援多種輸入格式 (YYYY-MM-DD, YYYY/MM/DD 等)

延伸思考

此問題是「日期運算」基礎。進階可嘗試:計算兩日期間隔天數、求 N 天后日期、判斷星期幾 (蔡勒公式)、實作萬年曆程式。日期處理看似簡單,實則包含曆法、時區、閏秒等複雜細節,是軟體工程中常見的坑點。

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