2.阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。
[说明]
函数count_ months ( DATE start, DATE end )的功能是:计算两个给定日期之间所包含的完整月份数。
该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。规定两个相邻年份的同月同日之间的问隔为1年。例如, 2007.5.30~2008.5.30的间隔为1年。若相邻两年中前一年是闰年,并且日期是2月29日,则到下一年的2月28日为1年,即2008. 229-2009 228的间隔为1年。
规定两个相邻月份的相同日之间的间隔为1个月,但需要特别考虑月末的特殊情况。例如,2007.1.29-2007.2.28的间隔为1个月,同理, 2007.1.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.