资源描述:
《c语言综合练习打印日历教程附完整源程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、综合练习打印日历练习的功能是:由用户输入一个年后,然后就可以分月输出当年的年历。例如输入2010,则输出2010年的年历。如图,图中显示的年历的一部分:学习目标:继续熟悉数组的使用;继续熟悉函数的使用了解程序算法设计及N-S流程图;综合使用函数和数组完成设计任务一分析程序算法图2算法分析图先来分析要解决的问题,如图2程序算法分析如下:1.整个程序大致可以分为两个主要部分:输入年份;打印该年的日历,如图2①所示。2.打印日历时,为了清楚的知道打印的是哪一年的日历,先打印年份,接着从1月~12月,分别打印个月份的名称(英文缩写),然后打印星期的名称(英文
2、缩写),最后在打印当月的日历,如图2②所示。3.要打印某月的日历,首先必须生成当月日历,然后在打印,如图2③所示。4.生成每个月的日历,需要知道当月有多少天,当月每一天是星期几,然后生成当月日历并保存,如图2④所示。5.要知道每月有多少天是比较容易的,除了2月份外,其它月份的天数都是确定的,关键就是确定2月份有几天,如图2⑤所示。6.如果当年是闰年,则2月份有29天,否则为28天。如图2⑥所示。7.要想确定当月每一天是星期几,需要知道当年第一天是星期几,然后类推,每7天一个周期,如图2⑦所示。1.经过以上的4~7步,可以生成日历,然后设计存储格式,保
3、存日历。2.设计好输出格式,打印已生成的日历即可,如图2⑧所示。将图2加以综合和细化,最终可以得到整个程序的N-S流程图,如图3所示。图3算法分析N-S流程图二、按功能划分函数经过上面的分析,发现在这个程序设计中有几个关键部分:①确定每月有多少天,关键是确定当年是否为闰年。②确定每天是星期几,关键是确定当年1月1日是星期几。③设计数据的存储格式和打印格式。对于较复杂的程序,可以把功能分解,每个小功能用一个函数实现,使程序的总体结构更加清晰。在这个程序中,应考虑使用以下4个函数。函数1:intleapyear(intyear),判断year年是否是闰年
4、。函数2:voidprint2(intmonth,intt),按月打印日历。函数3:voidcalendar(intyear),按月生成日历。函数4:main()函数。任务二确定每个月的天数除了闰年外,每个月有多少天是确定的,所以首相确定非闰年每个月有多少天,然后判断当年是否是闰年,就可以确定当年的2月份有几天。一、确定非闰年每年有多少天可以使用一维整型数组monthday[]来存放每个月的天数,代码如下:intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};数组长度定义为13,是因为这样定义
5、赋值后“monthday[1]=31”,表示1月份的天数是31天,比较符合我们的日常习惯,元素monthday[0]没有使用。一、确定当年2月有多少天如果是闰年,则2月份29天,闰年的规定:凡是年份能够被4整除、且不能被100整除的是闰年;凡是年份能被400整除的也是闰年;除此以外的年份都不是闰年。程序段如下:if((year%4==0)&&(year%100!=0)
6、
7、(year%400==0))monthday[2]=29;为了提高程序的可读性,实现程序的模块化设计,对闰年的判断设计成函数leapyear();闰年判断函数intleapyear(
8、intyear){if((year%4==0)&&(year%100!=0)
9、
10、(year%400==0))return1;elsereturn0;}任务三确定当年的每天是星期几确定每天是星期几,关键是确定当年的1月1日是星期几。在公元日历的编排中,公元元年几0001年1月1日是星期一,对于输入的年号year,year年的1月1日是星期几可以用下列公式计算:todayweek=[year+(year-1)/4-(year-1)/100+(year-1)/400]%7注:此算法可以见另一附件“计算每年的第一天星期几”文档。当年第一天是星期几判断出来了,
11、就可以一次推算以后的日子是星期几。任务四设计数据存储格式,生成各月日历必须为所有需要存储的数据设计存储结构,有了存储结构就可以存储生成的每个月的日历。一、设计数据的存储格式①使用一维整型数组monthday存放每个月的天数。intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};②使用二维字符数据monthname存放每个月的英文名称。charmonthname[13][6]={“”,”JAN”,”FEB”,”MAR”,”APR”,”MAY”,”JUNE”,”JULY”,“AUG”,”SEP”,
12、”OCT”,”NOV”,”DEC”};①使用二维数字符数组weekday存放一周每一天的星期的英文名称。ch