阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
函数GetDateld(DATE date)的功能是计算并返回指定合法日期date是其所在年份的第几天。例如,date表示2008年1月25日时,函数的返回值为25,date表示2008年3月3日时,函数返回值为63。
函数Kday_Date(int theyear,int k)的功能是计算并返回指定合法年份theyear(theyear≥1900)的第k天(1≤k≤365)所对应的日期。例如,2008年的第60天是2008年2月29日,2009年的第60天是2009年3月
1日。
函数isLeapYear(int y)的功能是判断Y代表的年份是否为闰年,是则返回1,否则返回0。
DATE类型定义如下:
typedef struct{
int year,month,day;
}DATE;
【C函数1】
int GetDateId(DATE date)
{
Const int days_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,date_id=date.day;
for(i=0;i<____(1)____;i++)
date_id+=days_month[i];
if( ____(2)____&&isLeapYear(date.year))date_id++;
return date_id;
}
【C函数2】
____(3)____Kday_Date(int theyear,int k)
{
int i;
DATE date;
int days_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31);
assert(k>=1&&k<=365&&theyear>=1900);/*不满足断言时程序终止*/
date.year=____(4)____;
if(isLeapYear(date.year))days_month[2]++;
for(i=1;;){
k=k—days_month[i++];
if(k<=0){date.day=k+____(5)____;date.month=i一1;break;}
}
return date;
}
参考答案:
(1)date.month (2)date.month>2或其等价形式 (3)DATE (4)theyear (5)days_month[i—1]或其等价形式
解析:
解析:本题考查的知识点是填写程序,本题的程序的功能是计算出某个日期为该年的第几天和某年的第几天是该年的几月几号。函数1是填写(GetDateId这个函数,其中的for循环函数的功能是计算该日期是该年的第几天,所以(1)应填date.month,但是是在普通年份下计算的,接下来的if条件语句是判断该年份是否为闰年,若为闰年且超过2月份,则需要在原来的基础上再加一天,若不是闰年或者没超过2月份则不用加一天,所以(2)应填date.month>2。函数2是某年的第k天对应的日期,首先要定义下Kday_Date函数,该函数符合DATE类型,所以用DATE定义该函数,(3)应填DATE,(4)是将date.year赋值为theyear,所以应该填theyear,接下来k=k—days_month[i++]是计算日期,如果k>0,则k=k—days_month[i++],若k<=0,则date.day=days_month[i一1],故(5)应该填days_month[i一1]。