一个关于计算星期的程序
下面这个程序是求任意一个日期的星期的,如:给定日期X年Y月Z日,求出它的星期i:月份 a[i]:每月天数 k:若k=0,则x为闰年 t:闰年数 d:天数差
参照日期:1980.1.1——星期二
#include "stdio.h"
#include "math.h"
struct date
{
int year;
int month;
int day;
};
int daies(int x,int y,int z)
{
enum weekday
{mon=6,tue=0,wed,thu,fri,sta,sun};
enum weekday week;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,k,t,m=0,n,d;
k=abs(x-1980)%4;
if(k==0)
a[1]=29;
if(x==1980)
{
for(i=0;i<y;i++)
m+=a[i];
m=m+a[y-1];
d=m+z-1;
n=d%7;
}
if(x>1980)
{
t=(x-1981)/4;
for(i=0;i<y;i++)
m+=a[i];
m=m-a[y-1];
d=(x-1980)*365+m+z+t;
n=d%7;
}
if(x<1980)
{
t=(1979-x)/4;
for(i=y-1;i<12;i++)
m+=a[i];
m=m-a[11];
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;
}
return week;
}
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);
}
此程序是用数组写的,好像有些繁琐。不知哪位高人能指导下,让它变简洁些