编写一程序,定义结构体类型struct date,它的成员有year、month、day、weekday。其中weekday为枚举类型,通过键盘任意输入某日期,计算它的星期(1980-1-1日为Tuesday)输出它的年月日及星期的英文名称。
程序如下:
#include<stdio.h>
#include<string.h>
main()
{
struct
{
int year;
int month;
int day;
}DATE;
enum weekday {Monday = 0,Tuesday,Wednesday,Thuesday,Friday,Saturday,Sunday};
enum weekday d1;
int temp;
char str[10];
printf("请输入日期:");
scanf("%d",&DATE.year);
scanf("%d",&DATE.month);
scanf("%d",&DATE.day);
temp = (DATE.day + 2 * DATE.month + 3 * (DATE.month + 1) / 5 + DATE.year + DATE.year/ 4 - DATE.year / 100 + DATE.year / 400) % 7;
d1 = (enum weekday)temp;
switch(d1)
{
case Monday:
strcpy(str,"Monday");break;
case Tuesday:
strcpy(str,"Tuesday");break;
case Wednesday:
strcpy(str,"Wednesday");break;
case Thuesday:
strcpy(str,"Thuesday");break;
case Friday:
strcpy(str,"Friday");break;
case Saturday:
strcpy(str,"Saturday");break;
case Sunday:
strcpy(str,"Sunday");break;
}
printf("%d.%d.%d.%s",DATE.year,DATE.month,DATE.day,str);
}
本题程序中用了根据日期来判断星期几的“吉姆拉尔森”计算公式。
算法如下:W = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) mod 7;
公式中 d 表示日期中的日,m 表示月份,y 表示年份。
需要注意的是,要把一月和二月看成是上一年的十三月和十四月,例如:如果要计算2004-1-10是星期几,要将其换算为2003-13-10来代入公式计算。