阅读以下说明和C语言函数 填补空缺。[说明] 已知1900年1月1日是星期一 下面的函数co
问题详情
阅读以下说明和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
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。