• C语言下不使用日期函数输入任意日期计算周几的程序


    #include<stdio.h>
    #define CURRENT_YEAR 2015
    #define CURRENT_MON  6
    #define CURRENT_DAY  21
    enum month{Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
    int year;        //输入的年份
    enum month mon;    //输入的月份
    int day;        //输入的日
    int total_yday=0;    //相差满年天数
    int total_mday=0;    //相差不满年天数
    int total_day =0;    //相差总天数
    int plus_mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//默认月份天数
    int i,j;
    void greater_date()    //比当前年份大
    {
        total_yday=0;    //重置相差满年天数
        total_mday=0;    //重置相差不满年天数
        total_day =0;    //重置相差总天数
    
        for(i=CURRENT_YEAR+1;i<year;i++)//算出满年天数
        {
            if((i%4==0 && i%100!=0) || (i%400 == 0))
                total_yday=total_yday+366;
            else
                total_yday=total_yday+365;
        }
    
    
        if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0)//设置当前年份二月天数
            plus_mday[2]=29;
    
        for(j=CURRENT_MON+1;j<13;j++)    //当前预设月份到年尾天数
        {
            total_mday=total_mday+plus_mday[j];    
        }
        total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY;    //将当前月份不满月天数添加进total_mday,tot
        plus_mday[2]=28;    //恢复二月默认天数28
    
        if((year%4==0 && year%100!=0) || year%400==0)        //设置输入年份二月份天数
            plus_mday[2]=29;
        for(j=1;j<mon;j++)
        {
            total_mday=total_mday+plus_mday[j];
        }
        total_mday=total_mday+day;
        total_day=total_yday+total_mday;
    
        total_day=total_day%7;
    }
    
    void smaller_date()    //比当前年份小
    {
        total_yday=0;    //重置相差满年天数
        total_mday=0;    //重置相差不满年天数
        total_day =0;    //重置相差总天数
    
        for(i=year+1;i<CURRENT_YEAR;i++)
        {
            if((i%4==0 && i%100!=0) || (i%400 == 0))
                total_yday=total_yday+366;
            else
                total_yday=total_yday+365;
        }
    
        if((year%4==0 && year%100!=0) || year%400==0)        //设置输入年份二月份天数
            plus_mday[2]=29;
    
        for(j=mon+1;j<13;j++)    //输入月份到年尾天数
        {
            total_mday=total_mday+plus_mday[j];    
        }
        total_mday=total_mday+plus_mday[mon]-day;    //将输入月份不满月天数添加进total_mday,tot
        plus_mday[2]=28;    //恢复二月默认天数28
    
        if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0)    //设置当前年份二月天数
            plus_mday[2]=29;
    
        for(j=1;j<CURRENT_MON;j++)    //计算当前预设日期已过当年天数
        {
            total_mday=total_mday+plus_mday[j];
        }
        total_mday=total_mday+CURRENT_DAY;
        total_day=total_yday+total_mday;
    
        total_day = (7-total_day%7)%7;
    }
    
    void equal_date()    //年份与预设年份相同
    {
        total_yday=0;    //重置相差满年天数
        total_mday=0;    //重置相差不满年天数
        total_day =0;    //重置相差总天数
    
        if(mon<CURRENT_MON)//比当前预设月份小
        {
            for(i=mon+1;i<CURRENT_MON;i++)
            {
                total_mday=total_mday+plus_mday[i];
            }
            total_mday=total_mday+plus_mday[mon]-day+CURRENT_DAY;
            total_day=total_mday;
            total_day=(7-total_day%7)%7;
        }
        if(mon>CURRENT_MON)    //比当前预设月份大
        {
            for(i=CURRENT_MON+1;i<mon;i++)
            {
                total_mday=total_mday+plus_mday[i];
            }
            total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY+day;
            total_day=total_mday;
            total_day=total_day%7;
        }
        if(mon==CURRENT_MON)
        {
            if(day>=CURRENT_DAY)
            {
                total_day=day-CURRENT_DAY;
                total_day%=7;
            }
            if(day<CURRENT_DAY)
            {
                total_day=CURRENT_DAY-day;
                total_day=(7-total_day%7);
            }
        }
    }
    
    void get_date()    //输入日期
    {
        year=0;
        day=0;
        mon=0;
    
        printf("Input year:");
        scanf("%d",&year);
        int i,j;
        getchar();
        while(1)    //get month
        {
            printf("Input month:");
            scanf("%d",(int*)&mon);
            getchar();
            if(mon>0&&mon<=12)
                break;
        }
        while(1)    //get day
        {
            printf("Input day:");
            scanf("%d",&day);
            getchar();
            if(day>0&&day<=31)
                break;
        }
    
    }
    
    void output_weekday()
    {
            switch(total_day)
            {
                case 1:
                    printf("%d年%d月%d日是星期一
    ",year,mon,day);
                    break;
                case 2:
                    printf("%d年%d月%d日是星期二
    ",year,mon,day);
                    break;
                case 3:
                    printf("%d年%d月%d日是星期三
    ",year,mon,day);
                    break;
                case 4:
                    printf("%d年%d月%d日是星期四
    ",year,mon,day);
                    break;
                case 5:
                    printf("%d年%d月%d日是星期五
    ",year,mon,day);
                    break;
                case 6:
                    printf("%d年%d月%d日是星期六
    ",year,mon,day);
                    break;
                case 0:
                    printf("%d年%d月%d日是星期天
    ",year,mon,day);
                    break;
                default:
                    break;
            }
    }
    
    int main()
    {
        while(1)
        {
                get_date();
            if(year>CURRENT_YEAR)
                greater_date();
            if(year<CURRENT_YEAR)
                smaller_date();
            if(year==CURRENT_YEAR)
                equal_date();
            output_weekday();
        }
    }
  • 相关阅读:
    【iCore3 双核心板】例程二十四:LAN_DHCP实验——动态分配IP地址
    【iCore3 双核心板】例程二十三:LAN_HTTP实验——网页服务器
    【iCore3 双核心板】例程二十二:LAN_UDP实验——以太网数据传输
    【iCore3 双核心板】例程二十一:LAN_TCPS实验——以太网数据传输
    【iCore3 双核心板】例程二十:LAN_TCPC实验——以太网数据传输
    【iCore3 双核心板】例程十九:USBD_MSC实验——虚拟U盘
    【iCore3 双核心板】例程十八:USB_VCP实验——虚拟串口
    【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
    【iCore3 双核心板】例程十六:USB_HID实验——双向数据传输
    【iCore3 双核心板】例程十五:USB_CDC实验——高速数据传输
  • 原文地址:https://www.cnblogs.com/wystan/p/4590804.html
Copyright © 2020-2023  润新知