中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
1.根据题意可以将解题过程分为三步:
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
2. 闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则 该年是闰年;
否则 不是闰年。
扫描二维码关注公众号,回复:
2983832 查看本文章
程序流程图如下:
具体代码如下:
#include<stdio.h>
void main()
{
int year,month,day,y,sum=0; //定义常量
int f[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年每个月份的天数,存入数组中
printf("请输入正确的年月日:\n");
scanf("%d%d%d",&year,&month,&day);
while(year<2010) //从2010年算起,输入年份必须在其之后,否则重新输入
{
printf("年份输入过小,请重新输入:\n");
scanf("%d,%d,%d",&year,&month,&day);
}
if(year%400==0||(year%4==0 && year%100!=0)) //当满足闰年条件时,在二月基础加一天
f[1]+=1;
for(y=2010;y<year;y++) //判断输入年份是否为闰年
{
if(y%400==0||(y%4==0 && y%100!=0)) //判断结果为闰年,则为366天,否则为365天
sum+=366;
else
sum+=365;
}
for(y=1;y<month;y++) //计算从2010年1月1日到所输入年份的总天数
{
sum+=f[y];
}
sum+=day;
printf("\n从2010年01月01日起到%d年%d月%d日共经过了%d天\n\n",year,month,day,sum);
if(sum%5==4||sum%5==0) //用计算出的总天数除以5,求模,若为0和4,则为晒网,否则为打渔
printf("%d-%d-%d他在晒网\n\n",year,month,day);
else
printf("%d-%d-%d他在打渔\n\n",year,month,day);
return 0;
}
该题目还可以加入一个功能,使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件,但我没有实现。