C語(yǔ)言陰陽(yáng)歷算法_第1頁(yè)
C語(yǔ)言陰陽(yáng)歷算法_第2頁(yè)
C語(yǔ)言陰陽(yáng)歷算法_第3頁(yè)
C語(yǔ)言陰陽(yáng)歷算法_第4頁(yè)
C語(yǔ)言陰陽(yáng)歷算法_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C語(yǔ)言陰陽(yáng)歷算法2008-10-25 23:22:11 作者: 來(lái)源:中國(guó)論文下載中心 瀏覽次數(shù):188 文字大小:【大】【中】【小】C語(yǔ)言陰陽(yáng)歷算法 程序?yàn)椋?*prototype: int calconv( struct convdate * );struct convdate int source; =0 則輸入日期為西歷, !=0 則輸入為農(nóng)歷 int solaryear; 輸出或輸入之西歷年份 int solarmonth; 西歷月 int solardate; 西歷日 int lunaryear; 輸出或輸入之農(nóng)歷年份 int lunarmonth; 農(nóng)歷月 int lunarda

2、te; 農(nóng)歷日 int weekday; 該日為星期幾 ( 0=星期日, 1=星期一, . ) int kan; 該日天干 ( 0=甲, 1=乙, ., 9=癸 ) int chih; 該日地支 ( 0=子, 1=丑, ., 11=亥 ) ;呼叫時(shí)須設(shè)定 souce 的值, 若為 0 則為西歷轉(zhuǎn)農(nóng)歷, 否則為農(nóng)歷轉(zhuǎn)西歷. 然後視輸入為西歷或農(nóng)歷來(lái)設(shè)定西歷或農(nóng)歷的年月日. 轉(zhuǎn)換後的年月日會(huì)填入結(jié)構(gòu)中( 農(nóng)歷或西歷 ), 以及該日為星期幾, 天干地支. 若函式的返回值為 0 表示沒(méi)有錯(cuò)誤, 1 為輸入之年份錯(cuò)誤, 2 為輸入之月份錯(cuò)誤, 3 為輸入之日期錯(cuò)誤. 輸入之西歷年須在 1937 - 20

3、31 間輸入之農(nóng)歷年須在 1936 - 2030 間若須擴(kuò)充, 則增加 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、日到農(nóng)歷正月初一的累積日數(shù) */ int intercalation; /* 閏月月份. 0=此年沒(méi)有閏月 */ int baseweekday; /* 此年西歷 1 月 1 日為星期幾再減 1 */ int basekanchih; /* 此年西歷 1 月 1 日之干支序號(hào)減 1 */ int monthdays13; /* 此農(nóng)歷年每月之大小, 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)/* 西歷年每月之日數(shù) */ int solarcal12 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ;/* 西歷年每月之累積日數(shù), 平年與閏年 */ 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; /* 西歷農(nóng)歷轉(zhuǎn)換 */ 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論