一、题目: 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
二、使用语言:C语言
- 算法思路:
 
- 语言描述:
 
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
2、流程图:

源代码:
-  /**
 -    *file_name:三天打鱼两天晒网 
 -    *author:商嘉鑫
 -    *creation date:2019/2/26
 -    *modification date: 2019/3/2
 -    *OS:Windows
 -    *IDE:Dev-C++
 -   
 -    *brief:某人从2010年1月1日起开始“三天打鱼两天晒网”,
 -           问这个人在以后的某一天中是“打鱼”还是“晒网”。 
 -    *version:1.0
 -  **/
 -  
 - #include<stdio.h>/*预处理命令*/
 - #include<stdlib.h>/*预处理命令*/ 
 - #define N 10000/*宏定义*/
 -  
 - int main()
 - {    
 -     FILE* fp1;/*申请一个文件指针*/
 -     FILE* fp2;/*申请一个文件指针*/
 -     
 -     /*fopen函数,返回就是上面定义的文件指针了,
 -     文件以a模式进行文件添加*/
 -     fp2 = fopen("G://out.txt","a");
 -     fp1 = fopen("G://in.txt","r");
 -      if(fp1 == NULL||fp2==NULL)
 -         {
 -             printf("ERROR!\n");
 -         }
 -         
 -     char a,b;/*分隔符*/ 
 -     int year,month,day,sum,leap,i,j;/*年,月,日,距2010-1-1多少天*/
 -     {
 -     
 -     for(j=0;j<N;j++)
 -     {
 -  
 -         fscanf(fp1,"%d%c%d%c%d%*[^0-9.]",&year,&a,&month,&b,&day); 
 -     }
 -     if(year<2010) /*判断所输入日期在2010-1-1之前还是之后*/ 
 -     {
 -         fprintf(fp2,"他现在还没有开始打鱼晒网,请重新输入!\n\n");
 -         exit(1);    
 -     }
 -  
 -     sum=0;
 -     {
 -     
 -     switch(month)  
 -     {
 -         case 1:sum=0;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定1月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 2:sum=31;
 -         if(day>28) 
 -         {
 -         fprintf(fp2,"日期错误,请确定2月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 3:sum=59;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定三月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;/*平年*/ 
 -         case 4:sum=90;
 -         if(day>30) 
 -         {
 -         fprintf(fp2,"日期错误,请确定4月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 5:sum=120;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定5月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 6:sum=151;
 -         if(day>30) 
 -         {
 -         fprintf(fp2,"日期错误,请确定6月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 7:sum=181;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定7月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 8:sum=212;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定8月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 9:sum=243;
 -         if(day>30) 
 -         {
 -         fprintf(fp2,"日期错误,请确定9月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 10:sum=273;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定10月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 11:sum=304;
 -         if(day>30) 
 -         {
 -         fprintf(fp2,"日期错误,请确定11月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         case 12:sum=334;
 -         if(day>31) 
 -         {
 -         fprintf(fp2,"日期错误,请确定12月有这一天吗?\n\n");
 -         exit(1);
 -         }
 -         break;
 -         default:fprintf(fp2,"日期错误,请确定一年有这个月份吗?\n\n");
 -         exit(1);
 -          
 -     }
 - }
 -     
 -     sum=sum+day;
 -     if(year%400==0||year%100!=0&&year%4==0) /*判断是否为闰年*/ 
 -     leap=1;
 -     else
 -     leap=0;
 -     if(leap==1&&month>2&&month<13)
 -     sum=sum++;
 -     
 -     i=year-2012;
 -     if(i>0) /*i>0说明已经超过2012年*/
 -      
 -     /*以每年为365天,闰年每四年一次,
 -     再加上2010和2011两个过去的年的总天数*/
 -     sum+=365*i+(i-1)/4+1+365*2;  
 -     
 -     /*单算2010年和2011年*/ 
 -     else if(year==2010)
 -     sum=sum;
 -     else if(year==2011)
 -     sum+=365;
 -     else if(year==2012)
 -     sum=sum+730; 
 -     
 -     /*输出结果到out.txt*/ 
 -     fprintf(fp2,"现在距2010-1-1已经%d天了\n",sum);
 -     if(sum%5==3||sum%5==2||sum%5==1)
 -     fprintf(fp2,"%d-%d-%d他在打鱼++++++++>\n\n",year,month,day);
 -     else
 -     fprintf(fp2,"%d-%d-%d他在晒网-------->\n\n",year,month,day);
 -     
 - }
 -     fclose(fp1);
 -     fclose(fp2);
 -     return 0; 
 - }
 
 
三、调试与测试:
- 调试:略。
 
2、测试截屏:
(1)合法日期2012-2-2
在文件in.txt中输入2012-2-2运行程序,控制台不输出,结果被输出到out.txt

- 不合法日期
 
- 2010年之前的日期:2009-2-2
 
在文件in.txt中输入2009-2-2运行程序,控制台不输出,提示语句被输出到out.txt

- 2010年之后的日期:
 
- 某个月天数不合法:2019-1-32
 
在文件in.txt中输入2019-1-32运行程序,控制台不输出,提示语句被输出到out.txt

- 月份不合法:2012-13-1
 
在文件in.txt中输入2012-13-1运行程序,控制台不输出,提示语句被输出到out.txt

撒花撒花~~~~