C语言求星期的题

再次给出任意一个年月日(年>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>
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");
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;
printf("%d\n",w);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-28
没有发现什么地方不对,只是有无效语句而已……
第2个回答  2017-09-28
#include <stdio.h>
int main(void)
{
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"); 
return 0;
}
else 
{
if((m==4||m==6||m==9||m==11)&&(d==31)) 
{
printf("day is error.\n"); 
return 0;
}
else 
{
if((y%100!=0)&&(y%4==0)||(y%400==0))
{
if(m==2&&d>=30) 
{
printf("day is error.\n");
return 0;
}
//else ;
}
else
{
if(m==2&&d>=29) 
{
printf("day is error.\n");
return 0;
}
//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");
}
return 0; 
}

本回答被网友采纳
第3个回答  2016-10-26
有可能是因为w大于int最大值32767,导致溢出.我当时就是因为溢出,结果一直算不对
第4个回答  2014-04-02
这个错到哪了
相似回答