首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。 【说明】 函数count months(DATE start,DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。 【说明】 函数count months(DATE start,DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下
admin
2008-11-20
81
问题
阅读以下说明和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.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()、isLeap Year()和makevalid()说明如下。
【C语言函数】
int count_months (DATE start,DATE end)
{
int years = 0, months = 0;
DATE r;
if (cmp_date(start,end) > 0) {
r = start; start = end; end = r;
}
years = end.year - start.year; /*计算年数*/
r = start;
r.year = end.year;
if (cmp_date(r, end) > 0) { /*修正年数*/
(1);
r.year--;
}
if (r.year < end.year) { /*跨年度时,先计算到12月的月份数*/
months =(2);
r.month = 12;
}
months += (end.month + 12 - r.month) % 12;
r.year = end.year; r.month = end.month;
makevalid ((3)); /*将日期r修正为有效日期*/
if (cmp_date(r,end) > 0) /*修正月份数*/
(4);
months +=(5); /*计算总月份数*/
return months;
}使用的函数cmp_date()、isLeap Year()和makevalid()说明如下。
选项
答案
(1)years--,或其等价形式 (2)12 - r.month,或其等价形式 (3)&r (4)months--,或其等价形式 (5)years * 12
解析
本题考查编程能力。
根据题目的说明,函数count_months(DATE start,DATE end)的功能是计算两个给定日期之间所包含的完整月份数。
计算月份数时,可以从起始日期开始,到终止日期结束,逐月计算;也可以先算出完整年份数,再计算剩余的完整月份数,最后用完整年份数乘以12再加上剩余的完整月份数。题目中采用后者。
先用end的年号减去start的年号,得到一个年份值,如下所示:
years = end.year - start.year; /*计算年数*/
显然,上式算出的年份数可能产生误差(多算一年,即end的月号和日期要小于start的日期),因此可能需将years减去1后进行修正。因此,空(1)处应填入“years--”。
接下来计算月份数。由题目中的说明,计算起止日期间隔不足一年的完整月份数时,分如下两种情况。
(1)起止日期跨年度。计算方法如下例所示:对于起止日期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。以下代码处理该情况:
if (r.year < end.year) { /*跨年度时,先计算到12月的月份数*/
months = (2) ;
r.month = 12;
}
因此,空(2)处应填入“12-r.month”。
(2)起止日期不跨年度。先用终止日期的月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为2008.3.31—2008.9.20,通过月号算出月份数为6。修正时,通过调用函数makevalid将2008.9.31改为2008.9.30,与终止日期2008.9.20比较后,将月份数修正为5。以下代码处理该情况:
months += (end.month + 12 - r.month) % 12;
r.year = end.year; r.month = end.month;
makevalid( (3) ); /*将日期r修正为有效日期*/
if (cmp_date(r,end) > 0) /*修正月份数*/
(4) ;
根据函数makevalid的接口说明,其实参应取变量r的地址,因此空(3)处填入“&r”。
简单地用两个月份号相减可能产生的误差是多算了一个月,因此将months减1进行修正,所以空(4)处填入“months--”。
最后计算总月份数,年份数乘以12再加上不足一整年的月份数即可得到月份总数。因此空(5)处填入“years*12”。
转载请注明原文地址:https://kaotiyun.com/show/VsjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
某关系表定义了“姓名”、“身份证号”、“性别”、“年龄”4个字段,其中(60)字段可以作为此关系表的主键。
以下叙述中,针对应用需求,(68)选用了不适当的信息处理方法。
信息处理技术员除了应熟练使用计算机进行信息处理操作外,还应熟悉本岗位相关的业务知识,其理由比较多,但不包括(67)。
对用户来说,信息系统的(14)反映了系统的功能。
新建一个Word文档,编辑结束后,执行“文件”菜单中的“保存”命令,则______。
计算机处理的数字数据有数值数据和字符数据之分。对信息处理技术员来说,它们的主要区别是______。
在Excel2007中,若A1单元格中的值为50,B1单元格中的值为60,若在A2单元格中输入“=IF(OR(A1>=60,B1>=60),"通过","不通过")”,按回车键后,则A2单元格中的值为(47)________________。
计算机网络中,防火墙的功能不包括________________。
在Excel2010中,设单元格A1、B1、C1、A2、B2、C2中的值分别为1、2、3、4、5、6,若在单元格D1中输入函数“=MAX(A1:A2,B1:C2)”,按回车键后,则D1单元格中的值为(
在Excel的A1单元格中输入函数“=ROUND(3.1415,2)”,则A1单元格中显示的值为(57)。
随机试题
男性,25岁,2天前不明原因地出现干咳、胸闷,继之气喘,静滴氨茶碱无效。近3年来,秋季常出现发作性咳嗽、气短。体检:端坐呼吸,发绀,双肺呼吸音降低,有散在哮鸣音,心界不大,无杂音,脉搏120次/min,有奇脉。最适宜的治疗是
铁路工程发生下列()行为时,属于违法分包工程。
某基金2016年的平均收益率为10%,该年市场无风险收益率为2%,该基金的收益率标准差为10%,则该基金的夏普比率为()。
在订立劳动合同的同时协商确定的专项协议通常包括()。
根据教学过程不同阶段的表现形式来划分教学监控能力,下列不包括的是()。
下列哪些人员不得取得教师资格()
吐谷浑
[2001年]设A为n阶实对称矩阵,秩(A)=n,Aij是A=[aij]n×n中元素aij的代数余子式.二次型记X=[x1,x2,…,xn]T,把f(x1,x2,…,xn)写成矩阵形式,并证明二次型f(x)的矩阵为A
已知方程组(1)与方程(2)x1+5x3=0,则(1)与(2)的公共解是________。
考生文件夹下存在一个数据库文件“samp2.accdb”,里面已经设计好一个表对象“tTeacher”。试按以下要求完成设计:创建一个查询,计算并输出教师最人年龄与最小年龄的差值,显示标题为“mage“,所建查询命名为“qT1”。
最新回复
(
0
)