c语言课程设计—万年历编程。
一】由于万年历具有以下特点:1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
由于公元1月1日设为星期六,故3月1日为星期三。——注意这个“三”
为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
2。每400年整一闰,或每4年且不为百年的一闰。(原因:
地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。
)所以百年%4=0闰或(年%4=0并且年<>0)闰。
3。每4年(3个平年+1个闰年)共208周+5天——注意这个“5天”
每百年共100*(208周+5天)-1天=5217周+5天——注意这个“5天”(整百年暂设为平年)
每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和。
1天”(4个整百年只有一个闰年)
即400年一轮回!(原来万年历400年前是一家)
二】根据万年历以上特点进行编写:
首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为就定义天数为31天反之如果月份为就输出天数为30天,由。
上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#defineyear(x)(x%4==0&&x%100!=0||x%400==0) ?1:
0当为闰年时可得1加上该程序便可得到每月的天数。具体程序见(五、万年历程序)
再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)
由于其公式为:
某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7
某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7
或某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
闰4百年3月1日星期算法(百年%4=0)
其公式为:某年3月1日星期几=(年+年/4+月星期表+日+2天)%7
例:2023年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三。
2023年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三。
2023年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三。
2023年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四。
2023年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一。
2023年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六。
2023年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六。
平4百年3月1日星期算法(百年%4<>0)
其公式为:某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
例:2023年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:2023年是平年)
2023年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:2023年是平年)
2023年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:2023年是平年)
2023年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五。
2023年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%7=40%7=星期五。
2023年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)%7=90%7=星期六。
2023年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0+3)%7=128%7=星期二。
2023年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一。
2023年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2023年是平年)
2023年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二。
2023年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三。
2023年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四。
2023年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2023年是闰年)
2023年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一。
注:按400年一轮回!(400年前是一家)的说法。
2023年,2023年是一样的;
2023年,2023年是一样的;
2023年,2023年是一样的;
2023年,2023年是一样的。
其中万年某日星期算法。
其公式为:某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
通同星期偏差表。
闰年1月2月3月4月5月6月7月8月9月10月11月12月。
天数312931303130313130313031
星期360351362402
平年1月2月3月4月5月6月7月8月9月10月11月12月。
天数312831303130313130313031
星期400351362402
为对以上的万年历星期的算法是正确的对其进行了以下的计算:⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
2023年元旦1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4
1月表=4(平年)故4+4=1即2023年元旦是星期一。
2023年国庆1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2
10月表=4(平年)故4+2=6即2023年国庆是星期六。
2023年12月31日31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3
12月表=2(平年)故2+3=5即2023年12月31日是星期五⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
2023年元旦1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3
1月表=3(闰年)故3+3->6即2023年元旦是星期六。
2023年春节16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5
2月表=0(平年)故0+5=5即2023年春节是星期五。
2023年12月31日31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2
12月表=2(平年)故2+2=4即2023年12月31日是星期四。
对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写具体编写程序见(五、万年历程序)中。
五、万年历源程序。
#include""
#include""
#include""
#include""
#define year(x) (x%4==0&&x%100!=0||x%400==0) ?1:0 /*判断闰年*/
int numofmonth(int y,int m) /闰年二月29天,平年28天*/
return day;}
int numofyear(int y)
int numofbeforedays(int y,int m,int d)
int numofafterdays(int y,int m,int d)
int isday(int y,int m,int d)
void empty(int n)
void outputcalender(int y,int m,int d)/*计算x年x月x是星期几*/ 光标移到下一行*/
printf("");
long numbtdays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不同日期*/
elsereturn sum;}
int select_mean()
void help()/输出帮助栏的内容*/
main()
else}if(inkeyscan==75)
else}if(inkeyscan==73)}
if(inkeyscan==81)
if(inkeyscan==28)break;}
break; /终止循环*/
case 2:
help();
break;
case 0:
exit(0);
default:
printf("enter error!");
break;}
C语言课程课程设计
课程设计报告。课程名称 c语言程序设计 系别 xxx 专业班级 xxx班 学号 xxxxxxxxxx 姓名 xxx 课程题目 10或100以内儿童加减乘除算术游戏。完成日期 2013.6.14 19 指导老师 xxx 2013年 6月 21日。附件 一 程序模块图。二 源程序。include inc...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。xx xx学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 课程类别 专业基础课。制订时间 2010年11月 计算机科学与技术系制。c语言程序课程设计教学...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。珠海学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 2010级计算机科学与技术系各专业。课程类别 专业基础课。制订时间 2010年11月 计算机科学与技...