2021-03-21

c语言实现三天打渔两天晒网

问题要求:某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
一、问题分析
(1)计算从2010年1月1日开始至指定日期共有多少天;
(2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;3)根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”。否则是在“晒网”
二、算法流程图
程序流程图

#include<stdio.h>
struct date
{
	int year;
	int mouth;
	int day;
};
void Days(struct date days)
{
	int sum = 0;//记录输入日期距2010年1月1日的总天数
	int sum1 = 0;//记录所输日期那一年已经过的总天数
	switch (days.mouth - 1)
	{
	case 1: sum1 += 31;
	case 2: 
		if ((days.year % 4 == 0 && days.year % 100 != 0) || days.year % 400 == 0)
			sum1 += 29;//闰年有29天
		else
			sum1 += 28;//平年有28天
	case 3: sum1 += 31;
	case 4: sum1 += 30;
	case 5: sum1 += 31;
	case 6: sum1 += 30;
	case 7: sum1 += 31;
	case 8: sum1 += 31;
	case 9: sum1 += 30;
	case 10:sum1 += 31;
	case 11:sum1 += 30;
	}
	sum1 += days.day;
	if (days.year == 2010)
		sum = sum1 - 1;
	else if (days.year > 2010)
	{
		int sum2 = 365;//计算从2010年1月1日起这一年所剩余的天数
		int sum3 = 0;//记录从2010年到所输入年之间的整数年的天数
		int i;
		for (i = 2010; i <= days.year - 1; i++)
			if ((days.year % 4 == 0 && days.year % 100 != 0) || days.year % 400 == 0)
				sum3 += 366;//闰年
			else
				sum3 += 365;//平年
		sum = sum1 + sum2 + sum3;
	}
	int x = sum % 5;//通过总天数sum对5取余数来判断打渔还是晒网
	if (x > 0 && x <= 3)
		printf("今天打渔!\n");//若对5取余值为1,2,3时打渔
	else
		printf("今天晒网! \n");//若对5取余值为4,5时晒网

}

void main(void)
{
	struct date days;
	printf("从2010年1月1日起,请输入年,月,日。如:2017、9、11\n");

	scanf("%d、%d、%d", &days.year, &days.mouth, &days.day);

	int L = (days.year % 4 == 0 && days.year % 100 != 0 || days.year % 400 == 0);

	while (days.year < 2010 || days.mouth>12 || days.day > 31)
	{
		if (days.mouth == 2)
			if (((L == 1) && (days.day > 29)) || ((L != 1) && (days.day > 28)))
			{
				printf("您的输入不合法,请重新输入!\n");
				scanf("%d、%d、%d", &days.year, &days.mouth, &days.day);
			}
			else
				break;
		else {
			printf("您的输入不合法,请重新输入!\n");
			scanf("%d、%d、%d", &days.year, &days.mouth, &days.day);
		}
		}//while循环判断所输入的日期是否合法

	Days(days);//调用Days函数

}

三、运行结果
在这里插入图片描述
在这里插入图片描述
四、心得体会
虽然实现了代码编写要求,但是文件测试要求还没有完成。在程序设计过程中使用到简单的while循环和for循环来判断结果。下次期待学会更简洁有效的代码编写以及读入输出文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值