三天打鱼两天晒网,c语言

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

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

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

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

3)根据余数判断他是在“打鱼”还是在“晒网”;

    若  余数为1,2,3,则他是在“打鱼”

    否则  是在“晒网”

2. 闰年的方法可以用伪语句描述如下:

    如果   ((年能被4除尽 且 不能被100除尽)或 能被400除尽)

         则     该年是闰年;

        否则    不是闰年。

程序流程图如下:

具体代码如下:

#include<stdio.h>
 
void main()
{
    int year,month,day,y,sum=0;   //定义常量
    int f[12]={31,28,31,30,31,30,31,31,30,31,30,31};  //平年每个月份的天数,存入数组中
    printf("请输入正确的年月日:\n"); 
    scanf("%d%d%d",&year,&month,&day);
    while(year<2010)  //从2010年算起,输入年份必须在其之后,否则重新输入
    { 
        printf("年份输入过小,请重新输入:\n");   
        scanf("%d,%d,%d",&year,&month,&day);
    }

    if(year%400==0||(year%4==0 && year%100!=0)) //当满足闰年条件时,在二月基础加一天
        f[1]+=1;
    for(y=2010;y<year;y++)   //判断输入年份是否为闰年
    {
        if(y%400==0||(y%4==0 && y%100!=0))  //判断结果为闰年,则为366天,否则为365天
            sum+=366;  
        else
            sum+=365;  
    }
    for(y=1;y<month;y++)   //计算从2010年1月1日到所输入年份的总天数
    {
        sum+=f[y];
    }
    sum+=day;
    printf("\n从2010年01月01日起到%d年%d月%d日共经过了%d天\n\n",year,month,day,sum);

    if(sum%5==4||sum%5==0)  //用计算出的总天数除以5,求模,若为0和4,则为晒网,否则为打渔
        printf("%d-%d-%d他在晒网\n\n",year,month,day);
    else
        printf("%d-%d-%d他在打渔\n\n",year,month,day);
    return 0;
}

该题目还可以加入一个功能,使用文件进行数据测试。如将日期 20100101   20111214  等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件,但我没有实现。

猜你喜欢

转载自blog.csdn.net/Markin2333/article/details/82224343
今日推荐