C语言编程实现:输入某两天的年月日,输出这两天相距多少天。
时间: 2024-05-03 15:23:04 浏览: 201
C语言实现计算两个日期之间的天数的算法
5星 · 资源好评率100%
以下是C语言编程实现的代码:
```c
#include <stdio.h>
int isLeapYear(int year) { // 判断闰年
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}
int daysOfMonth(int year, int month) { // 每个月的天数
int days[] = {31, 28 + isLeapYear(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
int main() {
int year1, month1, day1, year2, month2, day2;
int days = 0;
printf("请输入第一个日期(年 月 日):");
scanf("%d %d %d", &year1, &month1, &day1);
printf("请输入第二个日期(年 月 日):");
scanf("%d %d %d", &year2, &month2, &day2);
// 如果第一个日期在第二个日期之后,交换两个日期
if (year1 > year2 || (year1 == year2 && month1 > month2) || (year1 == year2 && month1 == month2 && day1 > day2)) {
int temp;
temp = year1, year1 = year2, year2 = temp;
temp = month1, month1 = month2, month2 = temp;
temp = day1, day1 = day2, day2 = temp;
}
// 处理第一个日期到年底的天数
for (int i = month1; i <= 12; i++) {
days += daysOfMonth(year1, i) - day1 + 1;
day1 = 1; // 重置为1号
}
// 处理整年的天数
for (int i = year1 + 1; i < year2; i++) {
days += isLeapYear(i) ? 366 : 365;
}
// 处理第二个日期到年初的天数
for (int i = 1; i < month2; i++) {
days += daysOfMonth(year2, i);
}
days += day2 - 1; // 减去1天,因为第一个日期已经算过了
printf("相距 %d 天\n", days);
return 0;
}
```
代码中使用了三个函数:
- `isLeapYear(int year)`:判断是否为闰年。
- `daysOfMonth(int year, int month)`:返回某个月的天数。
- `main()`:主函数,输入两个日期,计算它们之间的天数并输出。
主函数的计算方法如下:
- 如果第一个日期在第二个日期之后,交换两个日期。
- 处理第一个日期到年底的天数。
- 处理整年的天数。
- 处理第二个日期到年初的天数。
- 输出总天数。
注意,这里假定输入的日期是合法的,即不会输入2月30日这样的非法日期。如果需要完整的日期输入校验,可以进一步完善。
阅读全文