c语言课程设计简易年月历计算,c语言课程设计《打印月历》.docx

《打印月历》年月日

《打印月历》

年月日

《C语言课程设计》

课程设计报告

题 目

学 号

姓 名

年级专业

指导教师

完成日期

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

、问题描述及基本要求:

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

列;

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

二、程序分析和具体设计

设计难点:

1.程序难点在于判断每月的第一日为星期几,但根据蔡勒公式,可

以很容易地有年月日推断出星

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

40+c;

return ((int)s%7);

year:要查询的年份;

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

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

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

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

天,平年的第二月为30天;

3?判断日期是否合法,可以先判断年月日是否有小于0的值,月

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

设计思路

第一步:判断输入是否合法;int dayExame(i nt year,i nt

mon th,i nt day)

第二步:判断是否为闰年;int IsLeap Year(i nt year)

第三步:判断二月份天数;int mon th_day(i nt year,i nt mon th)

第四步:计算每月第一天的星期;int DaySearch(i nt year,i nt

mon th,i nt day)

第五步:按月历格式输出;int PrintY earmo nth(i nt year,i nt

mon th)

第六步:整合;void mai n()

三、结构图:

月历显示'闰年判断,按星

月历显示

期排列

<

四、流程图

丿

输出结果:

打印月历

五、程序清单:

#in clude<>

int dayExame(i nt year,i nt mon th,i nt day) {

if(year<0||mo nth<1||mo nth>12) return 0;

else return 1;

int Leap Year(i nt year) {

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

return 1;

else

return 0;

}

int mon th_day(i nt year,i nt mon th)

{

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

if( Leap Year(year)&&mon th==2)

return 29;

else

return(m on _day[m on th-1]);

}

int DaySearch(i nt year,i nt mon th,i nt day)

{

int c=0;

float s;

int m;

for(m=1;m< mon th;m++)

c=c+m on th_day(year,m);

c二c+day;

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

return ((i nt)s%7);

}

int PrintY earm on th(i nt year,i nt mon th)

{

int temp;

int i,j;

printf("\n%d 年%d 月 \n",year,month);

temp二DaySearch(year,m on th,1);

printf("星期一星期二星期三星期四星期五星期六星期天\n");

for(j=1;j< mon th_day(year,m on th)+temp;j++)

{

if(j-temp<0)

printf("");

else

prin tf("%3d",j-temp+1);

prin tf("%3d

",j-temp+1);

if(j%7==0)

prin tf("\n");

}

return 0;

}

void mai n()

{

int year,m on t

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值