三天打鱼两天晒网(c)
作业说明
- 作业:三天打鱼两天晒网
- 作业分析:问题目的是计算出从2010年1月1日开始到指定日期共有多少天,然后根据三天打鱼两天晒网五天为一周期,通过相除取余数的方法即可判断出指定日期这一天是打鱼还是晒网。
- 细节分析:在计算总天数时需考虑是否为闰年,在用户输入指定日期时要判断输入的日期是否合理。
- 算法设计:
- 将十定义变量日期年月日year,month,day。
- 二个月的天数保存在一个数组中M[ ]。
- 输入指定日期,格式为(2015 12 24)。
- 判断输入日期是否合理,不合理,请重新输入。
- 计算得出总天数,并通过周期判断输入日期这天是在打鱼还是晒网。
- 程序流程图:
-
-
源代码:#include<stdio.h>
int main()
{
int year,month,day,i;//定义输入变量年份year,月份month,日期day
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//将每月的天数放在一个数组里面,方便后续运用
printf("请输入正确的年月日(形式如2015 1 1):\n");
scanf("%d%d%d",&year,&month,&day);
if(year<2010||month<1||month>12||day<1)//判断输入的数据是否有误
{
printf("数据输入有误,年份应大于2010,月份应小于12大于1,请重新输入:\n");
scanf("%d,%d,%d",&year,&month,&day);
}
if(year%400==0||(year%4==0 && year%100!=0)) //当输入年份是闰年时,在二月份日期基础上加一天
{
M[2]+=1;
}
int days=0;
for(i=2010;i<year;i++) //判断从开始年份到输入年份之间年份是否有闰年
{
if(i%400==0||(i%4==0 && i%100!=0))
days=366;
else
days=365;
}for(i=1;i<month;i++)
{
days=days+M [i];
}
days=days+day;//计算从2010年1月1日到输入年份数据共多少天
if(days%5==0||days%5==4) //总天数除以5,求得的余数为1或2或3时在打鱼,余数为0或4时在晒网
printf("%d年%d月%d日他今天在晒网\n",year,month,day);
else
printf("%d年%d月%d日他今天在打鱼\n",year,month,day);
return 0;}
- 运行结果:
总结:程序有不足的地方就是,无法判断输入的日期几号是否合理,有尝试加上这部分的判断,但是效果都不好。还有就是运用文件进行数据保存时,我只能将数据写入文件,假如我写入两个数据,在打开文件读取数据时只能读出最后输入的数据,因此这个程序没有用文件。
程序设计风格的搜索:
(1)正确性-能完成需求中的所有要求;
(2)可扩展性-易于修改;
(3)高效的数据结构与算法;
(4)易读性;
(5)可移植性等;
具体为:
1.变量名,宏定义,见名知义
3.空格和缩进一致性和习惯用法
4.尽量用简单的条件语句,这样不容易出错
5.注释,简单而不过分简单;
6.在进行设计的时候,必须考虑的问题包括:界面:应提供哪些服务和访问?界面在效能上实际成为服务的提供者和使用者之间的一个约定。在这里要做的是提供一种统一而方便的服务,使用方便,有足够丰富的功能,而又不过多过滥以至无法控制。信息隐藏:哪些信息应该是可见的,哪些应该是私有的?一个界面必须提供对有关部件的方便访问方式,而同时又隐蔽其实现的细节。这样,部件的修改才不会影响到使用者。资源管理:谁负责管理内存或者其他有限的资源?这里的主要问题是存储的分配和释放,以及管理共享信息的拷贝等。错误处理:谁检查错误?谁报告?如何报告?如果检查中发现了错误,那么应该设法做哪些恢复性操作?一个界面要想成功,它就必须特别适合有关的工作—必须简单、通用、规范、其行为可以预料及坚固等等,它还必须能很好地适应用户或者实现方式的变化。
7.检查所有的变量是否都正确地进行了初始化。对于测试,惟一的、最重要的规则。
风格:
1.全局变量用具有描述意义的名字,局部变量用短名字。保持一致性。(缩进,空格等)
2.函数采用动作性的名字。要准确。
3.以缩行形式显示程序结构。
4.使用表达式的自然形式。
5.利用括号排除歧义。
6.分解复杂的表达式。要清晰。
7.使用一致的缩行和加括号风格。为了一致性,使用习惯用法。
8.用else-if 处理多路选择。(少用switch)
9.避免使用函数宏。给宏的体和参数都加上括号。
把数定义为常量,不要定义为宏。(const而非#define)
10.使用字符形式的常量,不要用整数。
11.利用语言去计算对象的大小。(sizeof)