前言
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
一、任务要求
基本要求:
1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:
1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
二、源代码
#include <stdio.h>
#include<stdlib.h>
#define count 3//所需计算的日期个数
void main()
{
//定义两个文件指针,分别指向in和out文件
FILE *fp1,*fp2;
fp1=fopen("in.txt","r");
fp2=fopen("out.txt","a");
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((fp1)==NULL)//判断in文件是否为空
{
printf("in文件中无日期,请在里面输入日期,如:2010-01-02\n");
exit(1);
}
int y,m,d;//定义年、月、日
int s=0;//定义经过的天数
char a,b;//定义“-”
for(int i=0;i<count;i++)
{
fscanf(fp1,"%d%c%d%c%d",&y,&a,&m,&b,&d);
if(y<2010||m>12||d>31)//判断日期是否在2010-01-01之后
{
fprintf(fp2,"输入的日期错误,请重新输入!\n");
exit(1);
}
if(y%4==0)
month[1]++;
for(int j=2010;j<y;j++)//折算年份
{
if(y%4==0)
s+=366;
else
s+=365;
}
for(j=0;j<m-1;j++)//折算月份
{
s+=month[j];
}
s+=d;//最后加上天
if(s%5<4)//判断打鱼或晒网
fprintf(fp2,"%d年%d月%d日距2010年01月01日共%d天,此时他在打鱼。\n\n",y,m,d,s);
else
fprintf(fp2,"%d年%d月%d日距2010年01月01日共%d天,此时他在晒网。\n\n",y,m,d,s);
s=0;
}
fclose(fp1);
fclose(fp2);
}
三、算法流程图
四、测试结果
1、in文件输入日期
2、程序运行
3、out文件输出结果
五、总结
这次的程序用了c语言的对TXT文件的读写及存储功能,在此次程序编写的过程中,意识到了自己对于处语言的掌握还不是特别熟悉,在日后的学习当中需要加倍努力。