三天打鱼,两天晒网

该程序通过C语言实现,能够根据用户输入的日期计算出从2010年1月1日起,该日期对应的活动是“打鱼”还是“晒网”。程序考虑了闰年和平年的情况,并进行了详细的输入验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中国有句俗语叫“三天打鱼两天晒网”。某人从201011日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
//**三天打鱼,两天晒网程序**
//作者:软件工程1502班 汪强
//创建时间:2017年3月10日
//主要功能:求出渔夫在2010.1.1后的每一天在打鱼还是晒网
//
//***************************


#include<stdio.h>
#include<stdlib.h>

void file1(int year,int month,int day)//向文件中写入数据
{
 FILE *in;
 if((in=fopen("file1.dat","w"))==NULL)
 {
   printf("无法打开文件!\n");
   exit(0);
 }

fprintf(in,"%d %d %d\n",year,month,day);

fclose(in);

}



void file2(int year,int month,int day)//从文件中读入数据
{

 FILE *in;
 if((in=fopen("file1.dat","r"))==NULL)
 {
   printf("无法打开此文件!");
       exit(0);
 }

fscanf(in,"%d %d %d",&year,&month,&day);
fclose(in);

}




int months(int year,int month)//months函数用来求当前年1月1日到当前年指定月份的总天数
{
  int i;
  static int days;
  int month1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},month2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//定义两个存各个月份天数的数组
  if((year%4==0&&year%100!=0)||(year%400==0))//判断当前年是闰年还是平年
  {
     for(i=0;i<month;i++)
         days+=month2[i];

  }
  else 
  {
      for(i=0;i<month;i++)
         days+=month1[i];
  }
  return days;

}


int  sumday(int year,int month,int day)//求出到当前年的总天数
 {

    int i,days;
     for(i=2010;i<year;i++)
     {
       if((i%4==0&&i%100!=0)||(i%400==0))
         days+=366;
         else days+=365;

     }
     days=days+months(year,month)+day-1;

    return days;


 }  



void juge()//用来判断输入错误及判断渔夫在打鱼还是晒网
{int year,month,day;
 int days;
 int i,j;
 int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31},month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
 printf("Please enter year month and day:");
 scanf("%d %d %d",&year,&month,&day);
 file1(year,month,day);//文件函数的调用
 file2(year,month,day);///文件函数的调用
 FILE *out;
if((out=fopen("file2.dat","w"))==NULL)
{
 printf("无法打开此文件\n");
 exit(0);
}
  if((year%4==0&&year%100!=0)||(year%400==0))                                                                                                                                                                                                                      
 {
       if((year<2010)&&(month<1||month>12))
       {fprintf(out,"%d年%d月%d日 Year and month are error.\n",year,month,day);
       printf("%d年%d月%d日 Year and month are error.\n",year,month,day); }  
     else
     {
       if((year<2010)&&(day>month2[month-1]))
       {
       fprintf(out,"%d年%d月%d日 Year and day are error.\n",year,month,day);
       printf("%d年%d月%d日 Year and day are error.\n",year,month,day);}

         else
         {
           if(year<2010)
              {   
           fprintf(out,"%d年%d月%d日 Year is error.\n",year,month,day);
           printf("%d年%d月%d日 Year is error.\n",year,month,day);}
               else
           {
             if(month<1||month>12)
                {
             fprintf(out,"%d年%d月%d日 Month is error.\n",year,month,day);
              printf("%d年%d月%d日 Month is error.\n",year,month,day);}
             else
             {
               if(day>month2[month-1])
                   {  
               fprintf(out,"%d年%d月%d日 Day is error.\n",year,month,day);
               printf("%d年%d月%d日 Day is error.\n",year,month,day);}
               else {days=sumday(year,month,day);//调用函数sumday()
               if(days%5==0||days%5==1||days%5==2)
    {   fprintf(out,"%d年%d月%d日渔夫在打鱼。\n",year,month,day);//输出到文件上
    printf("%d年%d月%d日渔夫在打鱼。\n",year,month,day);}
    else {
    fprintf(out,"%d年%d月%d日渔夫在晒网。\n",year,month,day);//输出到文件上
    printf("%d年%d月%d日渔夫在晒网。\n",year,month,day);}
               }
             }
            }
         }
      }
 }



else
 {
       if((year<2010)&&(month<1||month>12))
          { 
       fprintf(out,"%d年%d月%d日 Year and month are error.\n",year,month,day);
       printf("%d年%d月%d日 Year and month are error.\n",year,month,day);}  
     else
     {
       if((year<2010)&&(day>month1[month-1]))
        { 
       fprintf(out,"%d年%d月%d日 Year and day are error.\n",year,month,day);
       printf("%d年%d月%d日 Year and day are error.\n",year,month,day);}

         else
         {
           if(year<2010)
              { 
           fprintf(out,"%d年%d月%d日 Year is error.\n",year,month,day);
           printf("%d年%d月%d日 Year is error.\n",year,month,day);}
               else
           {
             if(month<1||month>12)
             { fprintf(out,"%d年%d月%d日 Month is error.\n",year,month,day);
             printf("%d年%d月%d日 Month is error.\n",year,month,day);}
             else
             {
               if(day>month1[month-1])
                   { fprintf(out,"%d年%d月%d日 Day is error.\n",year,month,day);
               printf("%d年%d月%d日 Day is error.\n",year,month,day);}
               else {days=sumday(year,month,day);
               if(days%5==0||days%5==1||days%5==2)
    {   fprintf(out,"%d年%d月%d日渔夫在打鱼。\n",year,month,day);
    printf("%d年%d月%d日渔夫在打鱼。\n",year,month,day);}
    else {
    fprintf(out,"%d年%d月%d日渔夫在晒网。\n",year,month,day);
    printf("%d年%d月%d日渔夫在晒网。\n",year,month,day);}
               }

             }
            }
         }
     }
}

 fclose(out);



}


int main()//主函数
{

printf("\t\t\t\t\t题目:三天打鱼,两天晒网\n");

juge();
return 0;


 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值