计算日期

来源:互联网 发布:服务器安装centos 编辑:程序博客网 时间:2024/06/10 04:12

 /*************************************************************************
Author: Li Qingyang
Time:   15/08/2008
Fun:
编写一个程序,要求计算出生日到计算日的总天数
算法:
1)输入出生年year1、月month1、日date1和计算日年year2、月month2、日date2。
2)统计year1到year2-1的总天数:
   for (n=year1,days=0;n<year2;n++)
     if (n是闰年) days+=366
     else days+=365;
  3)计算出出生日和计算日是当年的第days1和days2。   
  4)总天数等于days+days2-days1

根据结果,判断体力、情绪和智力状态
     方法如下:
       体力状态:用总天数除以23,余数在0~11为体力高潮期,否则为体力低潮期。
       情绪状态:用总天数除以28,余数在0~14为情绪高潮期,否则为情绪低潮期。
       智力状态:用总天数除以33,余数在0~16为智力高潮期,否则为智力低潮期。
**************************************************************************/

#include <stdio.h>

 

//是否是闰年
int IsLeepYear(int year)
{
    if ((year%400 == 0) || ((year%4==0) && (year%100 !=0)))
    {
        return 1;
    }
    return 0;
}

//月份
int DaysOfMonth(int year, int month)
{
    int nDays;
    if (month == 1 || month == 3 || month == 5 || month == 7
        || month == 8 || month == 10 || month == 12)
    {
        nDays = 31;
    }
    else if (month == 2)
    {
        nDays = IsLeepYear(year) + 28;
    }
    else
    {
        nDays = 30;
    }
    return nDays;
}

//计算是当年的第几天
int DaysOfYear(int year, int month, int date)
{
    int nSumOfDays = 0;
    int nDays = 0;
    int i;
    for (i = 1; i < month; i++)
    {
        nDays += DaysOfMonth(year, i);
    }
    return nSumOfDays = nDays + date;
}


void State(int nDays)
{
    //体力状态判断
    if (nDays%23 <= 11)
    {
        printf("体力高潮期/r/n");
    }
    else
    {
        printf("体力低潮期/r/n");
    }

    //情绪状态判断
    if (nDays%28 <= 14)
    {
        printf("情绪高潮期/r/n");
    }
    else
    {
        printf("情绪低潮期/r/n");
    }

    //智力状态判断
    if (nDays%33 <= 16)
    {
        printf("智力高潮期/r/n");
    }
    else
    {
        printf("智力低潮期/r/n");
    }

}


void main()
{
    int year1, month1, date1;   //出生年,月,日
    int year2, month2, date2;   //计算日的年,月,日
    int i;  //临时变量用于年份的累加
    int nSumOfDays = 0;  //总天数


    scanf("%d%d%d", &year1, &month1, &date1);
    if (month1 > 12 || date1 > 31)
    {
        printf("input error!");
        return;
    }
    scanf("%d%d%d", &year2, &month2, &date2);
    if (month2 > 12 || date2 > 31)
    {
        printf("input error!");
        return;
    }
    if (year1 > year2)
    {
        printf("input error!");
        return;
    }
   
    //计算出生年日到计算日的总天数
    for (i = year1; i <= year2; i++)
    {
        if (year2 != i)
        {
            nSumOfDays += IsLeepYear(i) + 365;
            continue;
        }
        else
        {
            nSumOfDays += DaysOfYear(year2, month2, date2);
        }
    }
    nSumOfDays = nSumOfDays - DaysOfYear(year1, month1, date1);
   
    printf("总天数为:%d/r/n", nSumOfDays);
    printf("出生日是当年的第%d天/r/n", DaysOfYear(year1, month1, date1));
    printf("计算日是当年的第%d天/r/n", DaysOfYear(year2, month2, date2));
    State(nSumOfDays);
}

原创粉丝点击