閱讀以下說明和C語言函數,將應填入 (n) 處的字句寫在答題紙的對應欄內。
【說明】
函數 count_ months(DATE start, DATE end)的功能是:計算兩個給定日期之間所包含的完整月份數。
該函數先算出起止日期中所含的完整年數,再計算余下的完整月份數。
規(guī)定兩個相鄰年份的同月同日之間的間隔為 1 年。例如,2007.5.30~2008.5.30的間隔為 1 年。若相鄰兩年中前一年是閏年,并且日期是 2 月 29 日,則到下一年的 2月28日為1年,即2008.2.29~2009.2.28的間隔為1年。
規(guī)定兩個相鄰月份的相同日之間的間隔為1個月,但需要特別考慮月末的特殊情況。例如,2007.1.29~2007.2.28 的間隔為 1 個月,同理,2007.1.30 30~2007.2.28、2007.1.31~2007.2.28的間隔都是1個月。
計算起止日期間隔不足一年的完整月份數時,分兩種情況:
1)起止日期不跨年度。先用終止日期的月號減去起始日期的月號得到月份數,然后再根據情況進行修正。例如,起止日期為2008.3.31~2008.9.20,通過月號算出月份數為 6。修正時,通過調用函數 makevalid 將 2008.9.31 改為 2008.9.30,與終止日期2008.9.20比較后,將月份數修正為5。
2)起止日期跨年度。計算方法如下例所示:對于起止日期2008.7.25~2009.3.31,先計算 2008.7.25~2008.12.25的月份數為 5,再算出 2008.12.25~2009.3.25 的月份數為3,因此2008.7.25~2009.3.31之間的完整月份數為8。
日期數據類型定義如下:
typedef struct {
int year; int month; int day; /*日期的年號(4位)、月和日號*/
}DATE;
程序中使用的函數cmp_date()、isLeapYear()和makevalid()說明如下: