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

admin2012-04-11  36

问题 阅读以下说明和C语言函数,填补空缺。
[说明]
   已知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)) ________ ;
     }
     date=((days%7)+1)%7;
     /*算出给定年份year的1月13日是星期几+/
     c=(  ________  )?1:0;
     for(m=1;  ________ ; 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(  ________  )days=29;
            break;
     }/*end of switch*/
   date=((days%7)+ ________ )%7;
       if (date==5)  c++;
   }  /*end of for*/
     return c;
   }

选项

答案days=days+1或其他等价形式 date==5或其他等价形式 m<12或其他等价形式 isLeapYear(year)或其他等价形式 date

解析 对于2月份,需要考虑所在年份是否为闰年,如果不是,则按365天计算,否则天数要加1,所以(1)处应为days=days+1或其他等价形式。程序中date变量表示的是星期几,如果是星期五(即date==5)则c取值为1,否则为0,所PA(2)处应为date==5。因为要考虑到每个月的13日是否为周五,所以要对其进行遍历,但是1月份之前己考虑过,所以就要考虑2到12月,那么m就应该从1到11,所以(3)处应为m<12或m<=11,或其他等价形式。同时也很容易得出(4)处是判断年份是否为闰年,因此需要调用相应的判断函数,即(4)处应为isLeapYear(year)或其他等价表示。通过之前的代码分析,不难得到(5)处为date。
转载请注明原文地址:https://jikaoti.com/ti/OvL7FFFM
0

最新回复(0)