C语言请教

int weeks(long year,int mouth,int day) /*计算公元某年某月某日是星期几函数*/
{
long S;
int Xing_qi,C;
switch(isleap(year))
{
case 0:
switch(mouth)
{
case 1: C=day;break;
case 2: C=31+day;break;
case 3: C=59+day;break;
case 4: C=90+day;break;
case 5: C=120+day;break;
case 6: C=151+day;break;
case 7: C=181+day;break;
case 8: C=212+day;break;
case 9: C=243+day;break;
case 10: C=273+day;break;
case 11: C=304+day;break;
case 12: C=334+day;break;
default : break;
} break;
case 1:
switch(mouth)
{
case 1: C=day;break;
case 2: C=31+day;break;
case 3: C=60+day;break;
case 4: C=91+day;break;
case 5: C=121+day;break;
case 6: C=152+day;break;
case 7: C=182+day;break;
case 8: C=213+day;break;
case 9: C=244+day;break;
case 10: C=274+day;break;
case 11: C=305+day;break;
case 12: C=335+day;break;
default : break;
} break;
}
S=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+C;
Xing_qi=S%7;
return Xing_qi;
}

请问这段C语言中的S=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+C; 是什么意思???

貌似公元元年的元旦是星期天吧,平年一年有365天,除以7的余数是1,由此可知如果今年是平年,且今年的某月某日是星期一。那么第二年的同一天就是星期二。如果是闰年。除以7的余数则是2,同理如果闰年的某月某日是星期一,则第二年的某月某日是星期三。类推。
如果一年是364天,那么每年的同一日期对应的星期几都是固定的(364%7=0),但实际上平年多出一天,闰年多出2天,那么公元year年的第C天就多出了 year-1+闰年年数+C 这么多天,能被4整除但不能被100整除或者能被400整除的年份是闰年,C表示那天是那年中的第几天,所以得出以上式子,当然用S=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+C;最终得到的结果也是一样的,因为((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+C)%7等于((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+C )%7相当于化简了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-05
C为当年的第几天,这个相信你懂的;
S=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400;是什么意思呢?

是这样的,平年为365天,而闰年为366天;但364刚刚可以被7整除,所以一般来说,一年与下一年在星期几上就差1天(这没考虑闰年的影响因素),所以便有了year-1;但因为闰年的存在,所以需要计算,在今年之前出现了多少个闰年;总和S也就是那么多年(平年+闰年)对星期几的影响因素。
第2个回答  2020-01-13
第3个回答  2019-11-15
第4个回答  2012-05-05
闰年 处理