第一题
日期之间的天数差
定义一个日期结构体变量(包括年,月,日)。写函数计算两个日期之间的天数差?注意闰年问题。
样例输入#1:
2020 12 20
2020 12 23
样例输出#1:
3
样例输入#2:
2020 12 20
2020 12 19
样例输出#2:
-1
样例输入#2:
2020 12 20
2000 11 19
样例输出#2:
-7336
第二题
点排序
定义一结构体表示点坐标,输入N个点的坐标,存放在结构体数组中(数组用malloc函数创建),对数组中的点按照离原点距离由小到大的顺序排序,输出排序后的点坐标。
输入的第一行表示点的个数N,后面的N行每行两个整数,表示一个点的x、y坐标。输出排序后的坐标。
样例输入:
3
3 3
1 1
2 2
样例输出:
(1,1)(2,2)(3,3)
#include <stdio.h>
int main(void)
{
struct datetime
{
int year;
int month;
int day;
};
datetime d1, d2;
scanf("%d %d %d", &(d1.year), &(d1.month), &(d1.day));
scanf("%d %d %d", &(d2.year), &(d2.month), &(d2.day));
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int k,count=0;
if (d1.year<d2.year ||(d1.year==d2.year && d1.month<d2.month)||(d1.year==d2.year && d1.month==d2.month && d1.day<d2.day))
{
k = 1;
}
else
{
k = -1;
}
while (d1.year != d2.year || d1.month != d2.month || d1.day != d2.day)
{
count += k;
d1.day+=k;
if ((d1.year%4==0 && d1.year%100!=0)|| d1.year%400==0)
{
days[1] = 29;
}
else
{
days[1] = 28;
}
if (d1.day>days[d1.month-1])
{
d1.day = 1;
d1.month++;
if (d1.month>12)
{
d1.month = 1;
d1.year++;
}
}
else if (d1.day<1)
{
d1.month--;
if (d1.month<1)
{
d1.month = 12;
d1.year--;
}
d1.day = days[d1.month-1];
}
}
printf("%d\n", count);
}