1、2)注意闰年情况其显示格式要求如下:1)月份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下:Input the year: 2004Input the file name: aThe calendar of the year 2004. Januray 1 February 2 Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 1 2 3 4 5 6 7 4 5 6 7 8 9 10 8 9 10 11 1
2、2 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 = = March 3 April 4 1 2 3 4 5 6 1 2 3 7 8 9 10 11 12 13 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 29 30
3、2需求分析根据题目的要求,由于年份的信息是存放在文件中的,所以要提供文件的输入、输出等操作;在程序中需要核对年份、月份与星期的信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择菜单实现功能选择。3. 总体设计下面来分析一下整个系统,根据上面需求分析,可以将这个系统分为三大模块(见图):数据输入、数据判断、日期排序。4详细设计 1主函数主函数一般设计得比较简单,只提供输入,功能处理和输出部分的函数调用。其中各功能模块用菜单方式选择;另外,菜单部分也可以写成函数。其流程图如下上图:主函数流程图程序main() /*主函数*/ int year, month ; /*变量year 保存选择菜
4、单数字,month 判断输入的数字是否在功能菜单对应数字范围内。*/printf();scanf(%d,&year); /*输入任意一年*/The calendar of the year %d.,year); /*输出日历表*/n-nfor(month=1;month=12;month+) f(year,month); /*判断模块*/2各功能模块设计(1)输入模块分析 单独看数据信息,年份日期都是整型数据,采用整型;而星期月份是字符型,应该采用相应的字符型数组。数据信息存放在文件中,每一年对应一个完整的日历表,既方便有便于管理。现在要考虑年份是否是闰年和星期的计算问题。参照所分析的结果,这
5、里一定要调用函数,调用的函数要判断年份的信息。所以可以以以下形式调用和输入void f(int year,int month) char month_str4=,JanFebMarAplMayJunJulAugSepOctNovDec; /* 字符型输入 */int month_day=0,31,28,31,30,31,30,31,31,30,31,30,31; /* 整型输入*/int i,j,wdays,mdays,days;int count=0;(2)判断模块分析 该模块的功能是为了判断出输入年份的二月有多少天,既先要判断该年是否是闰年;根据闰年的条件:若year能被4整除不能被100
6、整除则输出闰年,若year能被400整除,则输出闰年,若不满足则输出平年。该函数的流程图如下:判断模块流程图/* 根据闰年的条件,我们会用到关系运算符“|”“&”“!=”,然后在计算输入年份时把二月的天数加上去。/*判断模块*/int leap(int year ) /*判断year是不是闰年,返回值1表示是,0表示否*/if (year %4 = 0)&(year % 100 != 0)|(year % 400 = 0) /*闰年条件*/ return 1;return 0;(3)计算制表模块分析 该模块要精确的计算输入年份的每一天是星期几,于是定义公元一年一月1号为星期一,后来的年份都在这
7、个基础累加。;/* 二维数组,存放月份的信息*/ /*存放每个月天数的信息*/ /*控制格式的输出*/for (i=1,days=0;iyear;i+) /*年份循环累加*/ if (leap(i) days += 366; else days += 365; for (i=1;month;i+) if (i=2 & leap(year) days+=29; else days+=month_dayi; %s %dn,month_strmonth,month); Sun Mon Tue Wed Thu Fri Satnwdays=days % 7; /*计算每个月的日历*/for (j=0;j
8、=wdays;j+) if(wdays=6) break; for( i = 0; i 1 & count % 7 = 0 ) printf(n /*若是一个星期已经排满,则转行输入*/ printf(%4d,i);5上机操作1数据源根据前面所规定的数据输入形式,任意输入一年即可。例如:2004 2005 2006 20072. 编译、连接和运行(略)3. 结果比较程序运行的结果是否和下面一致?如果不一致,思考一下问题出现在什么地方?另外,思考一下还有没有其他的实现方案或者哪些地方可以更好的改进。下面是各模块的界面图,主菜单函数2输入模块在主菜单上输入任意年份,注意输入的格式,出现下面的菜单;
9、 3. 数据输入后,按下enter键,如图所示结果运行如(上、下)图6.总结C语言课程设计总结:学了整整一学期的C语言,我对C有了进一步认识,当然这个认识大部分来自于这几天的编程实习。我无法忘记自己的C语言考试分数,因为它带给我的是懊恼和打击,可是我知道,C有他自己的规则,如果把握好这个规则,学起来应该不是那么费劲的。就像物理和化学一样,我承认我喜欢物理和化学,但如果我在C语言上下的功夫能像高数和物理一样多,考试就不是那个结局了。这些天的编程,我曾一度处于茫然和不解状态,拿到手上的题目,我不知所措。之前学的都是一些简单的程序阅读之类的题目,考试也全部都是选择题。或许C语言教学大纲对我们的要求就
10、只是简单的会读懂程序,可是这一次是自己编程序,在对一些语法和表达都不怎么清楚的情况下要我便出一套完整的程序是很有难度的,于是在开始的两天我一筹莫展。我的题目是“编一套程序,当输入任一年时显示出该年的日历”,拿起这道题,我就问宋老师了,老师说这道题就是一个计算问题,其实程序很简单。于是,我决定好好做这道题。意识模糊的告诉我,这个程序要调用函数,刚好书上有关于闰年和平年的判断方法,于是我知道该怎么去调用函数了,现在对闰年的判断我十分深刻:“(year%4= =0)&(year%100!=0)|(year%400= =0)”,我想我是无法忘记这个判断程序的。但是看到题目要求的垂直输入及一些相关要求,
11、我很迷茫。对一个新手来说,这真是个大的挑战。我查阅了很多资料,也请教了同学、朋友(毕竟自己带了电脑,所以我有足够的时间把这道题弄透彻),在不断的询问下,我终于弄清楚了这道题的意思,按照一些参考资料,我试着编写这个程序。我首先觉得,用到的程序段不必太高级,因为天下事有高低之分,决定优劣的不是集体中某部分的强弱,起决定作用的是组合内各元素的和谐,要能在一个集体中各能尽其用,每个人都能发挥长处,避免自己的短处,那么这个集体的实际组合能量是最优的。选择什么等级的语言就是关键,我所学的知识并不丰富,所以我只需要把这个程序做出来,能够达到题目的要求即可。在这次实习中,我几乎是泡在电脑上的,网上有这种题目的
12、答案,但是我看不懂,因为上级的环境不是“Microsoft Visual C+ 6.0”,而是C+的程序编的,如此多的头文件和函数类型我从没见过,读起来很费劲。编程中遇到很多困难,我曾一度放弃。可是我又不甘心,毕竟7天做一个程序,时间有的是,懂这个的也有人,为什么我要放弃?于是我把遇到的问题和不懂得地方整理起来,14号下午,我去了北区,找了一个同学帮我解惑,在我的疑惑慢慢解开的过程中,我对C语言有了更多的理解,看到同学那么热衷C,就像我一度爱好物理一样,我有些感慨。可能是我不够重视,所以我才会在C上跌跤。终于,在连续几天的挖掘和吃力的编写中,我的程序做好了。几个同学笑我的程序太简单,我并不介意,毕竟我学的没有那么深,我追求的是这个程序能运行,是对的,至于语言的高低,我没有在意。想到下个学年我就要考计算机二级了,可能对很多人来说这并不算什么,但是我在乎。之前去图书馆解了基本二级的指导书,昨天看了一下午,、遇到很多不懂的内容。不过,经历了这次编程,我学会了很多,C语言难,但是我不能放弃,懂这个的大有人在,我所要做的就是努力看书,努力提问。不知不觉写了这么多,7月16号,我想我的课程设计结束了,伴随着这次实习,我收获了很多,这感受是无法言语的,至少我知道以后的二级我该怎么去努力了。加油!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1