题目:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
以下为程序源代码:
#include"stdio.h"
#include<stdlib.h>
int Count(int y,int m,int d,int month[])/*计算从2010年1月1日到输入的日期的天数*/
{
int x=0; /*定义变量x来存储天数*/
for(int Y=2010;Y<y;Y++) /*开始计算天数*/
{
if((Y%4==0&&Y%100!=0)||Y%400==0)
x+=366;
else
x+=365;
}
if((y%4==0&&y%100!=0)||y%400==0)
month[1]=29;
else
month[1]=28;
for(int i=1;i<m;i++)
{
x+=month[i-1];
}
x+=d;
return x; /*返回计算得到的天数*/
}
void File(int s[]) /*文件操作函数*/
{
FILE *fp; /*定义文件in.txt的指针*/
if((fp=fopen("d:\\in.txt","wt+"))==NULL) /*打开文件in.txt*/
{
printf("打开文件失败!");
exit(1);
}
printf("请输入年月日:");
scanf("%d%d%d",&s[0],&s[1],&s[2]);
fprintf(fp,"%d\n%d\n%d\n",s[0],s[1],s[2]);/*将输入的年月日写入到文件in.txt中*/
rewind(fp); /*移动文件内部指针到首位*/
for(int i=0;i<3;i++) /*读取文件in.txt中的数据,并分别赋值给数组s的几个元素*/
fscanf(fp,"%d",&s[i]);
fclose(fp); /*关闭文件in.txt*/
}
int Juge(int y,int m,int d) /*判断数据是否合法的函数*/
{
if(y>2010||y==2010) /*判断年份是否合法*/
{
if(m>0&&m<13) /*判断月份是否合法*/
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)/*以下判断日子是否合法*/
{
if(d>31||d<1)
{
printf("数据错误!");
return 0;
}
else
{
printf("数据正确!");
return 1;
}
}
else if(m==4||m==6||m==9||m==11)
{
if(d>30||d<1)
{
printf("数据错误!");
return 0;
}
else
{
printf("数据正确!");
return 1;
}
}
else
{
if((y%4==0&&y%100!=0)||y%400==0)
{
if(d<1||d>29)
{
printf("数据错误!");
return 0;
}
else
{
printf("数据正确!");
return 1;
}
}
else
{
if(d<1||d>28)
{
printf("数据错误!");
return 0;
}
else
{
printf("数据正确!");
return 1;
}
}
}
}
else
{
printf("数据错误!");
return 0;
}
}
else
{
printf("数据错误!");
return 0;
}
}
void main()
{
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*先定义每个月的天数的数组,暂将2月定为28天,根据具体情况再做变动*/
int y,m,d,X; /*定义年、月、日以及接收返回值的变量*/
int s[3]; /*定义数组用来保存年月日*/
File(s);
y=s[0];
m=s[1];
d=s[2];
if(Juge(y,m,d)==1)
{
X=Count(y,m,d,month);
FILE *fp1; /*定义文件out.txt的指针*/
if((fp1=fopen("d:\\out.txt","w"))==NULL)/*打开文件out.txt,准备写入计算结果*/
{
printf("打开文件失败!");
exit(1);
}
if(X%5==0||X%5==4) /*向文件out.txt中写入计算结果*/
fprintf(fp1,"%d年%d月%d日在晒网!",y,m,d);
else
fprintf(fp1,"%d年%d月%d日在打鱼!",y,m,d);
fclose(fp1); /*关闭文件out.txt*/
}
}