算出给定年份year的1月13日是星期几

来源:百度知道 编辑:UC知道 时间:2024/05/28 09:40:27
已知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)) days++ ;
}
date = ((days % 7) + 1) % 7; /* 算出给定年份year的1月13日是星期几 */
c = ( date==5 ) ? 1 : 0;
for(m = 1; m<12 ; m++) {
switch (m) {
case 1: case 3: case 5: case 7: case 8: case 10: case

date = ((days % 7) + 1) % 7:(days % 7)是为了求出所求日期与1900年1月1日相差天数除去整星期数(7天为一星期)后剩余的天数,比如说要求的数为1900年1月13日,那么days就为12,出去整星期数后剩余5天,至于后面加1是因为1900年1月1日是星期一,再除以7则为了求出1900年1月13日为星期几。这个你最好多带具体时间进去慢慢体会,不大好用文字表现出来
date =((days % 7) + date ) % 7,中加的date是你输入年份的1月1日是星期几,其余的与1中形同
至于for(m = 1; m<12 ; m++) 12个月为什么不是m<=12呢 ,是因为一年当中我们最多只需要找到12月13日,它与当年1月1日相差的天数根本没用到12月具体有多少天,所以没必要让m<=12.

不知道说明白没有,慢慢体会,多带某一具体年份日期进去更方便你理解 加油!!!

erghtr

我知道!