题目名称:“三天打鱼两天晒网”
题目内容:某人从2010年1月开始“三天打鱼两天晒网”,请问这个人在以后的某一天是打鱼还是晒网。
算法设计:
1、输入日期:年月日
2、判断日期是否合法,不合法则输入合法日期,合法继续下一步
3、判断是否为闰年
4、为闰年咋额在总天数加366,否则加365;
5、计算相隔的总天数(需要注意的闰年二月29天,平年28天)
6、用计算出的相隔的总天数对5 取模,若余数为1,2,3,则他在打鱼,否则是在晒网
流程图:
扫描二维码关注公众号,回复:
12421591 查看本文章

代码:
#include<stdio.h>
int main()
{
int year,month,day;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立一个平年月份天数的数组
printf("请输入年月日(中间用空格分开):\n");
scanf("%d%d%d",&year,&month,&day);
//判断输入日期是否合法
while(year<2010||month<1||month>12||(day>31))
{
printf("输入日期不合法,请重新输入\n");
scanf("%d%d%d",&year,&month,&day);
}
//判断是否为闰年
for(int y=2010;y<year;y++)
{
if(y%400==0||(y%4==0&&y%100!=0))
day+=366;
else
day+=365;
}
for(int m=1;m<month;m++)
{
day+=a[m];
if(month==2&&((year%400==0)||(year%4==0&&year%100!=0)))
{
day+=1;
}//如果为闰年二月,则总天数加一
}
//判断打鱼还是晒网
if((day%5==1)||(day%5==2)||(day%5==3))
printf("这一天这个人在打鱼\n");
else
printf("这一天这个人再晒网\n");
return 0;
}
不过这个代码还存在一定的问题,比如输入2013 2 29时不提示输入日期不合法,
--------------------------分割线---------------------------------------------------------------------------------------------------------------------------------
听了老师的要求后,感觉全部“踩雷”,老师的要求我完美避开,比如:只写一个main函数,比如调试测试做的不符合要求。
下面是我修改后的代码:(这次已经修改了上面的问题)
#include<stdio.h>
int date(int y,int m,int d) //判断输入日期是否合法
{
while(y<2010||m<1||m>12||d>31||d<1)
{
printf("输入日期不合法,请重新输入\n");
scanf("%d%d%d",&y,&m,&d);
}
if(m==2&&d>28)
{if((y%400==0)||(y%4==0&&y%100!=0))
return 0;
else
printf("输入日期不合法,请重新输入\n");
scanf("%d%d%d",&y,&m,&d);
}
return 0;
}
void run(int year,int month,int day)//判断是否为闰年
{
for(int y=2010;y<year;y++)
{
if(y%4==0&&y%100!=0) day+=366;
else if(y%400==0) day+=366;
else day+=365;
}
for(int m=1;m<month;m++)
{
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立一个平年月份天数的数组
day += a[m];
if(month==2&&((year%400==0)||(year%4==0&&year%100!=0)))
{
day+=1;
}//如果为闰年二月,则总天数加一
}
}
void judge(int da) //判断打鱼还是晒网
{
if((da%5==1)||(da%5==2)||(da%5==3))
printf("这一天这个人在打鱼\n");
else
printf("这一天这个人再晒网\n");
}
int main()
{
int year,month,day;
printf("请输入年月日(中间用空格分开):\n");
scanf("%d%d%d",&year,&month,&day);
date(year,month,day);
run(year,month,day);
judge(day);
return 0;
}