自己也可以计算日期哦。
//编写一程序,定义结构体类型struct date,
它的成员有year、month、day、weekday。
其中weekday为枚举类型,通过键盘任意输入
某日期,计算它的星期(1980-1-1日为Tuesday)
输出它的年月日及星期的英文名称。
//主要问题是:1,天数的计算;2,1980年前的枚举类型的处理。
enum date1
{
tue=0,wed,thu,fri,sat,sun,mon,TUE
};
typedef struct date
{
int year;
int month;
int day;
}S;
#includestdio.h
#define H printf(n);break;
long count(S q);
int judge(int y);
void out_day(S q,long p1);
main()
{
S a,p;long v,p1=&v;
p=&a;
printf(nt输入你想查询的日期(y-m-d):);
scanf(%d-%d-%d,&p-year,&p-month,&p-day);//注意输入格式
while((judge(p-year)==0&&p-month==2&&p-day=29)(p-month1p-month12)(p-day31p-day0))
{
printf(nntta输入错误,请重新输入:);
scanf(%d-%d-%d,&p-year,&p-month,&p-day);
}
v=count(p);
out_day(p,p1);
}
long count(S q)
{
int t,n=0,m=0;
long p=0,sum=0;
int i,j;
int d[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
if(q-year1980)
{
for(i=1980;iq-year;i++)
{
t=judge(i);
if(t==1)
m++;
else
n++;
}
for(j=0;jq-month-1;j++)
if(judge(q-year)==1)
p+=d[0][j];
else
p+=d[1][j];
sum=m366+n365+p+q-day-1;
}
if(q-year==1980)
{
for(j=0;jq-month-1;j++)
p+=d[0][j];
sum=p+q-day-1;
}
if(q-year1980)
{
for(i=q-year;i1980;i++)
{
t=judge(i);
if(t==1)
m++;
else
n++;
}
for(j=0;jq-month-1;j++)
if(judge(q-year)==1)
p+=d[0][j];
else
p+=d[1][j];
sum=m366+n365-p-q-day+1;
}
return(sum);
}
int judge(int y)//判断是否为平年。
{
if((y%4==0&&y%100!=0)y%400==0)
return(1);//闰年
else
return(0);//平年
}
void out_day(S q,long p1)
{
int f;
enum date1 k;
printf(nta这天是:n);
printf(t%d年%d月%d日--------,q-year,q-month,q-day);
f=(p1)%7;
if(q-year=1980)
{
k=(enum date1)f;
switch(k)
{
case sunprintf(sundayn);H
case monprintf(mondayn);H
case tueprintf(tuesdayn);H
case wedprintf(wednesdayn);H
case thuprintf(thursdayn);H
case friprintf(fridayn);H
case satprintf(saturdayn);H
}
}
else
{
k=(enum date1)(7-f);
switch(k)
{
case sunprintf(sundayn);H
case monprintf(mondayn);H
case wedprintf(wednesdayn);H
case thuprintf(thursdayn);H
c
ase friprintf(fridayn);H
case satprintf(saturdayn);H
case TUEprintf(tuesdayn);H
}
}
}