打鱼晒网C实例

来源:互联网 发布:sql server2005标准版 编辑:程序博客网 时间:2024/03/29 19:02

问题描述:三天打鱼两天晒网寓言故事的实例化

分析:实质上是判断某年某月某日在当年的第多少天问题,问题的关键闰年的判断,以及输入年与日的合法性。

代码:

#include <stdio.h>#define OK 0#define ERROR 1#define NONLEAP 0#define LEAP 1int 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月输入是否大于29return ERROR;    else if (IsLeap(y) == NONLEAP && m == 2 && d > 28)  //判断平年的2月输入是否大于28return 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;}

运行结果:
输入不合法输入不合法

输入合法:这里写图片描述

0 0
原创粉丝点击