再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。
#include <stdio.h>
void main ()
{
int y,m,d,c,s,w;
scanf("%d%d%d",&y,&m,&d);
if(m<1||m>12)
printf("month is error.\n");
else
if(d<1||d>31)
printf("day is error.\n");
else
if((m==4||m==6||m==9||m==11)&&(d==31))
printf("day is error.\n");
else
if((y%100!=0)&&(y%4==0)||(y%400==0))
if(m==2&&d>=30)
printf("day is error.\n");
else;
else
if(m==2&&d>=29)
printf("day is error.\n");
else;
if (m==1) c=d;
else if (m==2) c=31+d;
else if (m==3) c=31+28+d;
else if (m==4) c=31+28+31+d;
else if (m==5) c=31+28+31+30+d;
else if (m==6) c=31+28+31+30+31+d;
else if (m==7) c=31+28+31+30+31+30+d;
else if (m==8) c=31+28+31+30+31+30+31+d;
else if (m==9) c=31+28+31+30+31+30+31+31+d;
else if (m==10) c=31+28+31+30+31+30+31+31+30+d;
else if (m==11) c=31+28+31+30+31+30+31+31+30+31+d;
else if (m==12) c=31+28+31+30+31+30+31+31+30+31+30+d;
if (m>2)
{if (y%100==0) {if (y%400==0) c=c+1;}
else if (y%4==0) c=c+1;}
s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c;
w=s%7;
switch (w)
{
case 0: printf("0\n");break;
case 1: printf("1\n");break;
case 2: printf("2\n");break;
case 3: printf("3\n");break;
case 4: printf("4\n");break;
case 5: printf("5\n");break;
case 6: printf("6\n");break;
printf("\n");
}
}
程序老是不对一个地方?求大神指点迷津
程序没发现有不对的地方啊?只是有点冗赘。
稍作简化后的程序:
#include <stdio.h>