打鱼晒网C实例
程序员文章站
2022-05-27 08:55:03
打鱼晒网c实例:三天打鱼两天晒网寓言故事的实例化,分析:实质上是判断某年某月某日在当年的第多少天问题,问题的关键闰年的判断,以及输入年与日的合法性。
代码:
#include
#defi...
打鱼晒网c实例:三天打鱼两天晒网寓言故事的实例化,分析:实质上是判断某年某月某日在当年的第多少天问题,问题的关键闰年的判断,以及输入年与日的合法性。
代码:
#include #define ok 0 #define error 1 #define nonleap 0 #define leap 1 int nonleap[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //平年天数 int leap[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; //闰年天数 /* 判断闰年还是平年,闰年返回1,平年返回0 */ int isleap(int y) { if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) //闰年判断条件 return leap; return nonleap; } /* 判断输入的合法性,合法返回0,不合法返回1 */ int judge(int y, int m, int d) { if (m > 12 || m < 0) return error; else if (isleap(y) == leap && m == 2 && d > 29) //判断闰年的2月输入是否大于29天 return error; else if (isleap(y) == nonleap && m == 2 && d > 28) //判断平年的2月输入是否大于28天 return error; return ok; } /* 计算输入年月日到当前的总天数,total为地址引用,返回总天数 */ void totaldays (int y, int m, int d, int *total) { int i; if (isleap(y) == leap) { for (i = 0; i < m - 1; i ++) *total += leap[i]; } else { for (i = 0; i < m - 1; i ++) *total += nonleap[i]; } *total += d; } int main () { int days = 0, year, mon, dd; printf("请输入年月日: \n"); scanf("%d%d%d",&year,&mon,&dd); while (judge(year, mon, dd) == error) { printf("请检查输入的年月日是否正确并重新输入: \n"); scanf("%d%d%d",&year,&mon,&dd); } totaldays(year, mon, dd, &days); //printf("%d",days); if (days % 3 == 1) printf("%d-%d-%d : 打鱼\n",year, mon, dd); else printf("%d-%d-%d : 晒网\n",year, mon, dd); return 0; }
运行结果:
输入不合法
输入合法: