阅读以下说明和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 GetDateld( 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]或其等价形式
本题考查C程序的基本语法和运算逻辑。
函数GetDateld(DATE date)的功能是计算并返回指定合法日期date是其所在年份的第几天。处理思路是:先将1月~date.month-1月的天数累加起来,然后加上date.month的天数date.day即可。若date.month>2,则需要考虑特殊情况2月份,在闰年为29天而不是28天。因此,空(1)处应填入date.month,空(2)处应填入date.month>2。
函数 Kday_Date(int theyear,int k)的功能是计算井返回指定合法年份theyear (theyear≥1900)的第k天(1≤k≤365)所对应的日期。根据说明,显然空(3)应填入“DATE”。当 k<32时,计算出的日期一定在1月份;当k大于31而小于60(闰年时为61)时,计算出的日期一定在2月份;以此类推。函数中的处理思路是:先将k的值减去1月份的天数,若仍大于0,则继续减去2月份的天数,以此类推,直到k的值小于或等于0。此时将多减去的最后1个月的天数加上即可。因此,空(4)应填入“theyear“,空(5)应填入"day_smonth"。





