c求输入年月日判断是星期几的一个

#include<stdio.h>
void main()
{
//已知1990年1月1号星期1.求出输入的年月日是星期几
int year,month,day;//年月日
int i,sum=0,num,leap,week;
printf("请输入年月日\n");
scanf("%d%d%d",&year,&month,&day);
for(i=1990;i<=year;i++)
{
if((year%4==0&&year%100!=0)||(year%400==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天\n",sum);
week=sum%7;//求出天数
if(week!=0)
printf("%d年%d月%d天是星期%d\n",year,month,day,week);
else
printf("%d年%d月%d日是星期天\n",year,month,day);

}
如果是求1990年的话就可以计算出来
但是如果是1991年的话 就总天数为1天了 前提是90年的365天没有加上 ,问题出在num=365 num=366 这里 平年和闰年的天数没有相加
因为我的程序矛盾 如果for(i=1990;i<=year;i++) 如果i<输入的年份 那么当i输入为1990就不会循环 如果是等于的话 才会计算 就是总天数相加出现错误 但是不知道如何改

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(x%4==0)
s=s+1;
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;}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-26
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,g;
scanf("%d %d %d",&a,&b,&c);
d=(a-1900)*365;
e=(a-1900)*365+(a-1900)/4;
if(1900<=a&&a<1904)
{
if(b==1)
f=d+c;
else if(b==2)
f=d+31+c;
else if(b==3)
f=d+59+c;
else if(b==4)
f=d+90+c;
else if(b==5)
f=d+120+c;
else if(b==6)
f=d+151+c;
else if(b==7)
f=d+181+c;
else if(b==8)
f=d+212+c;
else if(b==9)
f=d+243+c;
else if(b==10)
f=d+273+c;
else if(b==11)
f=d+304+c;
else
f=d+334+c;
}
else if(a==1904)
{
if(b==1)
f=d+c;
else if(b==2)
f=d+31+c;
else if(b==3)
f=d+60+c;
else if(b==4)
f=d+91+c;
else if(b==5)
f=d+121+c;
else if(b==6)
f=d+152+c;
else if(b==7)
f=d+182+c;
else if(b==8)
f=d+213+c;
else if(b==9)
f=d+244+c;
else if(b==10)
f=d+274+c;
else if(b==11)
f=d+305+c;
else
f=d+335+c;
}

else if(1904<a&&(a%4==0&&a%100!=0||a%400==0))
{
if(b==1)
f=e-1+c;
else if(b==2)
f=e-1+31+c;
else if(b==3)
f=e-1+60+c;
else if(b==4)
f=e-1+91+c;
else if(b==5)
f=e-1+121+c;
else if(b==6)
f=e-1+152+c;
else if(b==7)
f=e-1+182+c;
else if(b==8)
f=e-1+213+c;
else if(b==9)
f=e-1+244+c;
else if(b==10)
f=e-1+274+c;
else if(b==11)
f=e-1+305+c;
else
f=e-1+335+c;
}
else
{
if(b==1)
f=e+c;
else if(b==2)
f=e+31+c;
else if(b==3)
f=e+59+c;
else if(b==4)
f=e+90+c;
else if(b==5)
f=e+120+c;
else if(b==6)
f=e+151+c;
else if(b==7)
f=e+181+c;
else if(b==8)
f=e+212+c;
else if(b==9)
f=e+243+c;
else if(b==10)
f=e+273+c;
else if(b==11)
f=e+304+c;
else
f=e+334+c;
}
printf("%d\n",g,g=f%7);
return 0;
}
相似回答