题目
- 编写程序,输入两个日期(年、月、日,年、月、日),输出这两个日期之间相隔多少天。
思路
要求任意两个日期相差的天数,首先要求出两年直接相差的天数,然后分别计算每个日期距离自己的年初有多少天。最后通过如下公式即可求出天数。
总天数 = 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;
}
执行结果

京公网安备 11010502036488号