這次代碼的編寫讓我意識(shí)到自己的歸納總結(jié)能力實(shí)在是太差了。
個(gè)人代碼
#include<stdio.h>
#include<stdlib.h>
void tomorrow(int *y, int *m, int *d)
{
//判斷30和31號(hào),沒有2月
if(*d > 29)
{
//小月的30號(hào)
if(*m == 4 || *m == 6 || *m == 9 || *m == 11)
{
*m += 1;
*d = 1;
}
//大月的30號(hào)
else
{
*d += 1;
}
//31號(hào)
if(*d == 31)
{
//12月31號(hào)
if(*m == 12)
{
*y += 1;
*m = 1;
*d = 1;
}
//其他大月
else
{
*m += 1;
*d = 1;
}
}
}
//1~29號(hào)友多,判斷閏昧捷、平年
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號(hào)
if(*d > 1)
{
*d -= 1;
}
//1號(hào)
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日\(chéng)n", y, m, d);
// tomorrow(&y, &m, &d);
// printf("后一天:%d年%d月%d日\(chéng)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);
}
// 返回當(dāng)月天數(shù)
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("請(qǐng)輸入年月日: ");
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);
}