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循环来判断结果。下次期待学会更简洁有效的代码编写以及读入输出文件。