【选择结构】明天几号:给出某天的日期,求它的下一天的日期。输入三个整数,表示年月日,数据保证是合法的。输出明天日期。c++
时间: 2024-05-07 20:17:01 浏览: 9
请使用以下代码实现:
```
#include <stdio.h>
int main()
{
int year, month, day; // 输入的年月日
int is_leap_year = 0; // 标记该年是否是闰年
scanf("%d%d%d", &year, &month, &day); // 输入年月日
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) // 判断是否是闰年
{
is_leap_year = 1;
}
if (month == 2) // 二月特判
{
if (is_leap_year && day == 29) // 闰年的2月29号
{
printf("%d-%02d-%02d", year, month+1, 1);
}
else if (!is_leap_year && day == 28) // 平年的2月28号
{
printf("%d-%02d-%02d", year, month+1, 1);
}
else // 其余日期
{
printf("%d-%02d-%02d", year, month, day+1);
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11) // 4月、6月、9月、11月
{
if (day == 30) // 该月的最后一天
{
printf("%d-%02d-%02d", year, month+1, 1);
}
else // 其余日期
{
printf("%d-%02d-%02d", year, month, day+1);
}
}
else // 1月、3月、5月、7月、8月、10月、12月
{
if (day == 31 && month == 12) // 12月31号
{
printf("%d-%02d-%02d", year+1, 1, 1);
}
else if (day == 31) // 该月的最后一天
{
printf("%d-%02d-%02d", year, month+1, 1);
}
else // 其余日期
{
printf("%d-%02d-%02d", year, month, day+1);
}
}
return 0;
}
```
其中,涉及到年份是不是闰年的判断方式是:能被4整除但不能被100整除,或者能被400整除的年份就是闰年。在程序中使用 `is_leap_year` 变量来标记该年份是否是闰年,方便后面的处理。
由于涉及到月份的判断,所以使用多个 `if-else` 语句来实现。其中,特别处理了二月和那四个小月(4月、6月、9月、11月),其他月份都是31天,处理方式一样。
如果输入的日期是最后一天,就需要将月份加1,日期置为1,注意当月份是12月时,还需要将年份加1,月份和日期都置为1。
输入格式为 `yyyy mm dd`,输出格式为 `yyyy-mm-dd`。