输入一个日期,输出昨天的日期。 要求: 1、需要定义函数void BeforeDay(int *pyear,int *pmonth,int *pday),求昨天是哪一天。三个指针变量分别指向主函数的year,month,day变量。在BeforeDay函数里将year,month,day改成昨天的日期。 2、输入输出格式: 输入输出格式: 输入提示:"please input the date of today:" 输入格式:"%d-%d-%d" 输出格式:"%d-%d-%d" 提示:可以用二维数组存储每月天数。天数减一以后,如果产生“退位”,可以用二维数组中天数赋值。避免使用switch导致程序过于复杂。 int days[2][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
时间: 2023-09-11 16:08:37 浏览: 177
好的,以下是代码实现:
```
#include <stdio.h>
void BeforeDay(int *pyear, int *pmonth, int *pday) {
int days[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int year = *pyear;
int month = *pmonth;
int day = *pday;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
// 闰年
if (day > 1) {
(*pday)--;
} else {
if (month > 1) {
(*pmonth)--;
*pday = days[1][month-2];
} else {
(*pyear)--;
*pmonth = 12;
*pday = 31;
}
}
} else {
// 平年
if (day > 1) {
(*pday)--;
} else {
if (month > 1) {
(*pmonth)--;
*pday = days[0][month-2];
} else {
(*pyear)--;
*pmonth = 12;
*pday = 31;
}
}
}
}
int main() {
int year, month, day;
printf("please input the date of today: ");
scanf("%d-%d-%d", &year, &month, &day);
BeforeDay(&year, &month, &day);
printf("yesterday is: %d-%02d-%02d\n", year, month, day);
return 0;
}
```
我们先定义了函数`BeforeDay`,其中`pyear`、`pmonth`和`pday`分别是指向年、月、日的指针变量。该函数的实现思路是:先判断今天是闰年还是平年,然后根据输入的日期计算出昨天的日期。在计算昨天的日期时,需要考虑到一些特殊情况,比如今天是某个月的第一天,或者是1月1日。
在主函数中,我们先输入今天的日期,再调用`BeforeDay`函数计算昨天的日期,最后输出结果。
注意,在输出日期时,我们需要用`%02d`格式化输出,以保证输出的月份和日期都是两位数。
阅读全文