用c语言编写如下程序:输入一年中两个日期,计算这两个日期相差多少天。 输入 输入四个整数m1,d1,m2,d2,用空格隔开,分别表示两个日期的月份和这个月的第几天。 输出 输出两个日期相差多少天,如果不能确定相差多少天,输出"error"。
时间: 2024-11-05 09:34:06 浏览: 34
在C语言中,你可以通过以下几个步骤编写这样一个程序:
```c
#include <stdio.h>
int days_in_month(int month, int year) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: // 这些都是大月,每个月31天
return 31;
case 4:
case 6:
case 9:
case 11: // 小月,除了二月外,每个月30天
return 30;
// 特殊情况:闰年的2月有29天
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return 29;
} else {
return 28;
}
}
}
int main() {
int m1, d1, m2, d2, total_days = 0;
printf("请输入第一个日期(月份和日): ");
scanf("%d %d", &m1, &d1);
printf("请输入第二个日期(月份和日): ");
scanf("%d %d", &m2, &d2);
// 检查日期是否有效(比如不在正确的月份内)
if (m1 > 12 || m2 > 12 || d1 > days_in_month(m1, 0) || d2 > days_in_month(m2, 0)) {
printf("error\n");
return 0;
}
total_days += d2 - d1; // 相同月份内的天数差
// 如果两个日期跨过了月份边界
if (m1 < m2) { // 第一个日期在前
for (int i = m1 + 1; i < m2; ++i) {
total_days += days_in_month(i, 0);
}
} else if (m1 > m2) { // 第二个日期在前
for (int i = m2 + 1; i < m1; ++i) {
total_days += days_in_month(i, 0);
}
}
printf("两个日期相差 %d 天。\n", total_days);
return 0;
}
```
阅读全文