与时间有关的问题

编写一程序,定义结构体类型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来代入公式计算。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值