♦ 题目:
三天打鱼两天晒网
♦问题:
某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
♦ 要求:
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。 2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
♦程序:
#include<stdio.h>
#include<stdlib.h>
void hanshu(int year,int month,int day)
{
int sum=0;
int a=0;
int b=0;
int c=0;
int x[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年各月份的天数
int y[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年各月份的天数
for(int i=2010;i<year;i++) //利用循环结构计算出在输入年份之前的那几年一共有几天
{
if((i%4==0&&i%100!=0)||i%400==0) //判断是否有闰年,有的话,一年为366天;否则一年为365天
a+=366;
else
a+=365;
}
for(int j=0;j<month-1;j++) //利用循环计算在输出月份之前的几个月一共有几天
{
if((year%4==0&&year%100!=0)||year%400==0) //判断该年是否为闰年,如果是,则用闰年数组;否则,用平年数组
b+=y[j];
else
b+=x[j];
}
c=day; //用户输入的天数
sum=a+b+c; //将年,月,日所计算的天数相加,即为总天数
printf("距离2010年1月1日一共有%d天\n",sum);
if(sum%5==1||sum%5==2||sum%5==3) //判断总天数取余后余数是否为1,2,3,如果是,输出“你在打鱼”;否则,输出“你在晒网”
printf("你在打鱼~~~\n");
else
printf("你在晒网~~~\n");
}
void main()
{
int year,month,day,m,p,a,b,c;
printf("***************计算你到底在打鱼还是晒网***************\n");
printf("1.使用文件测试\n");
printf("2.从键盘输入计算\n");
printf("请输入你想选择的操作的序号:\n");
scanf("%d",&m);
if(m==1) //选择1,进入文件测试环节
{
FILE *fp1;
FILE *fp2;
fp1=fopen("in.txt","r");
fp2=fopen("out.txt","w");
if(fp1==NULL) //判断文件in.txt是否为空
{
printf("无法打开该文件,请按任意键退出!\n");
exit(1);
}
else if(fp2==NULL) //判断文件out.txt是否为空
{
printf("无法打开该文件,请按任意键退出!\n");
exit(1);
}
else
fscanf(fp1,"%d%d%d",&a,&b,&c); //文件不为空,则用格式化读写函数fscanf()和fprintf()来读取文档in.txt和out.txt中的信息
hanshu(a,b,c);
fprintf(fp2,"%1d",&p);
fclose(fp1); //关闭文件
fclose(fp2);
}
else if(m==2)
{
printf("请输入年,月,日:(在2010年1月1日之后)\n");
scanf("%d%d%d",&year,&month,&day);
while(year<2010||month>12||day>31) //判断输入年份是否小于2010年,如果是,则重新输入
{
printf("输入错误!请重新输入!\n");
scanf("%d%d%d",&year,&month,&day);
}
hanshu(year,month,day);
}
else
{
printf("你的输入有误!请重新输入:\n");
scanf("%d",&m);
}
}
♦ 心得:
第一次接触文件测试这样的问题,我刚开始还真无从下手~~还好问了班里比较厉害的同学,然后自己复习了C语言课本上的文件那一章,感觉遇到的问题挺多的,但是还好在我的不懈努力(不断问别人)下,最终是把文件测试这关通过了!!!
刚开始敲得那个代码只有一个主函数,后来检查了一下觉得太简单了,然后运用了子函数,感觉自己对C语言还掌握的不是很清楚,还需要多多动手敲代码啊!!!(希望老师能看到我这个代码小白的认真~)
我觉得这次作业让我学到了好多东西,也了解到了大企业的程序设计风格,我可以从现在开始学习他们的风格。
个人感觉还是对C语言感情更深一些,毕竟是接触计算机学到的第一门语言hhhh~希望我能够在史晓楠老师(超级厉害)的教导下学到更多以前没接触过的东西!!!
新的一年,新一学期,新的起点,FIGHTING~