飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2062|回复: 1

[C/C++] [原创]第二天算日期的源码

[复制链接]
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-7-28 21:10:29 | 显示全部楼层 |阅读模式
    #include <stdio.h>

    // 保存每个月的天数
    int months[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},
                                             {0,31,29,31,30,31,30,31,31,30,31,30,31}} ;

    // 保存平年闰年的天数
    int years[2] = {365, 366};

    // 判断平年闰年,如果是闰年,返回1,平年返回0
    int isLeap(int m)
    {
            if (m%4 != 0 || (m%100 == 0 && m%400 != 0))
                    return 0;
        return 1;
    }

    // 判断年月日是否合法
    // 合法返回1, 不合法返0
    int isSuccDate(int year, int month, int day)
    {
        // 判断年是否合法
        if (year < 0)
        {
            printf("对不起,公元前不在本程序计算之内\r\n") ;
            return 0 ;
        }
       
        // 判断月是否合法
        if (month < 1 || month > 12)
        {
            printf("对不起,您的月份输入不正确!\r\n") ;
            return 0 ;
        }
       
        // 判断日是否合法
        if (day < 0 || (day > months[isLeap(year)][month]))
        {
            printf("对不起,您的天数输入不正确! \r\n") ;
            return 0 ;
        }
        return 1;
    }

    // 输出体力、情绪、智力
    void Display(int sum)
    {
        printf("%s\r\n", ((sum%23) > 11)?"体力低潮期":"体力高潮期") ;
        printf("%s\r\n", ((sum%28) > 14)?"情绪低潮期":"情绪高潮期") ;
        printf("%s\r\n", ((sum%33) > 16)?"智力低潮期":"智力高潮期") ;
    }

    int main(void)
    {
        int     year ,      // 出生年
                month ,     // 出生月
                day ,       // 出生日
                year1,      // 当前年
                month1,     // 当前月
                day1,        // 当前日
                sum ,       // 总天数
                i ;
       
        printf ("输入出生年月日:year mouth day ") ;
        scanf("%d%d%d", &year, &month, &day) ;

        printf ("输入当前年月日:year mouth day ") ;
        scanf("%d%d%d", &year1, &month1, &day1) ;
       
        // 判断日期是否合法
        if (year > year1 || ! isSuccDate(year, month, day) || ! isSuccDate(year1, month1, day1))
        {
            printf("日期不正确,错误退出! \r\n") ;
            return 1 ;
        }

        // 计算出生时是那年的第多少天
        sum = 0 ;
        for (i = 1; i < month; ++i)
        {
            sum += months[isLeap(year)][i] ;
        }
        sum += day ;
       
        // 相减求出那年还有多少天
        sum = years[ isLeap(year) ] - sum ;
       
        // 求出中间年的天数
        for (i = year + 1; i < year1; ++i)
        {
            // 通过判断平年闰年获得那年天数
            sum += years[isLeap(i)] ;
        }
       
        // 求出当前已经过了那年的多少天
        for (i = 1; i < month1; ++i)
        {
            sum += months[isLeap(year1)][i] ;
        }
        sum += day1;
       
        // 因为年份相求,会多加一次
        if (year == year1)
            sum -= years[isLeap(year)] ;
       
        printf("你已经存活了 %5d 天了\r\n", sum) ;
       
        // 调用输出结果
        Display(sum) ;
       
        return 0;
    } // end of main
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-7-28 21:15:31 | 显示全部楼层
    恩 多交流些源码

    很有意义 ~~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表