首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C语言函数,填补空缺。 [说明] 函数count months(DATE start, DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。 规
阅读以下说明和C语言函数,填补空缺。 [说明] 函数count months(DATE start, DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。 规
admin
2012-04-11
38
问题
阅读以下说明和C语言函数,填补空缺。
[说明]
函数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( )、isLeapYear( )和makevalid( )说明如表11-8所示。
表11-8 函数说明
[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) { /*修正年数*/
_________;
r.year--;
}
if(r. year<end. year) { /*跨年度时,先计算到12月的月份数*/
months= _______ ;
r. month= (12) ;
}
months+=(end. month+12-r. month)%12;
r. year=end. year; r. month=end. month;
makeva!id( _______ ); /*将日期r修正为有效日期*/
if(cmp_date(r, end)>0) /*修正月份数*/
________ ;
months+= ________ ; /*计算总月份数*/
return months;
}
选项
答案
years--,或其他等价形式 12_r.month,或其他等价形式 &r months--,或其他等价形式 years*12
解析
years=end. year-start. year语句计算出的年份多算了一年,应该减去1,所以(1)处应为years--。跨年度时计算日期应该分两阶段,年前部分和年后部分,所以(2)处应为12-r.month。根据函数makevalid的接口说明可知,函数的实参应该是变量r的地址,所以(3)处应为“&r”。用两个月份号相减可能会多算一个月,因此应该将months减少1,所以(4)处应为“months--”。计算总月份数时,年份数years*12再加上不足一整年的月份数即可得到月份总数,所以(5)处为“years*12”。
转载请注明原文地址:https://www.kaotiyun.com/show/nEVZ777K
本试题收录于:
程序员上午基础知识考试题库软考初级分类
0
程序员上午基础知识考试
软考初级
相关试题推荐
数据模型是表示实体间联系的,网状模型、层次模型和关系模型都是数据库中的基本数据模型。在搜索数据时,关系模型是通过(14)实现的。
虚拟存储管理系统的基础是程序的(15)理论,这个理论的基本含义是指程序执行时往往会不均匀地访问主存储器的单元。根据这个理论,Denning提出了工作集理论。工作集是进程运行时被频繁访问的页面集合。在进程运行时,如果它的工作集页面都在(16)内,则能够使该进
采用相幅调制(PAM)技术在带宽为32kHz的无噪声信道上传输数字信号,每种相位对应一种电平幅度。若要达到192Kb/s的数据速率,至少要有(26)种不同的相位。
在Word的编辑状态,不能完成删除整个表格(及其内容)任务的操作是(14)。
在MIB-2功能组的接口组中,表征某个交换机端口的状态为故障时,对象(62)。
以下给出的地址中,属于子网197.182.15.19/28的主机地址是(30)。
计算机网络中的子网掩码与IP地址的长度都是32bit,它的每一位与IP地址的每一位对应。假设C类IP地址的前24位为网络号,后8位为主机号,则它的子网掩码为(54)。
两台接连在同一个网段上的Windows 95计算机,ping不通,原因可能是(62); SNMP的设计是基于(63);在Windows 95下用资源管理器查看网络邻居时,系统提示网络无法访问,错误的原因是(64);对于一个使用应用代理服务型防火墙的网络而言
在OSI参考模型中,上层协议实体与下层协议实体之间的逻辑接口叫做服务访问点(SAP)。应用层的服务访问点是(30)。
从E-R模型向关系模型转换时,一个M:N联系转换为关系模式时,该关系模式的关键字为(11)。
随机试题
强调将企业经营目标集中到某一特定细分市场的战略是()
未来的计算机将向巨型化、微型化、( )、智能化和多媒体化的方向发展。
流行性出血热是一种病情凶险的病毒感染,其病原体是
某化工厂的合成车间动力安装工程如图6.Ⅲ所示。(1)APl为定型动力配电箱,电源由室外电缆引入,基础型钢采用10#槽钢(单位重量为10kg/m)。(2)所有埋地管标高均为-0.2m,其至APl动力配电箱出口处的管口高出地坪0.1m,设备基础顶标高为+0
金融体系由()构成。
某歌星在一次演出后,按合同规定应获得劳务报酬18000元。主办单位按照税法,代扣其个人所得税后,应向该歌星实际支付()元。
依次填入下列横线处的词语,最恰当的一组是:①2003年2月1日,美国“哥伦比亚”号航天飞机在从太空返回地面途中解体,机上7名宇航员全部______。消息传出,世界震惊。②地球生态系统是经过自然界的长期______形成的,它是人类生活的惟
设函数y=y(x)在(-∞,+∞)内具有二阶导数,且y’≠0,x=x(y)是y=y(x)的反函数.(1)试将x=x(y)所满足的微分方程变换为y=y(x)满足的微分方程;(2)求变换后的微分方程满足初始条件y(0)=0,的解.
2014年1月,由于DNS根服务器被攻击,国内许多互联网用户无法访问.COM域名网站,这种恶意攻击可能造成的危害是________。
EATS,SHOOTSANDLEAVES—abookreviewThetitleofEats,ShootsandLeavesreferstoafamouslymisp
最新回复
(
0
)