万年历相关资料
发布时间:2015-06-12 19:22:30
发布时间:2015-06-12 19:22:30
一、基本思路: 找到所求年月日的代码,相加后除以7,余数是几即为星期几。如今天是2007年6月25日,年月日的代码分别是1,3,25,相加得29,29÷7=4……1,即今天为星期一。因此,这种算法的关键就转变成了寻找“年月日的代码”了。 二、找代码的方法: 1、年份的代码:最复杂一些。 看这一年的第一天是星期几就为几,如2005年1月1日是星期六就为6,2006年1月1日是星期日就为7,2007年1月1日是星期一就为1……如果这一年是闰年,3月以后的代码需要加1,如2008年1月1日是星期二,1月到2月的年份代码为2,3月到12月的年份代码就为3。 还可以根据周期进行推算,因为年份的代码是每7个数字为一个周期。 下列一组年份的代码可供记忆及推算: 2007年——1 2008年1月和2月——2 2008年3月起——3 2009年——4 2010年——5 2011年——6 2012年1月和2月——7 2012年3月起——1 2013年——2 2、月份的代码:首先要熟记歌谣,“鹿儿来,五岭山,虎一嘶,鹿儿死”,翻译成数字就是—— 6 2 2 5 0 3 5 1 4 6 2 4 每个月份对应一个数字,即一月对6,二月对2,三月对2,依此类推。 3、日期的代码:最简单,原来是几号,代码即为几。 三、再举两个例子加以说明: 1、2007年7月1日: 年月日的代码相加=1+5+1=7,7÷7=1,没有余数,则这一天是星期日。 2、奥运会开幕式:2008年8月8日 年月日的代码相加=3+1+8=12,12÷7=1……5,这一天是星期五。 如果帮到您的话,可以好评吗?谢谢了!!!(右上角采纳)
(按一回归年365天5小时48分45.5秒)
①、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
③、对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)(此按一回归年365天5h48'45.5''计算)。
此外,如依照现有太阳年的长度与上述闰年规则,每8000年又约差一日,因此约翰·赫歇尔提议每逢4000的倍数不闰,如西元4000年。但距此一年份来临尚有约二千年之遥,因此还未曾真正纳入规则或实施过。又由于地球公转速率的不稳定与众多影响因素,届时是否需要纳入此规则仍有疑问。
原因:若一年按365天5h48'46''(此时86400年也是闰年)计算,一年日数必须是整数,不便将零时数计入,所以取365天为一年,则余5时48分46秒 ,积至4年约满一 日,所以4年一“闰日”,谓之“闰年”,无“闰日”之年为平年,即平年365天,闰年366天。但到4年之时,仅有23时15分4秒闰一日,欠缺44分56秒;积至100年(25闰)时就欠缺18时43分20秒,约合3 / 4日,所以满100年不闰;此时又余5时16分40秒,积至400年余21时6分40秒又闰;又欠缺2时53分20秒,积至3200年计欠缺23时6分40秒,所以满3200年不闰;此时又余53分20秒,积至86400年刚好24 时又一闰,这是不余不欠,需重计算,所以按阳历计算就有上面的闰年规则。
按一回归年365天5h48'45.5''计算:3200年多出16000小时153600分145600秒 =18600小时26分40秒,共32*24+8=136个闰年=776*24=18624小时 >18600小时,所以只能算到775个闰年,3200不是闰年,于是775*24=18600,多出了26分40秒怎么办需要多少个周期弥补?答案是54个周期,为172800年,因为172800/3200=54个周期 54*26分40秒=1404分2160秒=24小时。[2]
公历天数编辑地球绕太阳一周实际为365.2422天(回归年),按一年365天计算,每年少0.2422天,因此,400年中需置97个闰年。闰年在2月末加上一天全年366天。这样经过3333年才有一天的误差。
判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰。
公历闰年的精确计算方法(按一回归年365天5小时48分45.5秒):
①、普通年能被4整除而不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)
③、对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
又若按照 (按一回归年365天5小时48分46秒)公元前闰年规则如下:
①、普通年能被4整除而不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)
③、对于数值很大的年份能整除3200,但同时又能整除86400则又是闰年.(如86400年是闰年)
原因:一年按365天5h48'46''计算,一年日数必须是整数,不便将零时数计入,所以取365天为一年,则余5时48分46秒 ,积至4年约满一 日,所以4年一“闰日”,谓之“闰年”,无“闰日”之年为平年,即平年365天,闰年366天。但到4年之时,仅有23时15分4秒闰一日,欠缺44分56秒;积至100年(25闰)时就欠缺18时43分20秒,约合3 / 4日,所以满100年不闰;此时又余5时16分40秒,积至400年余21时6分40秒又闰;又欠缺2时53分20秒,积至3200年计欠缺23时6分40秒,所以满3200年不闰;此时又余53分20秒,积至86400年刚好24 时又一闰,这是不余不欠,需重计算,所以按阳历计算就有上面的闰年规则。
按一回归年365天5h48'45.5''计算:3200年多出16000小时153600分145600秒 =18600小时26分40秒,共32*24+8=136个闰年=776*24=18624小时 >18600小时,所以只能算到775个闰年,3200不是闰年,于是775*24=18600,多出了26分40秒怎么办需要多少个周期弥补?答案是54个周期,为172800年,因为172800/3200=54个周期 54*26分40秒=1404分2160秒=24小时。
3公元前闰年规则编辑1,非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
2,整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
4年的种类编辑年有三种:地球绕日一周,历三百六十五日六小时九分九秒,谓之“恒星年”;太阳过近地点循黄道东行一周,复过近地点,历三百六十五日六时十三分四十八秒,谓之“近点年”;太阳过春分点,循黄道东行一周,复过春分点,历三百六十五日五小时四十八分四十六秒,谓之“回归年”,亦称“岁实”。
因二分点(春分点秋分点)每年沿黄道向西逆行约五十秒,故回归年较恒星年之时间为短,相差二十分二十三秒,谓之“岁差”。 此三种年之时间不同,欲使每年之节气寒暑不变,故取回归年为制历之年。
对于回归年之时间,有记住之必要,为便于记忆,编一歌诀如下:
地球绕日一周年,要知时间有多少?三六五日加五小时四十八分四六秒。
5闰年编辑由一月一日至次年一月一日谓之一年,年长本应与岁实(回归年)相等,然而一年之日数,必须是整数,不便将奇零之时数计入,故以365日为一年,每年余5小时48分46秒,至四年约满一日,故每四年增加一日,为闰日,谓之“闰年”。
无闰日这年,谓之“平年”,平年365日,闰年366日。 但四年之闰余,仅23时15分4秒,今闰一日,未免过多,超过之44分56秒,积至二十五闰,为17时58分24秒,约合一日之3/4,故每满百年废一闰,至第400年又不废。如是每四年置一闰,每400年减三闰,计超过2小时53分20秒,须八个400年后,即3200年后,始补足此一日之差。
闰日加在二月里,所以平常年份每年365天,二月为28天,闰年为366天,二月为29天。
闰年的计算方法
①、普通年能被4整除的为闰年。(如2004年就是闰年,1901年不是闰年)
②、世纪年能被400整除的为闰年。而3200年的倍数不是闰年。86400年的倍数又是闰年。(如2000年是闰年。3200年、6400年、……年不是闰年。86400年、172800年又是闰年)
③128年废一闰法。即每128年的倍数不闰。需86400年再闰。
纪元是从传说的耶稣诞生那年算起。 公历每月有月大、月小和月平的说法,月大为31天,月小为30天,月平只有2月,为28天(闰年29天)。
公历一年中每月天数
C语言编程序实现如下功能:输入任意一个日期的年、月、日的值,求出是星期几并输出。
2010-04-19 21:41 liupan1215 | 分类:C/C++ | 浏览4528次
编程序实现如下功能:输入任意一个日期的年、月、日的值,求出是星期几并输出。 分享到:
2010-04-22 17:38 提问者采纳
#include
void main ()
{
int y,m,d,c,s,w;
printf("请输入8位年月日,以空格隔开:");
scanf("%d%d%d",&y,&m,&d);
if (m==1) c=d;
else if (m==2) c=31+d;
else if (m==3) c=31+28+d;
else if (m==4) c=31+28+31+d;
else if (m==5) c=31+28+31+30+d;
else if (m==6) c=31+28+31+30+31+d;
else if (m==7) c=31+28+31+30+31+30+d;
else if (m==8) c=31+28+31+30+31+30+31+d;
else if (m==9) c=31+28+31+30+31+30+31+31+d;
else if (m==10) c=31+28+31+30+31+30+31+31+30+d;
else if (m==11) c=31+28+31+30+31+30+31+31+30+31+d;
else if (m==12) c=31+28+31+30+31+30+31+31+30+31+30+d;
if (m>2)
{if (y%100==0) {if (y%400==0) c=c+1;}
else if (y%4==0) c=c+1;
}
s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c;
w=s%7;
switch (w)
{ case 0: printf("星期日");break;
case 1: printf("星期一");break;
case 2: printf("星期二");break;
case 3: printf("星期三");break;
case 4: printf("星期四");break;
case 5: printf("星期五");break;
case 6: printf("星期六");break;
printf("\n"); }}