三天打鱼两天晒网

三天打鱼两天晒网(C语言)
题目:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C
或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输
出至out.txt文件。*/
流程图如下:
在这里插入图片描述

/*关于"三天打鱼两天晒网"      赵茹平
  创建于2019年2月17日  最后一次修改日期2019年3月1日
  中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C
或C++语言/java/python实现程序解决问题。
  基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
  提高要求:1.输入数据的正确性验证。
            2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输
出至out.txt文件。*/
#include<stdio.h>
int action(int a)
{
    if(a%4==0&&a%100!=0||a%400==0)/*闰年判定条件*/
        return 1;/*是闰年返回1*/
    else
        return 0;/*不是闰年返回0*/
}
int number(int year,int month,int day)/*自定义number函数计算输入日期距2010年1月1日的天数*/
{
    int sum=0,i,j,k;
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};/*数组a存放闰年每月的天数*/
    int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*数组b存放平年每月的天数*/
    for(j=2010;j<year;j++)/*加年的天数*/
    {
        if(action(j)==1)/*若是闰年加366天*/
            sum+=366;
        else/*若是平年加365天*/
            sum+=365;
    }
    /*加月的天数*/
    if(action(year)==1)/*是闰年,累加数组a前month-1个月份的天数*/
        for(i=0;i<month-1;i++)
            sum+=a[i];
    else/*是平年,累加数组b前month-1个月份的天数*/
        for(i=0;i<month-1;i++)
            sum+=b[i];
    /*加日的天数*/
    sum+=day;
    return sum;/*返回输入日期距2010年1月1日的天数*/
}

/*void save(number *Num)//文件
{
    number *N=Num;
    FILE*fp;
    char filename[LEN+1];
    printf("请输入文件名:\n");
    scanf("%s",filename);
    fp=fopen(filename,"w");
    while(N)
    {
        fprintf(fp,"%d%d%d\n",year,month,day);
        N = N->next1;
    }

    printf("保存成功!\n");
    fclose(fp);
    system("pause");
}

void open(number *Num)
{
     number *N=Num;
    char filename[LEN+1];
    FILE*fp;
    printf("请输入已有文件名:\n");
    scanf("%s",filename);
    if((fp=fopen(filename,"r"))==NULL)
    {
        printf("打开文件%s出错!",filename);
        system("pause");
        return;
        while(fscanf(fp,""%d%d%d\n",year,month,day)==3)
        {
            if(N->next1==NULL)
            {
                break;
            }
            else N = N->next1;
        }
    }
    else
    {
        printf("读入完毕!");
        printf("输出如下:\n");
        while(N)
        {
            printf("%d%d%d\n",year,month,day);
            N = N->next1;
        }
        }
    fclose(fp);
    system("pause");
}*/
int main()
{
    //number *Num;
    int year,month,day,num;/*定义年月日*/
    printf("请输入年月日(中间用空格隔开)\n");
    scanf("%d%d%d",&year,&month,&day);/*输入年月日*/
    num=number(year,month,day);/*调用number函数*/
        if(year<2010||month>12||day>31)/*判断输入日期是否合法*/
        printf("请输入正确时间");
        else/*日期合法*/
        {
            if((num%5)>0&&(num%5)<4)/*余数为1,2,3,则打鱼,反之,晒网*/
        printf("%d %d %d该人当天在打鱼\n",year,month,day);

            else
        printf("%d %d %d该人当天在晒网\n",year,month,day);

        }
}

总结
第一眼看到这个题目还心里觉得应该不难,天数除以5所得的余数就可判断出是打鱼还是晒网,开始着手设计的时候才意识到了这个天数要怎么计算,平年闰年如何判定,每个月份天数不一样怎么弄,我看了老师的提示,也百度了一下最后用if(a%40&&a%100!=0||a%4000)来判定是否是闰年,然后用两个数组分别表示平年和闰年12个月的天数,最后年月日加在一起得到天数,从而判断出是打鱼还是晒网。
程序改到最后还是存在缺陷,比如2月份输入30天也不会报错,自己敲代码之前看了好多别人编的,最后根据自己习惯完成了这个程序,也不断修改了一些Bug,能力有限,但我会继续改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿哈哈~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值