题目:编写一个函数,计算两个日期之间的时间差,并将其值返回。日期以年月日表示,时间差以天数表示,注意考虑日期之间的闰年。函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。主函数输入日期,调用函数计算天数。
代码如下:
#include <stdio.h>
#include <math.h>
int date_cha(int date1[3], int date2[3])
{
int i = date1[0], j = date2[0]; //避免了date1[0]的改变所造成的数据错误
int day = 0, z1 = 0, z2 = 0;//z1和z2分别date1[1]和date2[1]两个月份天数
int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
day = (date2[0] - date1[0]) * 365;
for (; date2[0] > date1[0]; date1[0]++)
if (date1[0] % 400 == 0 || (date1[0] % 4 == 0 && date1[0] % 100 != 0))//判断是否为闰年
day++;
for (int m = 1; m <= 12; m++)
{
if (m <= date1[1])
z1 += a[m];
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))//判断date1[0]是否为闰年
z1++;
}
for (int m = 1; m <= 12; m++)
{
if (m <= date2[1])
z2 += a[m];
if (j % 400 == 0 || (j % 4 == 0 && j % 100 != 0))//判断date2[0]是否为闰年
z2++;
}
return day += abs((z2+date2[2])-(z1+date1[2]));//abs表示取整数的绝对值
}
int main()
{
int date1[3], date2[3];
int i = 0,day=0;
printf("请输入第一个日期:");//假设第一个日期早于第二个日期
for (i = 0; i < 3; i++)
scanf_s("%d", &date1[i]);
printf("请输入第二个日期:");
for (i = 0; i < 3; i++)
scanf_s("%d", &date2[i]);
day=date_cha(date1, date2);//函数传递代表两个日期的数组
printf("相差的天数:%d", day);
return 0;
}
运行一个实例如下:
这有对abs和fabs函数的讲解: