修改了两个小错误,一个是2008-11串行的问题,一个是将公元元年设置成平年,以前都认为是闰年的,但是通过日历计算,其实是将元年设置为平年计算的……
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<string.h>
void f(int x,int s)
{int i,a=0,b,k;
if (x>=1977)
{{for(i=1977;i<x;i++)
{a=a+5;
if(i%4==0)
a++;}
b=(a+s)%12;}
switch(b)
{case 1:printf("冲鼠");break;
case 2:printf("冲牛");break;
case 3:printf("冲虎");break;
case 4:printf("冲兔");break;
case 5:printf("冲龙");break;
case 6:printf("冲蛇");break;
case 7:printf("冲马");break;
case 8:printf("冲羊");break;
case 9:printf("冲猴");break;
case 10:printf("冲鸡");break;
case 11:printf("冲狗");break;
case 0:printf("冲猪");break;
}}
else
printf("无法确定冲那个属相");}
main()
{
int x,day_code,m,d,s=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&x);scanf("%d%d",&m,&d);
if(m<1||m>13||d>31||d<1)
printf("输入错误");
else
{
day_code=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7;
for(int i=0;i<m-1;i++)
s=s+a[i];
s=s+d;
if(m>2)
{if(x%4==0)
{printf("今年是闰年\n");
s=s+1;}
else printf("今年不是闰年\n");}
else printf("这是今年的第%d天\n",s);
int j=(s+day_code-1)%7;
switch(j)
{case 0:printf("今天是星期日\n");break;
case 1:printf("今天是星期一\n");break;
case 2:printf("今天是星期二\n");break;
case 3:printf("今天是星期三\n");break;
case 4:printf("今天是星期四\n");break;
case 5:printf("今天是星期五\n");break;
case 6:printf("今天是星期六\n");break;}
f(x,s);}
getch();}