分别完成以下功能:
1.计算某一年是对应年的第几天?
2.这一年一共几天?
3.计算两个日期之间的相隔天数?
此版块应该注意优先级问题,以及上述算法中的一些细节问题,将以下各个函数背下来
#include<stdio.h>
typedef struct date//定义日期的结构型
{
int day;
int month;
int year;
}Date;
int main()
{
Date d1, d2;
int RunOrPin(Date);
int distance(Date, Date);
scanf("%d%d%d", &d1.year, &d1.month, &d1.day);
scanf("%d%d%d", &d2.year, &d2.month, &d2.day);
printf("相差%d天\n", distance(d1, d2));
return 0;
}
int RunOrPin(int d1)//判断是闰年还是平年
{
if (d1% 4 == 0 && d1 % 100 != 0 || d1 % 400 == 0)//运算符优先级 ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符,单目运算符结合方向从右向左,收藏有
return 1;
else
return 0;
}
int caculate(Date d1)//计算某一天为一年中的第几天
{
int month1[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
int days = d1.day;
for (int i = 1; i < d1.month; i++)//累加天数
{
days += month1[i];
}
if (d1.month >= 3 && RunOrPin(d1.year))//若所求月份超过三月且当年为闰年则需要多加一天
days++;
return days;
}
int fun(int d1)//返回本年天数
{
if (RunOrPin(d1))
return 366;
else
return 365;
}
int distance(Date d1, Date d2)
{
int sum = 0;
if (d1.year != d2.year)//不在同一年
{
sum = fun(d1.year) - caculate(d1);//本年剩余天数
for (int i = d1.year + 1; i < d2.year; i++)//中间相隔的年的总天数
{
sum += fun(i);
}
sum = sum + caculate(d2);//此年的当前天数
return sum;
}
else//同一年
return caculate(d1) - caculate(d2);
}