#include<stdio.h>
void main()
{
int year,month,day;
int sum=0,i,week,num,leap;
printf("请输入年月日\n");
scanf("%d%d%d",&year,&month,&day);
for(i=1900;i<=year;i++)
{
if(year%4==0&&year%100!=0)
{
num=366,leap=1;
}else
{
num=365,leap=0;
}
switch(month-1)
{
case 11:
sum+=30;
case 10:
sum+=31;
case 9:
sum+=30;
case 8:
sum+=31;
case 7:
sum+=31;
case 6:
sum+=30;
case 5:
sum+=31;
case 4:
sum+=30;
case 3:
sum+=31;
case 2:
sum+=28+leap;
case 1:
sum+=31;
}
}
sum+=day;
printf("共有%d天",sum);
week=sum%7;
if(week!=0)
{
printf("%d年%d月%d日是星期%d",year,month,day,week);
}else
{
printf("%d年%d月%d日是星期日",year,month,day);
}
}
可是计算出来的 如果输入是2011年1 月1日 就不进switch 因为month-1就是1-1为0 而出来的结果 为总共是1天 1900年和现在怎么天数才会有一天呢?而且是星期一也不正确 就算是输入2011年3月23 就是星期三 可是这天明明是星期二 这个程序到底如何更改呢
其实你这样是错的 不相信你自己算 我找了下1990 1 月1号是星期一 那么你自己算 当你进入表达式的时候 月份是1 然后和case常量去匹配 匹配后 sum+=31 那么 就是31 然后 31+1 就是32了 那么能说 1990年1月1号 共有32天吗 一个月的刚开始 就只有一天 不相信 你把循环条件for(i=1990;i<=year;i++) 你算下看 所以还是要用switch(money-1)只用算11个月的就可以了 switch(1-1)虽然是0 找不到匹配的 但是可以直接执行后面的 sum+=day 就是第一天 第一天刚好就是星期1 1990年的1月1日也确实是星期一 你在算下别的 一样都是正确的 你看看
可是我这个计算出来的 计算2011年4月1号 是星期天 也是错的 哎