编写程序,输入一个日期和一个正整数k,计算k天以后是哪天。例如,输入的日期为2019年5月15日,k为16,则2019年4月15日的16天后 是2019年5月1日,输出2019-5-1。 输入:四个整数,前三个分别表示年、月、日 ,后一个标识天数k 输出:k天之后的日期,数据间用英文减号隔开。 【输入输出样例】 输入: 2019 4 15 16 输出: 2019-5-1 提示:(1)日期用结构体。 (2)先考虑加1一天的函数。 (3)函数可以返回结构体。 (4)主函数如下: int main() { struct DATE d1,d2; int k; scanf("%d %d %d",&d1.year,&d1.month,&d1.day); scanf("%d",&k); d2=adddays(d1,k); print(d2); return 0;
时间: 2023-06-18 09:08:23 浏览: 154
以下是C语言代码实现:
```c
#include <stdio.h>
struct DATE {
int year;
int month;
int day;
};
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某个月有多少天
int getDaysOfMonth(int year, int month) {
switch (month) {
case 2:
return isLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
// 计算某一天加上k天后的日期
struct DATE adddays(struct DATE d, int k) {
while (k > 0) {
int daysOfMonth = getDaysOfMonth(d.year, d.month);
if (d.day + k <= daysOfMonth) {
d.day += k;
break;
} else {
k -= daysOfMonth - d.day + 1;
d.day = 1;
if (d.month == 12) {
d.year++;
d.month = 1;
} else {
d.month++;
}
}
}
return d;
}
// 输出日期
void print(struct DATE d) {
printf("%04d-%02d-%02d\n", d.year, d.month, d.day);
}
int main() {
struct DATE d1, d2;
int k;
scanf("%d %d %d", &d1.year, &d1.month, &d1.day);
scanf("%d", &k);
d2 = adddays(d1, k);
print(d2);
return 0;
}
```
输入样例:
```
2019 4 15 16
```
输出样例:
```
2019-05-01
```
阅读全文