设计一个表示日期的结构体。编写一个函数,计算两个日期之间相差多少天。在 main 函数中调用该函数,并显示结果
/*========================================================================================================
*学号:1527403059
*作业:E71
*功能:设计一个表示日期的结构体。编写一个函数,计算两个日期之间相差多少天。在main函数中调用该函数并显示结果
*作者:陆胤任
*日期:2016.1.1
*=========================================================================================================*/
#include<stdio.h>
#include<math.h>
/*type definr*/
struct Date //声明一个结构体类型struct Date
{
int year;
int month;
int day;
}date1,date2; //定义两个结构体变量data1,data2
/*function define
*@brief:计算两个日期相差多少天
*@param:int num:保存两个日期相差多少天
int temp:用于交换两数
*@reval:int num:日期相差天数
*/
int count_date1_date2(struct Date date1,struct Date date2) //定义count_date1_date2(struct Date date1,struct Date date2)函数计算两个日期相差几天
{
int num;
int i,y,m,n,temp;
int ext=0;
int sum_1=0,sum_2=0,sum_3=0;
int a[12]={31,28.31,30,31,30,31,31,30,31,30,31};
y=date1.year-date2.year;
m=date1.year;
n=date2.year;
if(m<n)
{
temp=m;
m=n;
n=temp;
}
for(i=n;i<m;i++) //ext为两个年份之间闰年的年数
{
if(i%4==0&&i%100!=0||i%400==0)
{
ext++;
}
}
if(date1.year%4==0&&date1.year%100!=0||date1.year%400==0) //如果是闰年,则2月有29天
{
a[1]+=1;
}
for(i=0;i<date1.month-1;i++)
{
sum_1+=a[i];
}
sum_1+=date1.day;
a[1]=28;
if(date2.year%4==0&&date2.year%100!=0||date2.year%400==0)
{
a[1]+=1;
}
for(i=0;i<date2.month-1;i++)
{
sum_2+=a[i];
}
sum_2+=date2.day;
num=y*365+sum_1-sum_2+ext; //相隔的总天数
return abs(num); //返回值为num的绝对值
}
int main()
{
int a;
printf("请输入第一个日期:\n");
scanf("%d%d%d",&date1.year,&date1.month,&date1.day); //输入第一个日期
printf("请输入第二个日期:\n");
scanf("%d%d%d",&date2.year,&date2.month,&date2.day); //输入第二个日期
a=count_date1_date2(date1,date2);
printf("输入的两个日期相差%d天\n",a);
return 0;
}