c语言运用结构体和指针函数编写程序,输入年月日,输出该日期的前一天。 【输入形式】 在一行中以“yyyy-mm-dd” 格式顺序输入年月日。 【输出形式】 以“yyyy-mm-dd”格式输出该日期的前一天。
时间: 2024-02-13 22:05:20 浏览: 63
好的,这是一个很好的问题。下面是一个使用结构体和指针函数的 C 语言程序,可以实现您所描述的功能。请注意,该程序假设每个月的天数都是固定的,因此它并不考虑闰年的情况。
```c
#include <stdio.h>
// 定义日期结构体
struct date {
int year;
int month;
int day;
};
// 指针函数,返回指向前一天日期的指针
struct date* get_previous_day(struct date* d) {
// 如果是该月的第一天
if (d->day == 1) {
// 如果是一月份
if (d->month == 1) {
// 上一天为去年的 12 月 31 日
d->year--;
d->month = 12;
d->day = 31;
}
else {
// 上一天为上个月的最后一天
d->month--;
if (d->month == 2) {
// 如果是二月份,判断是否是闰年
if ((d->year % 4 == 0 && d->year % 100 != 0) || d->year % 400 == 0) {
d->day = 29;
}
else {
d->day = 28;
}
}
else if (d->month == 4 || d->month == 6 || d->month == 9 || d->month == 11) {
// 如果是 4、6、9 或 11 月,上一天为上个月的 30 日
d->day = 30;
}
else {
// 其他月份为上个月的 31 日
d->day = 31;
}
}
}
else {
// 如果不是该月的第一天,直接将天数减一
d->day--;
}
return d;
}
int main() {
// 定义日期结构体变量
struct date d;
// 读入日期
scanf("%d-%d-%d", &d.year, &d.month, &d.day);
// 获取前一天日期
struct date* previous_day = get_previous_day(&d);
// 输出前一天日期
printf("%d-%02d-%02d\n", previous_day->year, previous_day->month, previous_day->day);
return 0;
}
```
希望这个程序能够满足您的需求。如果您有任何疑问或需要进一步的帮助,请随时告诉我。
阅读全文