题目

  1. 编写程序,输入两个日期(年、月、日,年、月、日),输出这两个日期之间相隔多少天。

思路

要求任意两个日期相差的天数,首先要求出两年直接相差的天数,然后分别计算每个日期距离自己的年初有多少天。最后通过如下公式即可求出天数。
总天数 = year1和year2相差天数 + date2距离年初的天数 - date1距离年初的天数

代码

#define _CRT_SECURE_NO_WARNINGS   // _crt_secure_no_warnings
#include <stdio.h>
#include <stdlib.h>

int isleap(int year);

int main()
{
    int i,j;
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year[2],month[2],day[2],data;
    int sum[2]={0},days=0;
    for(i=0;i<2;i++)
    {
        printf("请输入第%d日期:\n",i+1);

yea:
        printf("年:");
        scanf("%d",&year[i]);
        if(year[i]>9999 || year[i]<=0)
        {
            printf("请输入正确的年份\n");
            goto yea;
        }
mon:
        printf("月:");
        scanf("%d",&month[i]);
        if(month[i]<=0 || month[i]>12)
        {
            printf("请输入正确的月份\n");
            goto mon;
        }
da:
        printf("日:");
        scanf("%d",&day[i]);
        if(day[i]<=0 || day[i]>28)
        {
            if(2==month[i])
            {
                data=isleap(year[i]);
                if(data)
                {
                    if(29!=day[i])
                    {
                        printf("请输入正确的日期\n");
                        goto da;
                    }
                }else{
                    printf("请输入正确的日期\n");
                    goto da;
                }
            }else if(4==month[i] || 6==month[i] || 9==month[i] || 11==month[i])
            {
                if(day[i]>30 || day[i]<=0)
                    {
                        printf("请输入正确的日期\n");
                        goto da;
                    }
            }else if(day[i]>31 || day[i]<=0)
            {
                printf("请输入正确的日期\n");
                goto da;
            }
        }
    }

    for(i=0;i<2;i++)
    {
        for(j=1;j<month[i];j++)
        {
            sum[i]=sum[i]+a[j];
        }
        sum[i]+=day[i];
        data=isleap(year[i]);
        if(data && month[i]>2)
        {
            sum[i]+=1;
        }
    }
    for(i=year[0];i<year[1];i++)
    {
        if(isleap(i))
        {
            days+=366;
        }else{
            days+=365;
        }
    }
    days=days+sum[1]-sum[0];
    printf("相差%d天\n",days);
    system("pause");
}

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

执行结果
图片说明