用c语言显示11月份月历,C语言课程设计《打印月历》(完整版)(11页)-原创力文档...

《C语言课程设计》

课程设计报告

题 目

《打印月历》

学 号

姓 名

年级专业

指导教师

完成日期

安徽师范大学物理与电子信息学院

College of Physics and Electronic Information, Anhui

一、问题描述及基本要求:

1)年份和月份由键盘输入,打印的月历按星期一到星期日排列;

2)注意大小月,闰年等问题。

二、程序分析和具体设计

设计难点:

1.程序难点在于判断每月的第一日为星期几,但根据蔡勒公式,可以很容易地有年月日推断出星1)s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;

2)return ((int)s%7);

3)year:要查询的年份;

4)s:从该年的一月一日起到该天的天数;

5)s%7:得出的星期数,s%7==0表示星期天;

在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出;

2.闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年;大小月的判断,闰年的第二月为29天,平年的第二月为30天;

3.判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。

设计思路

1)第一步:判断输入是否合法;int dayExame(int year,int month,int day)

2)第二步:判断是否为闰年;int IsLeapYear(int year)

3)第三步:判断二月份天数;int month_day(int year,int month)

4)第四步:计算每月第一天的星期;int DaySearch(int year,int month,int day)

5)第五步:按月历格式输出;int PrintYearmonth(int year,int month)

6)第六步:整合;void main()

日期查询输入日期三、结构图:

日期查询

输入日期

月历显示闰年判断,按星期排列

月历显示

闰年判断,按星期排列

输入 int dayExmae四、流程图

输入 int dayExmae

判断是否为闰年

判断是否为闰年

year%4==0&&year%100!=0)||(year%400==0

year%4==0&&year%100!=0)||(year%400==0

(

(计算每月第一天的星期)int DaySearch

(

(判断二月的天数)

Int month_day

(按星期一道星期日

(按星期一道星期日排列)int daysearch

按月历格式输

按月历格式输出int PrintYearmonth

输出结果

输出结果:

打印月历

五、程序清单:

#include

int dayExame(int year,int month,int day)

{

if(year<0||month<1||month>12)

return 0;

else return 1;

}

int LeapYear(int year)

{

if((year%4==0&&year%100!=0)||(year%400==0))

return 1;

else

return 0;

}

int month_day(int year,int month)

{

int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};

if( LeapYear(year)&&month==2)

return 29;

else

return(mon_day[month-1]);

}

int DaySearch(int year,int month,int day)

{

int c=0;

float s;

int m;

for(m=1;m

c=c+month_day(year,m);

c=c+day;

s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;

return ((int)s%7);

}

int PrintYearmonth(int year,int month)

{

int tem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值