《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