#include "stdafx.h"
#include
int fun(int year)
{
int sum=0;
if(year>2011)
{
while(year>2011)
{
year--;
if(year%4==0&&year%100!=0||year%400==0) sum+=2;
else sum+=1;
}
return (sum+6)%7;
}
while(year<2011)
{
if(year%4==0&&year%100!=0||year%400==0) sum-=2;
else sum-=1;
year++;
}
return 6+sum%7;
}
void main()
{
int y,w;
printf("旅掘请输入年份:");
scanf("%d",&y);
w=fun(y);
if(w==0)
printf("%d年1月1日是星期天。\n",y);
else
printf("%d年1月1日是星期%d。\n",y,w);
}
编程思路:
首先,需知道某一年第拆并核一天是星期(2011年1月1日是星期六);
之后,算出某年与2011年共相差几天(本程序中用sum累计),
如果year>2011,先自减一,计算year-1那年有多少天
考虑到365%7=1,366%7=2,所以用sum+=1和sum+=2分别统计平年和闰年应该加多少天
最后,返回(sum+6)%7,(2011年1月1日是星期6)
如果year<2011,先减sum,再year++,
比如2008年1月1日,如果先year++,那当年的天蔽禅数就误作365天处理了(year++后成了2009,不是闰年)
最后返回值的表达式与year>2011的不同,因为sum是往回减的
当然如果year=2011,两处循环的表达式都不符合,直接返回6
主函数中,根据返回值决输出,此处把0作星期天处理