数学之家
标题:
【建站一周年】闰年知识普及
[打印本页]
作者:
castelu
时间:
2009-2-3 13:00
标题:
【建站一周年】闰年知识普及
数学之家成立时间:
闰年2008年2月29日
每4年一次纪念日,意义非凡!
闰年知识普及:
含义:闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份,即有闰日的年份
为闰年
公历闰年判定遵循的规律为: 四年一闰,百年不闰,四百年再闰.
公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)
1。能被4整除而不能被100整除。(如2100年就不是闰年)
2。能被400整除。
(能被100整除但是也能能被400整除的,是闰年.)
详情如下:
闰年
(
leap year
),指公历(格里历)或夏历中有闰日的年份,以及在中国旧历农历中有闰月的年份。
地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(
tropical year
)。公历的平年只有365日,比回归年短约0.2422日,每四年累积约一天,把这一天加于2月末(2月29日),使当年的历年长度为366日,这一年就为闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。所以规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。闰年的计算,归结起来就是通常说的:
四年一闰;百年不闰,四百年再闰。
由于地球的自转速度逐渐降低,而公转速度则相对更加稳定,所以上述的系统经过更长的周期也会发生微小的误差。据计算,每8000年会有一天的误差,所以英国的天文学家JohnHerschel提议公元4000为平年,以后类推12000年,20000年亦为平年。但此提议从未被正式采纳。原因是到了4000年,地球自转的精确速度并非现在可以预测,所以届时参照真实数据方可做出判断。因此,在长远的将来,微小的调整应该不是由预定的系统决定,而是随时不定性的。
需要注意的是,现在的公历是根据罗马人的"儒略历"改编而得。
由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日。并开始了新闰年规定。此后,平均每年长度为365.2425天,约4年出现1天的偏差。
夏历的平年只有354日,比12个朔望月短0.3671日,为使每月初一与月朔相合,规定每30年中有11年的年底增加1日,这一年的历年有355日,即为闰年。中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。
用程序算出2000年到4000年之间的所有闰年:
int leapyear(int year) //判断某年是否闰年 闰年返回1,平年返回0
{
if ((year%400==0) || (year%100!=0) && (year%4==0))
return 1;
else
return 0;
}
void main()
{
int i=2000;
for(i;i<=4000;i++)
{
if(leapyear(i) == 1)
printf("%d,",i);
}
}
2000,2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048,2052,2056,2060,
2064,2068,2072,2076,2080,2084,2088,2092,2096,2104,2108,2112,2116,2120,2124,2128,
2132,2136,2140,2144,2148,2152,2156,2160,2164,2168,2172,2176,2180,2184,2188,2192,
2196,2204,2208,2212,2216,2220,2224,2228,2232,2236,2240,2244,2248,2252,2256,2260,
2264,2268,2272,2276,2280,2284,2288,2292,2296,2304,2308,2312,2316,2320,2324,2328,
2332,2336,2340,2344,2348,2352,2356,2360,2364,2368,2372,2376,2380,2384,2388,2392,
2396,2400,2404,2408,2412,2416,2420,2424,2428,2432,2436,2440,2444,2448,2452,2456,
2460,2464,2468,2472,2476,2480,2484,2488,2492,2496,2504,2508,2512,2516,2520,2524,
2528,2532,2536,2540,2544,2548,2552,2556,2560,2564,2568,2572,2576,2580,2584,2588,
2592,2596,2604,2608,2612,2616,2620,2624,2628,2632,2636,2640,2644,2648,2652,2656,
2660,2664,2668,2672,2676,2680,2684,2688,2692,2696,2704,2708,2712,2716,2720,2724,
2728,2732,2736,2740,2744,2748,2752,2756,2760,2764,2768,2772,2776,2780,2784,2788,
2792,2796,2800,2804,2808,2812,2816,2820,2824,2828,2832,2836,2840,2844,2848,2852,
2856,2860,2864,2868,2872,2876,2880,2884,2888,2892,2896,2904,2908,2912,2916,2920,
2924,2928,2932,2936,2940,2944,2948,2952,2956,2960,2964,2968,2972,2976,2980,2984,
2988,2992,2996,3004,3008,3012,3016,3020,3024,3028,3032,3036,3040,3044,3048,3052,
3056,3060,3064,3068,3072,3076,3080,3084,3088,3092,3096,3104,3108,3112,3116,3120,
3124,3128,3132,3136,3140,3144,3148,3152,3156,3160,3164,3168,3172,3176,3180,3184,
3188,3192,3196,3200,3204,3208,3212,3216,3220,3224,3228,3232,3236,3240,3244,3248,
3252,3256,3260,3264,3268,3272,3276,3280,3284,3288,3292,3296,3304,3308,3312,3316,
3320,3324,3328,3332,3336,3340,3344,3348,3352,3356,3360,3364,3368,3372,3376,3380,
3384,3388,3392,3396,3404,3408,3412,3416,3420,3424,3428,3432,3436,3440,3444,3448,
3452,3456,3460,3464,3468,3472,3476,3480,3484,3488,3492,3496,3504,3508,3512,3516,
3520,3524,3528,3532,3536,3540,3544,3548,3552,3556,3560,3564,3568,3572,3576,3580,
3584,3588,3592,3596,3600,3604,3608,3612,3616,3620,3624,3628,3632,3636,3640,3644,
3648,3652,3656,3660,3664,3668,3672,3676,3680,3684,3688,3692,3696,3704,3708,3712,
3716,3720,3724,3728,3732,3736,3740,3744,3748,3752,3756,3760,3764,3768,3772,3776,
3780,3784,3788,3792,3796,3804,3808,3812,3816,3820,3824,3828,3832,3836,3840,3844,
3848,3852,3856,3860,3864,3868,3872,3876,3880,3884,3888,3892,3896,3904,3908,3912,
3916,3920,3924,3928,3932,3936,3940,3944,3948,3952,3956,3960,3964,3968,3972,3976,
3980,3984,3988,3992,3996,4000,
使用非过程化语言来测算闰年
import java.util.*;
public class LeapYears {
public static void main (String[ ] args) {
Scanner input = new Scanner (System.in);
System.out.println ("输入年份: ");
int year = input.nextInt ();
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { //输出某年是闰年
System.out.println (year + "年是闰年");
} else { //输出某年是平年
System.out.println (year + "年是平年");
}
}
}
欢迎光临 数学之家 (http://www.2math.cn/)
Powered by Discuz! X3.1