一个计算星期的程序
下面程序的功能:任意输入一个时间X年Y月Z日,求出它是星期几。i:月份 j:每月天数 k:若k=0,则x为闰年 t:闰年数 d:天数差
#include "stdio.h"
#include "math.h"
struct date
{
int year;
int month;
int day;
};
int mon(int i)
{
int j;
if(i==1||i==3||i==5||i==7||i==8||i==10)
j=31;
if(i==4||i==6||i==9||i==11)
j=30;
if(i==2)
j=28;
return j;
}
int daies(int x,int y,int z)
{
enum weekday
{mon=6,tue=0,wed,thu,fri,sta,sun};
enum weekday week;
int i,j,k,t,m=0,n,d;
k=abs(x-1980)%4;
if(x>=1980)
{
t=(x-1980)/4;
for(i=1;i<y;i++)
{
int mon(i);
if(i==2&&k==0)
j=29;
m=j;
m+=m;
}
d=(x-1980)*365+m+(z-1)+t;
n=d%7;
}
if(x<1980)
{
t=(1979-x)/4;
for(i=12;i>y;i--)
{
int mon(i);
if(i==2&&k==0)
j=29;
m=j;
m+=m;
}
if(k==0)
d=(1979-x)*365+m+(31-z)+t;
n=6-d%7;
}
week=(enum weekday)n;
switch(week)
{
case mon:printf("星期一\n"); break;
case tue:printf("星期二\n"); break;
case wed:printf("星期三\n"); break;
case thu:printf("星期四\n"); break;
case fri:printf("星期五\n"); break;
case sta:printf("星期六\n"); break;
case sun:printf("星期天\n"); break;
}
}
main()
{
struct date d;
printf("输入年份:");
scanf("%d",&d.year);
printf("输入月份:");
scanf("%d",&d.month);
printf("输入日期:");
scanf("%d",&d.day);
printf("输出:\n");
printf("%d年%d月%d日\n",d.year,d.month,d.day);
daies(d.year,d.month,d.day);
}
参照日期:1980.1.1——星期二
程序运行后,有时正常,有时错误
如,输入:2008.5.24 输出:星期六(正常)
输入:1981.2.24 输出:星期五(正确是星期二)
请哪位高手帮我指点下