2007年上半年程序员下午试卷[2]

软考 责任编辑:lixiaohu 2007-08-03

添加老师微信

备考咨询

加我微信

摘要:试题三(共15分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]函数count_months(DATEstart,DATEend)的功能是:计算两个给定日期之间所包含的完整月份数。该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。规定两个相邻年份的同月同日之间的间隔为1年。例如,2007.5

 

 

试题三(共15 分)

阅读以下说明和 C 语言函数,将应填入(n)处的字句写在答题纸的对应栏内。

[说明]

函数 count_ months(DATE start, DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。

该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。

规定两个相邻年份的同月同日之间的间隔为 1 年。例如,2007.5.30~2008.5.30的间隔为 1 年。若相邻两年中前一年是闰年,并且日期是 2 月 29 日,则到下一年的 2月 28 日为 1 年,即 2008.2.29~2009.2.28 的间隔为 1 年。

规定两个相邻月份的相同日之间的间隔为1个月,但需要特别考虑月末的特殊情况。例如,2007.1.29~2007.2.28 的间隔为 1 个月,同理, 2007.1.30~2007.2.28、2007.1.~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()说明如下: 

 

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取

!
咨询在线老师!