《C 语言课程设计》
课程设计报告
题 目
学 号
姓 名
年级专业
指导教师
《打印月历》
110803113
朱道路
2011 级通信工程
蔡继盛
完成日期
2012
年 6 月 8 日
安徽师范大学物理与电子信息学院
College of Physics and Electronic Information, Anhui Normal University
一、问题描述及基本要求:
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
闰
年
判
断
是
否
为
year%4==0&&year%100!=0
)||(year%400==0
(计算每月
第一天的
星期)int
DaySearch
(判断二月的天数)
Int month_day
(按星期一道星期日排
列)int daysearch
按月历格
式输出 int
PrintYearm
onth
输出结果:
打印月历
五、程序清单:
#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
if(j%7==0)
printf("\n");
}
return 0;
}
void main()
{
}
int year,month;
printf("请输入年:");
scanf("%d",&year);
printf("请输入月:");
scanf("%d",&month);
printf("日历---朱道路&&吴琦隆制作\n");
printf("_____________________________________\n");
PrintYearmonth(year,month);
六、测试数据及程序运行结果