阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。 【说明】

练习题库2022-08-02  6

问题 阅读以下说明和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;            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"。
转载请注明原文地址:https://www.tihaiku.com/congyezige/2427164.html

最新回复(0)