练习10-2
#include <stdio.h>
// 判断是否为闰年
int is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 获取指定月份的天数
int get_days_of_month(int year, int month) {
int days = 31;
switch (month) {
case 2:
days = is_leap_year(year) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
}
return days;
}
// 将日期修改为前一天
void decrement_date(int* year, int* month, int* day) {
if (*day > 1) {
(*day)--;
}
else {
if (*month == 1) {
(*year)--;
*month = 12;
}
else {
(*month)--;
}
*day = get_days_of_month(*year, *month);
}
}
// 将日期修改为后一天
void increment_date(int* year, int* month, int* day) {
int days_of_month = get_days_of_month(*year, *month);
if (*day < days_of_month) {
(*day)++;
}
else {
if (*month == 12) {
(*year)++;
*month = 1;
}
else {
(*month)++;
}
*day = 1;
}
}
int main() {
int year, month, day;
printf("如:2022 2 28,请输入年月日:");
scanf("%d %d %d", &year, &month, &day);
printf("原日期为:%d年%d月%d日\n", year, month, day);
decrement_date(&year, &month, &day);
printf("前一天日期为:%d年%d月%d日\n", year, month, day);
increment_date(&year, &month, &day);
increment_date(&year, &month, &day); // 由于前一步操作修改了日期,因此要再进行一次加法操作
printf("后一天日期为:%d年%d月%d日", year, month, day);
return 0;
}