用C语言编写的三天打鱼两天晒网

用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.程序运行结果展示
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值