题库 题库

【简答题】

试题二(共15分)
阅读以下说明和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

相关试题