C语言阴阳历算法_第1页
C语言阴阳历算法_第2页
C语言阴阳历算法_第3页
C语言阴阳历算法_第4页
C语言阴阳历算法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言阴阳历算法2008-10-25 23:22:11 作者: 来源:中国论文下载中心 浏览次数:188 文字大小:【大】【中】【小】C语言阴阳历算法 程序为:/*prototype: int calconv( struct convdate * );struct convdate int source; =0 则输入日期为西历, !=0 则输入为农历 int solaryear; 输出或输入之西历年份 int solarmonth; 西历月 int solardate; 西历日 int lunaryear; 输出或输入之农历年份 int lunarmonth; 农历月 int lunarda

2、te; 农历日 int weekday; 该日为星期几 ( 0=星期日, 1=星期一, . ) int kan; 该日天干 ( 0=甲, 1=乙, ., 9=癸 ) int chih; 该日地支 ( 0=子, 1=丑, ., 11=亥 ) ;呼叫时须设定 souce 的值, 若为 0 则为西历转农历, 否则为农历转西历. 然後视输入为西历或农历来设定西历或农历的年月日. 转换後的年月日会填入结构中( 农历或西历 ), 以及该日为星期几, 天干地支. 若函式的返回值为 0 表示没有错误, 1 为输入之年份错误, 2 为输入之月份错误, 3 为输入之日期错误. 输入之西历年须在 1937 - 20

3、31 间输入之农历年须在 1936 - 2030 间若须扩充, 则增加 lunarcal*/#define firstyear 1936 /* the first year in lunarcal */struct convdate int source; int solaryear; int solarmonth; int solardate; int lunaryear; int lunarmonth; int lunardate; int weekday; int kan; int chih; ;struct taglunarcal int basedays; /* 到西历 1 月 1

4、日到农历正月初一的累积日数 */ int intercalation; /* 闰月月份. 0=此年没有闰月 */ int baseweekday; /* 此年西历 1 月 1 日为星期几再减 1 */ int basekanchih; /* 此年西历 1 月 1 日之干支序号减 1 */ int monthdays13; /* 此农历年每月之大小, 0=小月(29日), 1=大月(30日)*/ ;struct taglunarcal lunarcal = 23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 , /* 1936 */ 41, 0

5、, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 , 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 , 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 , 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , /* 1940 */ 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 , 45, 0, 3, 49, 1, 0, 1, 1

6、, 0, 1, 0, 1, 0, 1, 0, 1, 0 , 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 , 24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 , /* 1944 */ 43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 , 32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 , 21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1,

7、0, 1, 1 , 40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 , /* 1948 */ 28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , 47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 , 36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 , 26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 , /* 1952 *

8、/ 44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1 , 33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 , 23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 , 42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 , /* 1956 */ 30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 , 48, 0, 2, 13, 1, 1,

9、 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 , 38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 , 27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 , /* 1960 */ 45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 , 35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 , 24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1,

10、0, 1, 1, 1, 0 , 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 , /* 1964 */ 32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 , 20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 , 39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0 , 29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 , /* 19

11、68 */ 47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 , 36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 , 26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1 , 45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 , /* 1972 */ 33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1 , 22, 4, 1, 37,

12、 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 , 41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 , 30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 , /* 1976 */ 48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 , 37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 , 27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1

13、, 0, 1, 1, 0, 1, 0 , 46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 , /* 1980 */ 35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 , 24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 , 43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 , 32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1

14、, /* 1984 */ 50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 , 39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1 , 28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 , 47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 , /* 1988 */ 36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 , 26, 5,

15、 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 , 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 , 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 , /* 1992 */ 22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 , 40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 , 30, 8, 6, 27, 0, 1, 1, 0, 1

16、, 0, 1, 1, 0, 0, 1, 0, 1 , 49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 , /* 1996 */ 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 , 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 , 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 , 35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1,

17、 0, 1 , /* 2000 */ 23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , 42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , 31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 , 21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 , /* 2004 */ 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 , 28

18、, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 , 48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 , 37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 , /* 2008 */ 25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 , 44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 , 33, 0, 5, 51, 1, 0, 1

19、, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 , /* 2012 */ 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 , 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 , 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 , 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0

20、, 1, 1, 0 , /* 2016 */ 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 , 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 , 35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 , 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 , /* 2020 */ 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,

21、1 , 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 , 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 , 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 , /* 2024 */ 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 , 36, 0, 4, 15, 1,

22、 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 , 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 , /* 2028 */ 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 , 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 , 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 ;#define lastyear (firstyear+sizeof(l

23、unarcal)/sizeof(struct taglunarcal)-1)/* 西历年每月之日数 */ int solarcal12 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ;/* 西历年每月之累积日数, 平年与闰年 */ int solardays214 = 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396 , 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 ;/* 求此西历年

24、是否为闰年, 返回 0 为平年, 1 为闰年 */ int getleap( int year ) if ( year % 400 = 0 ) return 1; else if ( year % 100 = 0 ) return 0; else if ( year % 4 = 0 ) return 1; else return 0; /* 西历农历转换 */ int calconv( struct convdate *cd ) int leap, d, sm, y, im, l1, l2, acc, i, lm, kc; if ( cd->source = 0 ) /* solar *

25、/ if ( cd->solaryear <= firstyear | cd->solaryear > lastyear ) return 1; sm = cd->solarmonth - 1; if ( sm < 0 | sm > 11 ) return 2; leap = getleap( cd->solaryear ); if ( sm = 1 ) d = leap + 28; else d = solarcalsm; if ( cd->solardate < 1 | cd->solardate > d ) retu

26、rn 3; y = cd->solaryear - firstyear; acc = solardaysleapsm + cd->solardate; cd->weekday = ( acc + lunarcaly.baseweekday ) % 7; kc = acc + lunarcaly.basekanchih; cd->kan = kc % 10; cd->chih = kc % 12; if ( acc <= lunarcaly.basedays ) y-; cd->lunaryear = cd->solaryear - 1; leap

27、 = getleap( cd->lunaryear ); sm += 12; acc = solardaysleapsm + cd->solardate; else cd->lunaryear = cd->solaryear; l1 = lunarcaly.basedays; for ( i=0; i<13; i+ ) l2 = l1 + lunarcaly.monthdaysi + 29; if ( acc <= l2 ) break; l1 = l2; cd->lunarmonth = i + 1; cd->lunardate = acc -

28、 l1; im = ercalation; if ( im != 0 && cd->lunarmonth > im ) cd->lunarmonth-; if ( cd->lunarmonth = im ) cd->lunarmonth = -im; if ( cd->lunarmonth > 12 ) cd->lunarmonth -= 12; else /* lunar */ if ( cd->lunaryear < firstyear | cd->lunaryear >= lastyear ) return 1; y = cd->lunaryear - firstyear; im = lunarcal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论