本文介紹如何在 C 語言中定義日期結構體,並結合閏年判斷函數,計算兩個生日之間相差的天數。這是處理日期運算的基礎練習,展示結構體陣列、函數模組化與累積天數演算法的應用。
struct date {
int year;
int month;
int day;
};
checkyear 函數依據「能被 4 整除但不能被 100 整除,或能被 400 整除」的規則回傳 1 表示閏年,0 表示平年。注意:原始碼中此函數有誤,兩條分支皆回傳 0,實際應修正為閏年回傳 1。
#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 語言日期處理的優良範例。