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

1.采用C语言实现程序解决问题。
2.算法设计思路如图2-1所示
系统流程图
图2-1 系统流程图
3.调试过程
(1)首先判断输入的指定日期是否合理
这里写图片描述
图3-1判断指定日期是否合理代码
经测试,这部分代码可以正确判断指定日期是否合理。
这里写图片描述
图3-2运行结果截图
(2)计算由20100101至指定日期的总天数
这里写图片描述
图3-3计算总天数代码截图
通过三部分计算出总天数,经测试可以正确计算总天数。
(3)判断指定天数当天是打鱼还是晒网
这里写图片描述
图3-4判断打鱼还是晒网代码截图
将总天数除以五,若余数为1,2,3,则为打鱼,其余为晒网。
(4)调试文件测试
这里写图片描述
图3-5文件输入输出测试代码截图
这里写图片描述
图3-6文件输出结果截图
出现错误:每次只能读取一个日期
改正错误:添加while判断文件是否读完
这里写图片描述
图3-7改正后代码截图
4.代码

/*************************
Author:罗佳琪
Date:2018-08-29
Description:C语言撒天打鱼两天晒网问题
*************************/
#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE*in=fopen("in.txt","r");
    FILE*out=fopen("out.txt","w");
    int a;
    while(fscanf(in,"%d",&a)!=EOF)
    {
        int sum,sum1,sum2=0,sum3;  //sum为由20100101至指定日期的总天数
        int date;
        int year;
        int month;
        int day;
        int leap;  
        int n=0;    //由20100101至指定日期共经过多少个闰年
        int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //每月的天数
        printf("请输入指定日期\n");      
        fscanf(in,"%d",&date);
        year=date/10000;     //将输入日期年,月,日分开
        month=date/100-year*100;
        day=date%100;
        if(year<2010||month<1||month>12)           //判断输入的年份和月份是否合理
        {
            fprintf(out,"输入的日期不合理");
            return 0;
        }
        leap=( year % 4 == 0 && year % 100 != 0 )|| year % 400 ;  //判断输入年份是否为闰年
        if((day<1||day>mon[month])&&((month!=2)||((month==2)&&(day>mon[month]+leap))))   //判断输入日期是否符合当月天数
        {
            fprintf(out,"输入的日期不合理");
            return 0;
        }
        for(int i = 2011 ;i<=year;i++)
        {
            if(( i % 4 == 0 && i % 100 != 0 )|| i % 400 ==0)   //计算由2010年至指定日期经过多少个如年
                 n++;
        }
        sum1=(year-2010-n)*365+n*366;
        if(leap==1)
        {       
            for(int j=0;j<month;j++)
            sum2+=mon[j];
            if(month>2)      //若输入年份为闰年且输入月份大于二计算天数加一
                sum2+=1;
        }
        else
        {
            for(int k=0;k<month;k++)
            sum2+=mon[k];
        }
        sum3=day;
        sum =sum1+sum2+sum3;
        switch(sum%5)      //总天数除以5,若余数为1,2,3则为打鱼,其余为晒网
        { 
            case 0:fprintf(out,"晒网 "); break;
            case 1:fprintf(out,"打鱼 "); break;
            case 2:fprintf(out,"打鱼 "); break;
            case 3:fprintf(out,"打鱼 "); break;
            case 4:fprintf(out,"晒网 "); break;   
        }
    }
    fclose(in);
    fclose(out);
}

猜你喜欢

转载自blog.csdn.net/weixin_43083799/article/details/82257979
今日推荐