编写一个c语言程序,要求从键盘输入两个日期,计算这两个日期间隔的天数,例如:输入:2019,3,5 2022,1,2 输出:2019年3月5日到2022年1月2日之间间隔1050天
时间: 2023-08-31 16:27:13 浏览: 131
### 回答1:
您好!很高兴能和您聊天。
对于您的问题,可以使用 C 语言中的 time.h 库来计算两个日期间隔的天数。具体程序如下:
```c
#include <stdio.h>
#include <time.h>
int main() {
int year1, month1, day1;
int year2, month2, day2;
int days;
printf("请输入第一个日期(格式:年 月 日):\n");
scanf("%d %d %d", &year1, &month1, &day1);
printf("请输入第二个日期(格式:年 月 日):\n");
scanf("%d %d %d", &year2, &month2, &day2);
time_t t1 = mktime(&((struct tm) { .tm_year = year1 - 1900, .tm_mon = month1 - 1, .tm_mday = day1 }));
time_t t2 = mktime(&((struct tm) { .tm_year = year2 - 1900, .tm_mon = month2 - 1, .tm_mday = day2 }));
days = (int) difftime(t2, t1) / (60 * 60 * 24);
printf("%d年%d月%d日到%d年%d月%d日之间间隔%d天\n", year1, month1, day1, year2, month2, day2, days);
return 0;
}
```
您可以将该程序保存为一个 .c 文件,然后使用 C 语言编译器进行编译和运行。
如果您还有其他问题,欢迎随时提出!
### 回答2:
以下是一个可以实现上述功能的C语言程序:
```c
#include <stdio.h>
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int daysInMonth(int month, int year) {
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
return 29;
}
return days[month - 1];
}
int main() {
int year1, month1, day1;
int year2, month2, day2;
printf("请输入第一个日期(年、月、日,空格分隔):");
scanf("%d %d %d", &year1, &month1, &day1);
printf("请输入第二个日期(年、月、日,空格分隔):");
scanf("%d %d %d", &year2, &month2, &day2);
int days = 0;
for (int i = year1; i < year2; i++) {
int daysPerYear = isLeapYear(i) ? 366 : 365;
days += daysPerYear;
}
for (int i = 1; i < month2; i++) {
days += daysInMonth(i, year2);
}
days += day2;
for (int i = 1; i < month1; i++) {
days -= daysInMonth(i, year1);
}
days -= day1;
printf("%d年%d月%d日到%d年%d月%d日之间间隔%d天。\n", year1, month1, day1, year2, month2, day2, days);
return 0;
}
```
运行程序后,按照提示输入两个日期(年、月、日,空格分隔),程序将输出这两个日期之间的天数间隔。例如,输入 "2019 3 5" 和 "2022 1 2",输出为 "2019年3月5日到2022年1月2日之间间隔1050天"。
阅读全文