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

C 語言結構體計算兩日期相差天數

     編輯:關於C

使用結構體與閏年判斷計算日期差值

本文介紹如何在 C 語言中定義日期結構體,並結合閏年判斷函數,計算兩個生日之間相差的天數。這是處理日期運算的基礎練習,展示結構體陣列、函數模組化與累積天數演算法的應用。

日期結構體定義

struct date {
    int year;
    int month;
    int day;
};

閏年判斷函數

checkyear 函數依據「能被 4 整除但不能被 100 整除,或能被 400 整除」的規則回傳 1 表示閏年,0 表示平年。注意:原始碼中此函數有誤,兩條分支皆回傳 0,實際應修正為閏年回傳 1。

核心演算法

  1. 輸入兩筆生日資料存入結構體陣列。
  2. 對每筆日期,先累加完整月份的天數(參考平年月份天數表)。
  3. 若為閏年且月份大於 2 月,總天數加 1。
  4. 再加上當月日數,得到該日期在當年的「年積日」。
  5. 兩筆年積日相減取絕對值即為相差天數。

完整程式碼(已修正閏年判斷)

#include <stdio.h>
#include <stdlib.h>

struct date { int year, month, day; };

int is_leap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

const int month_day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int day_of_year(struct date d) {
    int days = d.day;
    for (int m = 1; m < d.month; m++) days += month_day[m];
    if (is_leap(d.year) && d.month > 2) days++;
    return days;
}

int main() {
    struct date bd[2];
    for (int i = 0; i < 2; i++) {
        printf("請輸入第 %d 人生日 (年 月 日):", i+1);
        scanf("%d %d %d", &bd[i].year, &bd[i].month, &bd[i].day);
    }
    int d1 = day_of_year(bd[0]);
    int d2 = day_of_year(bd[1]);
    printf("兩人生日相差 %d 天\n", abs(d1 - d2));
    return 0;
}

此程式示範結構體封裝日期資料、函數分工與日期累積算法,是學習 C 語言日期處理的優良範例。

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