**中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:
1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
2.输入数据的正确性验证。**
/******************************/
//工程名称:三天打鱼两天晒网
//创作人:刘嘉鹏
//创作时间:2017年3月10日
/******************************/
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int year,month,day,m;//m为判断闰年多的那一天
int sum,work;
int a,b,count;
int flag=1;//循环判断
printf("******欢迎进入打鱼晒网系统******\n\n\n");
printf("请输入年-月-日(例如:2010-1-3):");
while(flag)
{
scanf("%d-%d-%d",&year,&month,&day);
if(year<2010)
{
printf("对不起,您输入日期有错。\n");
printf("请重新输入:\n");
}
else
{
if(month>12)
{
printf("对不起,您输入日期有错。\n");
printf("请重新输入:\n");
}
else
{
if(day>31||(day==30&&month==2&&(year%400==0||(year%4==0&&year%100!=0)))
||(day==31&&month==2&&(year%400==0||(year%4==0&&year%100!=0)))
||(day==29&&month==2&&(year%400!=0||(year%4!=0&&year%100!=0))))
{
printf("对不起,您输入日期有错。\n");
printf("请重新输入:\n");
}
else
{
flag=0;
}
}
}
}
while(flag)
{
if(year>=2010)
{
if(year%400==0||(year%4==0&&year%100!=0)){ //判断当年是不是闰年,是为1,不是为0
m=1;
}
else
{m=0;}
flag=0;
}
else
{
printf("对不起,您输入有错,只能输入2010以后的时间。\n");
printf("请重新输入:\n");
}
}
if(year>=2010)//判断当年之前有几个闰年和平年
{
a=(year-2010)/4;//判断有几个闰年
b=(year-2010)%4;//4年一个单位后最后剩余的有几年
count=a*366+(a*3+b)*365;//当年之前总共经历过多少天
}
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("输入的月份有错\n");break;
}
sum+=day;
if(month>2)
sum+=m; //判断这是一年中的第几天
sum=sum+count;
printf("共有%d天\n",sum);
work=sum%5;
switch(work)
{
case 1:
case 2:
case 3:printf("当天在打鱼\n");break;
case 4:
case 0:printf("当天在晒网\n");break;
}
getchar();
system("pause");
return 0;
}
附上我个人的流程思维图:
自己写的程序,还不是特别完美,但功能都还是实现了,对于程序的测试也只通过输入,还未进行文件测试。希望看到的人,可以提出宝贵的建议,共同学习。