这次代码的编写让我意识到自己的归纳总结能力实在是太差了。
个人代码
#include<stdio.h>
#include<stdlib.h>
void tomorrow(int *y, int *m, int *d)
{
//判断30和31号,没有2月
if(*d > 29)
{
//小月的30号
if(*m == 4 || *m == 6 || *m == 9 || *m == 11)
{
*m += 1;
*d = 1;
}
//大月的30号
else
{
*d += 1;
}
//31号
if(*d == 31)
{
//12月31号
if(*m == 12)
{
*y += 1;
*m = 1;
*d = 1;
}
//其他大月
else
{
*m += 1;
*d = 1;
}
}
}
//1~29号,判断闰、平年
else
{
//闰年
if((*y % 4 == 0 && *y % 100 != 0) || *y % 400 == 0)
{
if(*d == 29)
{
*m += 1;
*d = 1;
}
else
{
*d += 1;
}
}
//平年
else if(*d == 28)
{
*m += 1;
*d = 1;
}
else
{
*d += 1;
}
}
}
void yesterday(int *y, int *m, int *d)
{
//大于1号
if(*d > 1)
{
*d -= 1;
}
//1号
else
{
//大于1月
if(*m > 1)
{
*m -= 1;
//2月
if(*m == 2)
{
//闰年
if((*y % 4 == 0 && *y % 100 != 0) || *y % 400 == 0)
{
*d = 29;
}
//平年
else
{
*d = 28;
}
}
//小月
if(*m == 4 || *m == 6 || *m == 9 || *m == 11)
{
*d == 30;
}
//大月
else
{
*d == 31;
}
}
//1月
else
{
*y -= 1;
*m = 12;
*d = 31;
}
}
}
int main()
{
int y, m, d;
scanf("%d %d %d", &y, &m, &d);
yesterday(&y, &m, &d);
printf("前一天:%d年%d月%d日\n", y, m, d);
// tomorrow(&y, &m, &d);
// printf("后一天:%d年%d月%d日\n", y, m, d);
system("pause");
return (0);
}
归纳后的代码
#include <stdio.h>
// 判断闰年
int is_leap(int year)
{
int i = 0;
if (((year % 4) == 0 && (year % 100) != 0) || (year % 400 == 0))
i = 1;
return (i);
}
// 返回当月天数
int days(int year, int month)
{
int i;
switch (month) {
case 4:
case 6:
case 9:
case 11: i = 30; break;
case 2: if (is_leap(year)) i = 29; else i = 28; break;
default: i = 31; break;
}
return (i);
}
// 求出前一天
void yesterday(int *y, int *m, int *d)
{
(*d)--;
if (!(*d)) {
(*d) = days(*y, --(*m));
}
if (!(*m)) {
(*y)--;
(*m) = 12;
}
}
// 求出后一天
void tomorrow(int *y, int *m, int *d)
{
(*d)++;
if ((*d) > days(*y, *m)) {
(*d) = 1;
(*m)++;
}
if ((*m) > 12) {
(*y)++;
(*m) = 1;
}
}
int main(void)
{
int year, month, day;
printf("请输入年月日: ");
scanf("%d%d%d", &year, &month, &day);
putchar('\n');
yesterday(&year, &month, &day);
printf("前一天:%d %2d %2d\n", year, month, day);
tomorrow(&year, &month, &day);
printf("输入日:%d %2d %2d\n", year, month, day);
tomorrow(&year, &month, &day);
printf("后一天:%d %2d %2d\n", year, month, day);
return (0);
}