用C语言编写的三天打鱼两天晒网@TOC
1.题目要求:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
(1)基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
(2)提高要求:1.输入数据的正确性验证。2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
2.思路分析:
根据题意可以将解题过程分为三步:
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
若余数为0,4则他是在“晒网”
在这三步中,关键是第一步。求从2010年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则 该年是闰年;
否则 不是闰年。
C语言中判断能否整除可以使用求余运算(即求模)
3.代码
/**
*思路分析
*此问题需要解决两个问题
*(1)计算从2010年1月1日开始至指定日期共有多少天
*(2)这个天数和5之间的关系,如果它整除5的余数为1,2,3则是在“打鱼”,如果它除以5的余数是0和4则是在“晒网”。
**/
#include<stdio.h>
#include<math.h>
int main()
{
int year, month, day;
int i, j;
int days=0;
int sum = 0;
printf("please input year: ");
scanf("%d", &year);
printf("please input month: ");
scanf("%d", &month);
printf("please input day: ");
scanf("%d", &day); //输入年月日
if (year < 2010)
{
printf("输入格式有误: \n");
return 0;
}
if (day<0 || day>31)
{
printf("输入格式有误: \n");
return 0;
}
switch (month) //计算月前的天数
{
case 1:days = 0; break;
case 2:days = 31; break;
case 3:days = 59; break;
case 4:days = 90; break;
case 5:days = 120; break;
case 6:days = 151; break;
case 7:days = 181; break;
case 8:days = 212; break;
case 9:days = 243; break;
case 10:days = 273; break;
case 11:days = 304; break;
case 12:days = 334; break;
default:printf("输入格式有误: \n");
return 0;
break;
}
for (i = 2010; i<year; i++)
{
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) //判断2010年到输入年份之间闰年数
days += 366;
else
days += 365;
}
/**
*判断输入当前年份是否是闰年
*是的话判断月份是在2月前还是2月后(包含2月的话要多加一天)
*不是闰年的话就是正常天数
**/
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) //判断输入年份当年是不是闰年
if (month>2) //判断输入月份是在2月前还是2月后
sum = days + day + 1; //2月后的话要多加一天
else
sum = days + day; //2月前就是正常天数
else
sum = days + day;
printf("sum= %d\n", sum);
/**
*天数和5之间的关系
*整除5余数是1,2,3的话就是三天打鱼
*整除5余数是0,4的话就是两天晒网
**/
j = sum % 5;
switch (j)
{
case 1:printf("今天该打渔\n"); break;
case 2:printf("今天该打渔\n"); break;
case 3:printf("今天该打渔\n"); break;
case 0:printf("今天该晒网\n"); break;
case 4:printf("今天该晒网\n"); break;
}
return 0;
}
4.调试
5.程序运行结果展示