三天打渔,两天晒网小算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34778691/article/details/68951214

问题描述:

   中国有句俗语叫“三天打鱼两天晒网”。某人从201011日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用CC++语言实现程序解决问题。

源代码:

//文件名:fishing or relaxing.cpp  
//作者:Vector_山水之间  
//学号:1508010333  
//版本:2017.3.1  
//完成日期:2017/3/10  
//主要功能:某人从2010年1月1日起开始“三天打鱼两天晒网”,  
//         判断某天是打鱼还是晒网.  
#include<stdio.h>  
void show();                         //声明show()函数  
int calculate(struct date day);      //声明计算天数的函数  
struct date{                         //定义结构体  
    int year;  
    int month;  
    int day;  
};  
void show()                           //计算并输出某一日期下打鱼或者晒网的结果  
{   struct date today,term;           //定义结构体变量today,term  
    int yearday,year,day;  
    printf("请输入年份:");  
    scanf("%d",&today.year);  
    while(today.year<2010||today.year>9999)     //判断年份输入的规范性  
    {  
        printf("年份输入不符合规范,请重新输入:");  
        scanf("%d",&today.year);  
    }  
    printf("请输入月份:");  
    scanf("%d",&today.month);  
    while(today.month<1||today.month>12)        //判断月份输入的规范性  
    {  
        printf("月份输入不符合规范,请重新输入:");  
        scanf("%d",&today.month);  
    }  
    printf("请输入日:");  
    scanf("%d",&today.day);  
    if(today.month==1||today.month==3||today.month==5||today.month==7  
        ||today.month==8||today.month==10||today.month==12) //判断日的输入是否符合规范   
    {  
        while(today.day<0||today.day>31)                           
        {  
            printf("输入不符合规范,请重新输入:");  
            scanf("%d",&today.day);  
        }  
    }  
    else if(today.month==4||today.month==6||  
        today.month==9||today.month==11)  
    {  
        while(today.day<0||today.day>30)  
        {  
            printf("输入不符合规范,请重新输入:");  
            scanf("%d",&today.day);  
        }  
    }  
    else if(today.month==2)  
    {  
        if(today.year%4==0)  
            while(today.day<0||today.day>29)  
            {  
                printf("输入不符合规范,请重新输入:\n");  
                scanf("%d",&today.day);  
            }  
        else  
            while(today.day<0||today.day>28)  
            {  
                printf("输入不符合规范,请重新输入:\n");  
                scanf("%d",&today.day);  
            }  
    }    
    term.month=12;                    //设置变量的初始值:月  
    term.day=31;                      //设置变量的初始值:日  
    for(yearday=0,year=2010;year<today.year;year++)  
    {  
        term.year=year;  
        yearday+=calculate(term);     //计算从2010年至指定年的前一年的最后一天共有多少天  
    }  
    yearday+=calculate(today);        //加上指定年中到指定日期的天数  
    day=yearday%5;                    //求余数                                 
    if(day>0&&day<4)                  //打印结果  
    {  
        printf("%d,%d,%d\n",today.year,today.month,today.day);  
        printf("He was fishing at that day.\n");  
    }                                             
    else  
    {     
        printf("%d,%d,%d\n",today.year,today.month,today.day);  
        printf("He was relaxing at that day.\n");  
    }  
}  
int calculate(struct date day)        //定义计算天数的函数  
{  
    static int day_tab[2][13]=  
            {{0,31,28,31,30,31,30,31,31,30,31,30,31,},      //平均每月的天数  
             {0,31,29,31,30,31,30,31,31,30,31,30,31,},  
    };  
    int i,lp;  
    lp=day.year%4==0&&day.year%100!=0||day.year%400==0;  
                                       //判定year为闰年还是平年,lp=0为平年,非0为闰年  
    for(i=1;i<day.month;i++)           //计算本年中自1月1日起的天数  
       day.day+=day_tab[lp][i];     
    return day.day;  
}  
void main()           
{     
    printf("功能介绍:某人从2010年1月1日起开始三天打鱼两天晒网,\n");  
    printf("         输入日期判断这个人在以后的某一天中是打鱼还是晒网。\n\n");  
    int m;  
    show();  
    printf("\n继续输入请按 1\n");  
    scanf("%d",&m);  
    while(m==1)  
    {  
        show();  
        printf("\n");  
    }   
}  


猜你喜欢

转载自blog.csdn.net/qq_34778691/article/details/68951214