三天打鱼两天晒网——C语言

三天打鱼两天晒网——C语言,第1张

概述本文章向大家介绍三天打鱼两天晒网——C语言,主要包括三天打鱼两天晒网——C语言使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:

中国有句俗语:“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天是在“打鱼”还是在“晒网”?

思路:

首先求出从1990年1月1日到指定日期之间经过的天数;

经分析,打鱼晒网是5天一轮回,所以用天数对5取余来判断打鱼还是晒网。

具体解释:

观察发现,打鱼晒网是5天一个轮回,前三天打鱼,后两天晒网;

由此可以利用经过的总天数对5取余的方式来判断打鱼还是晒网;

经分析:取余结果为1、2、3时打鱼,结果为0或4时为晒网;

因此需要求出指定的某一天到1990年1月1日期间共有多少天;

对平年闰年分情况讨论,能被4整除但不能被100整除或能被400整除的年份为闰年,有366天,其余为平年,为365天;

求天数时将整年和非整年单独处理:整年直接天数增加366或365;非整年则根据月数以及日期利用循环来求出具体天数;

将平年闰年两种年的每月天数分别存储进数组,用来解决不是整年的剩余天数;

最后根据之前的分析,取余求出结果。

注:还应当对用户输入的日期进行合法判断,例如平年2月没29号、4月没31号等。

代码:

#include

#include

#define YEAR 1990 //宏定义初始年月日

#define MONTH 1

#define DAY 1

/*

三天打鱼两天晒网

题目:

中国有句俗语:“三天打鱼两天晒网”,

某人从1990年1月1日起开始“三天打鱼两天晒网”。

问这个人在以后的某一天是在“打鱼”还是在“晒网”?

*/

int input(); //录入数据并判断是否合法

int Days(int,int,int); //求期间的天数,参数为年月日

int Days(int year,int month,int day)

{

int days = 0; //期间共有多少天

int days_tmp = 0; //不满一年的整月天数

int Ping_nian[] = {31,28,31,30,31};

int run_nian[] = {31,29,31};

int i = 0;

int j = 0;

for(i = YEAR; i <= year; i++) //遍历每一年

{

if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) //判断闰年

{

if((year - i) != 0) //判断是否为完整的一年

days += 366;

else

{

for(j = 0; j < month - MONTH; j++)

days_tmp += run_nian[j];

days += days_tmp + day;

}

}

else

{

if((year - i) != 0) //判断是否为完整的一年

days += 365;

else

{

for(j = 0; j < month - MONTH; j++)

days_tmp += Ping_nian[j];

days += days_tmp + day;

}

}

}

return days;

}

int input()

{

int days = 0,//从始至终的总天数

year = 0,

month = 0,

day = 0;

int num = 0;

printf("t输入一个1990年包括1月1日之后的日期nn");

printf("输入年月日(逗号隔开):");

while(1) //录入数据并判断是否合法

{

scanf("%d,%d,%d",&year,&month,&day);

if(year >= YEAR && month >= 1 && month <= 12) //判断年月

{

if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)

{

if(day >= 1 && day <= 31) //大月天数是否合法

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin); //清空缓存区

}

}

else if(month == 2) //2月天数是否合法

{

if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //闰年

{

if(day >= 1 && day <= 29)

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

else

{

if(day >= 1 && day <= 28)

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

}

else if(day >= 1 && day <= 30) //小月天数是否合法

break;

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

else

{

printf("输入有误,请重新输入:");

fflush(stdin);

}

}

days = Days(year,month,day); //调用求天数的函数

return days; //返回天数

}

int main()

{

int days = 0; //从始至终的总天数

days = input(); //调用函数

if((days % 5 == 4) || (days % 5 == 0)) //利用取余判断打鱼还是晒网

printf("这一天晒网");

else

printf("这一天打鱼");

return 0;

}

运行结果:

测试3组数据:


1、1990年1月3日——打鱼;


2、1990年1月4日——晒网;


3、2018年11月11日——打鱼。(先输入非法日期进行数据录入判断测试)



**

程序练习,仅为一种思路,若有错误请指出。

**

总结

以上是内存溢出为你收集整理的三天打鱼两天晒网——C语言全部内容,希望文章能够帮你解决三天打鱼两天晒网——C语言所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1264427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存