- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言综合炼习打印日历的教程附完整源程序
综合练习 打印日历
练习的功能是:由用户输入一个年后,然后就可以分月输出当年的年历。例如输入2010,则输出2010年的年历。如图,图中显示的年历的一部分:
学习目标:继续熟悉数组的使用;
继续熟悉函数的使用
了解程序算法设计及N-S流程图;
综合使用函数和数组完成设计
任务一 分析程序算法
图2 算法分析图
先来分析要解决的问题,如图2
程序算法分析如下:
整个程序大致可以分为两个主要部分:输入年份;打印该年的日历,如图2①所示。
打印日历时,为了清楚的知道打印的是哪一年的日历,先打印年份,接着从1月~12月,分别打印个月份的名称(英文缩写),然后打印星期的名称(英文缩写),最后在打印当月的日历,如图2②所示。
要打印某月的日历,首先必须生成当月日历,然后在打印,如图2③所示。
生成每个月的日历,需要知道当月有多少天,当月每一天是星期几,然后生成当月日历并保存,如图2④所示。
要知道每月有多少天是比较容易的,除了2月份外,其它月份的天数都是确定的,关键就是确定2月份有几天,如图2⑤所示。
如果当年是闰年,则2月份有29天,否则为28天。如图2⑥所示。
要想确定当月每一天是星期几,需要知道当年第一天是星期几,然后类推,每7天一个周期,如图2⑦所示。
经过以上的4~7步,可以生成日历,然后设计存储格式,保存日历。
设计好输出格式,打印已生成的日历即可,如图2⑧所示。
将图2加以综合和细化,最终可以得到整个程序的N-S流程图,如图3所示。
图3 算法分析N-S流程图
二、按功能划分函数
经过上面的分析,发现在这个程序设计中有几个关键部分:
确定每月有多少天,关键是确定当年是否为闰年。
确定每天是星期几,关键是确定当年1月1日是星期几。
设计数据的存储格式和打印格式。
对于较复杂的程序,可以把功能分解,每个小功能用一个函数实现,使程序的总体结构更加清晰。
在这个程序中,应考虑使用以下4个函数。
函数1: int leapyear(int year),判断year年是否是闰年。
函数2: void print2(int month,int t),按月打印日历。
函数3: void calendar(int year),按月生成日历。
函数4:main()函数。
任务二 确定每个月的天数
除了闰年外,每个月有多少天是确定的,所以首相确定非闰年每个月有多少天,然后判断当年是否是闰年,就可以确定当年的2月份有几天。
确定非闰年每年有多少天
可以使用一维整型数组monthday[]来存放每个月的天数,代码如下:
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
数组长度定义为13,是因为这样定义赋值后“monthday[1]=31”,表示1月份的天数是31天,比较符合我们的日常习惯,元素monthday[0]没有使用。
确定当年2月有多少天
如果是闰年,则2月份29天,闰年的规定:凡是年份能够被4整除、且不能被100整除的是闰年;凡是年份能被400整除的也是闰年;除此以外的年份都不是闰年。 ||(year%400==0)) monthday[2]=29;
为了提高程序的可读性,实现程序的模块化设计,对闰年的判断设计成函数leapyear();
闰年判断函数
int leapyear(int year)
{
if((year%4==0)(year%100!=0) ||(year%400==0))
return 1;
else
return 0;
}
任务三 确定当年的每天是星期几
确定每天是星期几,关键是确定当年的1月1日是星期几。
在公元日历的编排中,公元元年几0001年1月1日是星期一,对于输入的年号year,year年的1月1日是星期几可以用下列公式计算:
todayweek=[year+(year-1)/4 - (year-1)/100 + (year-1)/400]%7 注:此算法可以见另一附件“计算每年的第一天星期几”文档。
当年第一天是星期几判断出来了,就可以一次推算以后的日子是星期几。
任务四 设计数据存储格式,生成各月日历
必须为所有需要存储的数据设计存储结构,有了存储结构就可以存储生成的每个月的日历。
设计数据的存储格式
使用一维整型数组monthday存放每个月的天数。
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
使用二维字符数据monthname存放每个月的英文名称。
char monthna
文档评论(0)