喜迎
春节

三天打鱼两天晒网 从文件读入数据输出到文件 C语言


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

二、使用语言:C语言

  • 算法思路:
  1. 语言描述:

1)计算从2010年1月1日开始至指定日期共有多少天;

2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;

3)根据余数判断他是在“打鱼”还是在“晒网”;

    若  余数为1,2,3,则他是在“打鱼”

    否则  是在“晒网”

2、流程图:

 源代码:

  1. /**
  2. *file_name:三天打鱼两天晒网
  3. *author:商嘉鑫
  4. *creation date:2019/2/26
  5. *modification date: 2019/3/2
  6. *OS:Windows
  7. *IDE:Dev-C++
  8. *brief:某人从2010年1月1日起开始“三天打鱼两天晒网”,
  9. 问这个人在以后的某一天中是“打鱼”还是“晒网”。
  10. *version:1.0
  11. **/
  12. #include<stdio.h>/*预处理命令*/
  13. #include<stdlib.h>/*预处理命令*/
  14. #define N 10000/*宏定义*/
  15. int main()
  16. {
  17. FILE* fp1;/*申请一个文件指针*/
  18. FILE* fp2;/*申请一个文件指针*/
  19. /*fopen函数,返回就是上面定义的文件指针了,
  20. 文件以a模式进行文件添加*/
  21. fp2 = fopen("G://out.txt","a");
  22. fp1 = fopen("G://in.txt","r");
  23. if(fp1 == NULL||fp2==NULL)
  24. {
  25. printf("ERROR!\n");
  26. }
  27. char a,b;/*分隔符*/
  28. int year,month,day,sum,leap,i,j;/*年,月,日,距2010-1-1多少天*/
  29. {
  30. for(j=0;j<N;j++)
  31. {
  32. fscanf(fp1,"%d%c%d%c%d%*[^0-9.]",&year,&a,&month,&b,&day);
  33. }
  34. if(year<2010) /*判断所输入日期在2010-1-1之前还是之后*/
  35. {
  36. fprintf(fp2,"他现在还没有开始打鱼晒网,请重新输入!\n\n");
  37. exit(1);
  38. }
  39. sum=0;
  40. {
  41. switch(month)
  42. {
  43. case 1:sum=0;
  44. if(day>31)
  45. {
  46. fprintf(fp2,"日期错误,请确定1月有这一天吗?\n\n");
  47. exit(1);
  48. }
  49. break;
  50. case 2:sum=31;
  51. if(day>28)
  52. {
  53. fprintf(fp2,"日期错误,请确定2月有这一天吗?\n\n");
  54. exit(1);
  55. }
  56. break;
  57. case 3:sum=59;
  58. if(day>31)
  59. {
  60. fprintf(fp2,"日期错误,请确定三月有这一天吗?\n\n");
  61. exit(1);
  62. }
  63. break;/*平年*/
  64. case 4:sum=90;
  65. if(day>30)
  66. {
  67. fprintf(fp2,"日期错误,请确定4月有这一天吗?\n\n");
  68. exit(1);
  69. }
  70. break;
  71. case 5:sum=120;
  72. if(day>31)
  73. {
  74. fprintf(fp2,"日期错误,请确定5月有这一天吗?\n\n");
  75. exit(1);
  76. }
  77. break;
  78. case 6:sum=151;
  79. if(day>30)
  80. {
  81. fprintf(fp2,"日期错误,请确定6月有这一天吗?\n\n");
  82. exit(1);
  83. }
  84. break;
  85. case 7:sum=181;
  86. if(day>31)
  87. {
  88. fprintf(fp2,"日期错误,请确定7月有这一天吗?\n\n");
  89. exit(1);
  90. }
  91. break;
  92. case 8:sum=212;
  93. if(day>31)
  94. {
  95. fprintf(fp2,"日期错误,请确定8月有这一天吗?\n\n");
  96. exit(1);
  97. }
  98. break;
  99. case 9:sum=243;
  100. if(day>30)
  101. {
  102. fprintf(fp2,"日期错误,请确定9月有这一天吗?\n\n");
  103. exit(1);
  104. }
  105. break;
  106. case 10:sum=273;
  107. if(day>31)
  108. {
  109. fprintf(fp2,"日期错误,请确定10月有这一天吗?\n\n");
  110. exit(1);
  111. }
  112. break;
  113. case 11:sum=304;
  114. if(day>30)
  115. {
  116. fprintf(fp2,"日期错误,请确定11月有这一天吗?\n\n");
  117. exit(1);
  118. }
  119. break;
  120. case 12:sum=334;
  121. if(day>31)
  122. {
  123. fprintf(fp2,"日期错误,请确定12月有这一天吗?\n\n");
  124. exit(1);
  125. }
  126. break;
  127. default:fprintf(fp2,"日期错误,请确定一年有这个月份吗?\n\n");
  128. exit(1);
  129. }
  130. }
  131. sum=sum+day;
  132. if(year%400==0||year%100!=0&&year%4==0) /*判断是否为闰年*/
  133. leap=1;
  134. else
  135. leap=0;
  136. if(leap==1&&month>2&&month<13)
  137. sum=sum++;
  138. i=year-2012;
  139. if(i>0) /*i>0说明已经超过2012年*/
  140. /*以每年为365天,闰年每四年一次,
  141. 再加上2010和2011两个过去的年的总天数*/
  142. sum+=365*i+(i-1)/4+1+365*2;
  143. /*单算2010年和2011年*/
  144. else if(year==2010)
  145. sum=sum;
  146. else if(year==2011)
  147. sum+=365;
  148. else if(year==2012)
  149. sum=sum+730;
  150. /*输出结果到out.txt*/
  151. fprintf(fp2,"现在距2010-1-1已经%d天了\n",sum);
  152. if(sum%5==3||sum%5==2||sum%5==1)
  153. fprintf(fp2,"%d-%d-%d他在打鱼++++++++>\n\n",year,month,day);
  154. else
  155. fprintf(fp2,"%d-%d-%d他在晒网-------->\n\n",year,month,day);
  156. }
  157. fclose(fp1);
  158. fclose(fp2);
  159. return 0;
  160. }

 

三、调试与测试:

  1. 调试:略。

 

2、测试截屏:

(1)合法日期2012-2-2

在文件in.txt中输入2012-2-2运行程序,控制台不输出,结果被输出到out.txt

  1. 不合法日期
  • 2010年之前的日期:2009-2-2

在文件in.txt中输入2009-2-2运行程序,控制台不输出,提示语句被输出到out.txt

 

  • 2010年之后的日期:
  1. 某个月天数不合法:2019-1-32

在文件in.txt中输入2019-1-32运行程序,控制台不输出,提示语句被输出到out.txt

  1. 月份不合法:2012-13-1

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

撒花撒花~~~~


文章作者: 周周
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周周 !
评 论
  目录