三天打渔两天晒网c语言程序

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

基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。

提高要求:1.输入数据的正确性验证。

          2.使用文件进行数据测试。如将日期 20100101   20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。


源代码:

#include<stdio.h>

#include<stdlib.h>

int decideday(int x);

int allday(int x);

int mdays(struct date day);

struct date

{

   int year;

   int month;

   int day;

};

 

void main()              /*设计主界面,调用函数*/

{

         FILE  *fp;

         fp=fopen("张家乐.txt","wt+");

         if(fp==NULL)

         {

                   printf("can'topen this file!\n");

         exit(0);

         }

        

   struct date term;

   int a,b,c;

         term.year=2000;

   term.month=01;               /*设置变量的初始值:月*/

   term.day=01;                 /*设置变量的初始值:日*/

         printf("**********欢迎使用本程序************\n");

         printf("*********三天打鱼两天晒网**********\n");

         printf("**起始日期为2000年01月01日且为第一天打渔,格式为20000101  **");

         fputs("**********欢迎使用本程序************\n",fp);

         fputs("*********三天打鱼两天晒网**********\n",fp);

         fputs("**起始日期为2000年01月01日且为第一天打渔,格式为20000101  **",fp);

         intA;

         do

         {

                   printf("\n\n\n");

                   printf("请输入终止日期(格式为20000101):");

                   fputs("\n",fp);

                   fputs("请输入终止日期(格式为20000101):",fp);

                   scanf("%d",&a);  /*输入日期*/

                   fprintf(fp,"%d",a);

                   printf("\n");

                   fputs("\n",fp);

                   if(decideday(a)!=a)  c=1;

                            elsec=0;

                   if(c==0)             /*输出选择*/

                   {        b=allday(a);

                            if(b%5<4&&b%5>0)

                            {        printf("渔夫今天要打渔。\n\n");

                                     fputs("\t\t\t渔夫今天要打渔。\n",fp);

                            }

                           

                            else

                            {        printf("渔夫今天要晒网。\n\n");

                                     fputs("\t\t\t渔夫今天要晒网。\n",fp);

                            }

                  

                   }

                   else

                            fputs("\t\t\t您输入的日期有误。\n",fp);

                   printf("\n\n%d\n\n",b);

                   printf("是否继续,是请输1,否请输0:");

                   scanf("\t%d",&A);

                  

                  

                  

         }while(A);

         fclose(fp);

        

        

}

 

int decideday(int x)      /* 判定日期是否规范*/

{

         inty;

         structdate today;

         if(x>=20000101)

         {   

                   today.year=x/10000;

                   today.month=x%10000/100;

                   today.day=x%100;

                   if(today.month<=12)

                   {

                            y=mdays(today);

                            if(today.day>y)

                            {

                                     printf("您输入的日期有误。\n");

                                    

                                     return0;

                            }

                   }

                   else

                   {

                            printf("您输入的日期有误。\n");

                           

                            return0;

                   }

                   returnx;

         }

         else

         {

                   printf("您输入的日期有误。\n");

                  

                   return0;

         }

        

}

 

int mdays(struct date day)         /*查询某月的总天数*/

{

         staticint 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}

                            };

         intm,LP;

         LP=day.year%4==0&&day.year%100!=0||day.year%400==0;       /*判定year为闰年还是平年,lp=0为平年,非0为闰年*/

         m=day_tab[LP][day.month];

         returnm;

}

 

int allday(int x)       /*计算全部天数*/

{

         structdate today;

         today.year=x/10000;

         today.month=x%10000/100;

         today.day=x%100;

         inty;

         intcount1=0,count2=0;

         intallday,i,k;

         for(y=2000;y<today.year;y++)

         {

                   if(y%4==0&&y%100!=0||y%400==0)

                            count1++;

                   count2++;

         }

         allday=count2*365+count1;

         intlp[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}

         };

         if(today.year%4==0&&today.year%100!=0||today.year%400==0)     /*判断是否为瑞年,是的话k=1,否则k=0*/

                   k=1;

         else

                   k=0;

         for(i=0;i<today.month-1;i++)

         {

                   allday+=lp[k][today.month-1];

         }

         allday=allday+today.day;

         returnallday;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值