关于我的第一篇博客hhh--------“三天打鱼两天晒网”

♦ 题目:
三天打鱼两天晒网

♦问题:
某人从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~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值