C语言“三天打鱼两天晒网”问题

2020-09-21 教育 222阅读

根据题意可以将解题过程分为三步:

1、计算从1990年1月1日开始至指定日期共有多少天;

2、由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;

3、根据余数判断他是在“打鱼”还是在“晒网”;若  余数为1,2,3,则他是在“打鱼”;否则  是在“晒网”。

#include 
/*定义日期结构体*/
typedef struct date {
    int year;
    int month;
    int day;
} DATE;
/*判断是否为闰年,是返回1,否返回0*/
int isLeap (int year) {
    return ( (year%4==0 && year%100!=0) || (year%400==0) );
}
/*计算指定日期距离1990年1月1日的天数*/
int countDay (DATE currentDay) {
    int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30};  /*每月天数数组*/
    int totalDay=0,year,i;
    
    /*求出指定日期之前的每一年的天数累加和*/
    for(year=1990; year        if(isLeap(year))  /*判断是否为闰年*/
            totalDay=totalDay+366;
        else
            totalDay=totalDay+365;
    }
    /*如果为闰年,则二月份为29天*/
    if(isLeap(currentDay.year))
        perMonth[2]+=1;
    /*将本年内的天数累加到totalDay中*/
    for(i=0; i        totalDay+=perMonth[i];
    /*将本月内的天数累加到totalDay中*/
    totalDay+=currentDay.day;
    /*返回totalDay*/
    return totalDay;
}
int main(void) {
    DATE today;  /*指定日期*/
    int totalDay;  /*指定日期距离1990年1月1日的天数*/
    int result;  /*totalDay对5取余的结果*/
    int error;

    do { /*输入指定日期*/
     printf("Please input the year/month/day :\n");
   scanf("%d/%d/%d", &today.year, &today.month, &today.day);
   printf("\n");
   error=0;
if(today.year<1990) /*判断日期格式是否正确*/                                           
{printf("The year should be larger than 1990!\n");error=1;}
if(today.month<1||today.month>12)
{printf("The month input is error!\n");error=1;}
if(today.day<0||today.day>31)  
{printf("The day input is error!\n");error=1;}
printf ("======================================================\n\n");
    } while(error);
    totalDay=countDay(today);  /*求出指定日期距离1990年1月1日的天数*/
    /*天数%5,判断输出打鱼还是晒网*/
    result=totalDay%5;
    if(result>0 && result<4)
        printf("fishing!\n");
    else
        printf("sleeping!\n");
    printf("\n");
    return 0;
}

运行结果

1991/10/25,打渔

1992/10/25,晒网

日期输入错误

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com