C语言综合性实验报告
题目:万年历
班级:12信算2班
姓名(学号):姚霞文(1200801217)
杜志康(1200801218)
金莉婷(1200801219)
吴越华(1200801220)
曹雄港(1200801221)
指导教师:陈燕敏
完成时间:2013年6月21日
I实验问题及要求…………………………………… 2
II资料查阅……………………………………………2
III程序代码………………………………………… 2
IV自定义函数流程图…………………………………4
V主程序函数流程图…………………………………5
VI调试难点说明………………………………………10
VII调试用例…………………………………………10
VIII总结………………………………………………13
● 实验问题:编程实现一个万年历,具有查询和打印的功能。
● 要求:输入某一年的某一个月份,输出当月份的日期和星期的对照表。
● 资料查询:1、1900年1月1日是星期一。
2、闰年的判断条件是:四年一闰、百年不闰、四百年再闰。
3、万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。
万年历是传统的阴历与现行公历结合,并标注二十四节气,向人们指示历史的变迁和节气物候的变化。第二部分为生活宝典,从吃、穿、住、行、用到购物生活、家庭急救等,向人们提供家居生活的日常知识以及养生保健之道,引导人们健康生活。本书是一本包罗万象之作,是勤劳聪慧的中国人民的智慧结晶,是传统文化之精华,更是现代生活的居家必备之宝典。
● 程序代码:#include
int monthday(int y,int i)
{
int day=30;
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
day=31;
if(i==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
day=29;
else day=28;
}
return day;
}
void main(){
int y,m,i,s,day=0,time=0;
do{if(time==0)
printf("依次输入年月\n");
else printf("输入错误,重新输入年月\n");
time++;
scanf("%d",&y);
printf("年\n");
scanf("%d",&m);
printf("月\n");
}while(!(y>=1900&&m>0&&m<13));
printf(" %d年%d月\n",y,m);
for(i=0;i<51;i++)
printf("*");
printf("\n");
printf("SUN MON TUE WEN THU FRI
SAT\n");
for(i=1900;i
{if((i%4==0&&i%100!=0)||i%400==0)
day+=366;
else day+=365;
}
for(i=1;i
day+=monthday(y,i);
s=day%7+1;
if(s<7)
{for(i=0;i
printf(" ");}
for(i=1;i
{printf("%2d ",i);
if((i+s)%7==0)
printf("\n");
}
printf("\n");
for(i=0;i<51;i++)
printf("*");
printf("\n");}
● 自定义函数流程图:
N
N
Y
Y
●
Y
N
Y
N
Y
输出“SUN MON TUE WEN THU FRI SAT\n”
i=1900
N
i < y
Y
(i%4=0&&i%100!=0)||i%400=0 N
Y
day+=366 day+=365
i
Y
i++
s=day%7+1
Y
● 调试难点说明:
1、如何实现自动换行?
万年历中输出某个月的全部日期,每到星期六就得换行,如何使其
自动判断并换行。运用判断语句将之前已输出的日期加上第一个日
日子前输出的空格次数与7进行判断,满7了就进行换行,就可保
证日期到星期六实现自动换行再输出。
2、如何判断所输出月份的1号是星期几?
知道了1号应输出在星期几的下面,接下去的日期就可逐一进行顺序
输出。已知1900年1月1 号为星期一,又知每七天一轮回,故将中
间日子之和除7所得余数便是与星期一的相隔数,便可知1号为星期
几。而中间日子之和,需判断是否有闰年,需知各个月天数,再进行
求和。
● 调试用例:
年月输入正确并成功输出万年历的用例:
1、1993年6月
2、2000年3月
3、2013年6月
年月输入错误的用例:
年月输入错误,重新输入正确的用例:
● 总结:
在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。在这个星期里,我们专业的学生在老师的分配下分成了几个小组进行c语言程序实践学习。在这之前,我们已经对c语言这门课程将近学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,在运用起来的时候还是感到很棘手,毕竟是刚开始接触这门课程。
我们这一组选到的题目的问题是“用C语言编写一个万年历,具有查询和打印的功能。”由于个人和时间的关系,我们采取了分工行动的措施,同时其他所有组员都会对另外一个同学的成果进行检查和讨论。例如有人编写程序,他写完以后,我们其他人就会去检查他的程序是否有错误或者哪些地方值得去改进。还有一些资料的查寻和整理,程序里函数的流程图的呈现都需要大家一起努力才能完成的。因为很多时候,一个人在工作比较投入的时候是很难发现自己的错误,所以一个团体在这时就会显得比较有作用。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。就如我们这次的程序编写中加日期的时候容易加错,结果导致算星期不准确;格式排版要用字符组合,不然排版就会有点困难。
学了将近一个学期的C语言,我们慢慢了解了c语言的很多基本特点,例如语言简洁,使用灵活方便;运算符丰富,表达能力强;目标程序质量高,具有面向硬件系统的特点;具有结构化的控制语句和模块化的程序结构等很多的优点。虽然我们需要对C语言的理论只是要有一定了解,但是最重要的还是上机练习的过程。上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。只有在调试中一次又一次的失败,一次又一次的尝试,我们的C语言水平面才会有所加强。学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以我们有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。同时我们也可以去图书馆借阅一些相关资料进行补充和进一步了解。学习C语言,对我们未来的工作都会有一定的帮助,我想只要用心去学了,就不会有太多的难度。
分工合作:资料查询:曹雄港
程序代码、调试难点说明:吴越华
流程图:金莉婷,姚霞文
调试用例:姚霞文
总结:杜志康
报告整理:金莉婷
本文来源:https://www.2haoxitong.net/k/doc/8cc355b8bb4cf7ec4bfed068.html
文档为doc格式