阅读以下说明和C语言函数,将应填入(n)处。 【说明】 已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。 函

admin2009-01-20  30

问题 阅读以下说明和C语言函数,将应填入(n)处。
    【说明】
   已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
   函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
   程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)表示year是(或不是)闰年。
   【C语言函数】
   int count_5_13(int year)
   {
      int date;       /*date为0表示星期日,为1~6分别表示星期一至星期六*/
      long days=0;    /*days记录天数*/
   int m,y,c=0;     /*c用于表示黑色星期五的个数*/

      if  (year<1900)    return-1;
   /*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/
   days=12;
   for  (y= 1900;  y < year;  y++)  {
   days +=365;
   if  (isLeapYear(y))(1);
   }
   date=((days%7) +1)  %7;  /*算出给定年份year的1月13日是星期几*/
   c=((2))  ?1:0;
   for(m=1;(3);m++)  {
           switch  (m)  {
                case 1:case 3:  case 5:  case 7:case 8:case 10:case 12:
                        days=31;  break;
                case 4:  case  6:  case  9:  case 11:
                        days=30;  break;
                case 2:days=28;
                        if((4))    days=29;
                        break;
           }/*end of switch*/
          date=((days%7)+ (5) )%7;
            if  (date==5)  c++;
   }  /*end of for*/
      return  c;
   }

选项

答案(1)days++,days+=1,days=days+1,或其等价表示 (2)date==5,或其等价表示 (3)m<12,或其等价表示 (4)isLeapYear(year),或year%4==0 && year%100!=0||year%400==0,或其等价表示 (5)date

解析 本题考查基本程序设计能力。
   题中程序用于计算给定年份中“黑色星期五”(既是13日又是星期五的日期)的数目。    基本的常识为平年每年365天、闰年366天。若今天是星期三(date),则7天后的那天也是星期三,依此类推,可算出m天后为星期几((date+m)%7,为0表示星期日)。
   题目中给出了1900年1月1日是星期一,因此,对于给定的日期,首先需要算出其距离1900.1.1的天数,然后用上式计算该日期对应星期几。
   要计算给定年份中有几个“黑色星期五”,可先计算出该年份的1月13日是星期几,然后计算该年内每月的13日是星期几。所以,程序中首先计算出1900年1月1日至给定年份的1月13日共有多少天(days)。
   在计算给定日期段的天数时,需要考虑大、小月,对于2月份,则需要考虑当前年号是否为闰年。期间若跨年度,则按每年365天(闰年366天)累加天数。对于以下代码段:
   for  (y == 1900;  y < year;  y++)  {
     days+=365;
     if(isLeapYear(y))  (1)  ;
     }
   显然,程序中空(1)处应填入days++或其等价表示形式。
   根据程序中的注释,经语句date=((days%7)+1)%7;处理后,date表示给定年份的1月13日是星期几,而c用于表示“黑色星期五”的个数,因此空(2)处应填入 date==5。
   在下面的代码中,计算给定年份2月份之后每个月的13日星期几(计算天数时需要考虑大、小月,2月份要考虑是否为闰年),其中m表示月号。
   for(m=1;  (3)  ;m++)  {
      switch  (m)  {
         case 1:  case 3:  case 5:  case 7:  case 8:  case 10:  case 12:
                   days=31;  break;
         case 4:  case  6:  case  9:  case  11:
                   days=30;  break;
         case 2:days=28;
                   if(  (4)  )    days=29;
                  break;
      }/*end of switch*/
   由于1月13日已经考虑过,因此需要考虑的日期为2月至12月的每个13日,当月份m为12时,再计算出的日期就是下一年度的1月13日了,因此空(3)处应填入 m<12,空(4)处显然是判断当前年号是否为闰年,因此应填入isLeapYear(year)或 isLeapYear(y)。
   对于代码date=((days%7)+  (5)  %7;,之前已用date表示上个月13日是星期几,days表示间隔的天数,因此空(5)处应填入date。
转载请注明原文地址:https://jikaoti.com/ti/QZW7FFFM
0

最新回复(0)