本文目錄一覽:
- 1、c語言中關於農曆陽曆轉換問題 excess elements in char array initializer
- 2、請問誰有陽曆陰曆的轉換演算法,用C語言編程的,謝謝
- 3、誰有將陽曆轉換成陰曆的C語言程序代碼啊
- 4、用C語言怎麼將公曆日期轉化為農曆日期?
- 5、萬年曆的c語言程序代碼包括節假日農曆,農曆轉公曆,公曆農曆查詢某
c語言中關於農曆陽曆轉換問題 excess elements in char array initializer
excess elements in char array initializer 的意思是:在char數組初始化時,設置了多餘的元素。如:
const char ChDay[] = { //這裡定義的是一個一維字元數組,並進行初始化,一維數組的元素只能是單個的字元,而下面的數據卻是字元串,所以,在編譯時會報錯誤。
“”,”初一”,”初二”,”初三”,”初四”,”初五”,
“初六”,”初七”,”初八”,”初九”,”初十”,
“十一”,”十二”,”十三”,”十四”,”十五”,
“十六”,”十七”,”十八”,”十九”,”二十”,
“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,
“廿六”,”廿七”,”廿八”,”廿九”,”三十”
};
正確的代碼應該為:
const char * ChDay[] = { //定義一個字元串數組(字元指針數組),其元素為字元串( 字元指針 )
“”,”初一”,”初二”,”初三”,”初四”,”初五”,
“初六”,”初七”,”初八”,”初九”,”初十”,
“十一”,”十二”,”十三”,”十四”,”十五”,
“十六”,”十七”,”十八”,”十九”,”二十”,
“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,
“廿六”,”廿七”,”廿八”,”廿九”,”三十”
};
或,定義成二維數組,因一個漢字最多佔三個位元組,初始化數據中,最長的只有兩個漢字,所以,可以進行如下定義:
const char ChDay[][7] = { //列寬最大為7(兩個漢字加一個字元串結束符)
“”,”初一”,”初二”,”初三”,”初四”,”初五”,
“初六”,”初七”,”初八”,”初九”,”初十”,
“十一”,”十二”,”十三”,”十四”,”十五”,
“十六”,”十七”,”十八”,”十九”,”二十”,
“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,
“廿六”,”廿七”,”廿八”,”廿九”,”三十”
};
請問誰有陽曆陰曆的轉換演算法,用C語言編程的,謝謝
Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate
Private Sub Form_Load()
‘獲取當前系統時間
curTime = Now()
‘星期名
WeekName(0) = ” * “
WeekName(1) = “星期日”
WeekName(2) = “星期一”
WeekName(3) = “星期二”
WeekName(4) = “星期三”
WeekName(5) = “星期四”
WeekName(6) = “星期五”
WeekName(7) = “星期六”
‘天干名稱
TianGan(0) = “甲”
TianGan(1) = “乙”
TianGan(2) = “丙”
TianGan(3) = “丁”
TianGan(4) = “戊”
TianGan(5) = “己”
TianGan(6) = “庚”
TianGan(7) = “辛”
TianGan(8) = “壬”
TianGan(9) = “癸”
‘地支名稱
DiZhi(0) = “子”
DiZhi(1) = “丑”
DiZhi(2) = “寅”
DiZhi(3) = “卯”
DiZhi(4) = “辰”
DiZhi(5) = “巳”
DiZhi(6) = “午”
DiZhi(7) = “未”
DiZhi(8) = “申”
DiZhi(9) = “酉”
DiZhi(10) = “戌”
DiZhi(11) = “亥”
‘屬相名稱
ShuXiang(0) = “鼠”
ShuXiang(1) = “牛”
ShuXiang(2) = “虎”
ShuXiang(3) = “兔”
ShuXiang(4) = “龍”
ShuXiang(5) = “蛇”
ShuXiang(6) = “馬”
ShuXiang(7) = “羊”
ShuXiang(8) = “猴” ;
ShuXiang(9) = “雞”
ShuXiang(10) = “狗”
ShuXiang(11) = “豬”
‘農曆日期名
DayName(0) = “*”
DayName(1) = “初一”
DayName(2) = “初二”
DayName(3) = “初三”
DayName(4) = “初四”
DayName(5) = “初五”
DayName(6) = “初六”
DayName(7) = “初七”
DayName(8) = “初八”
DayName(9) = “初九”
DayName(10) = “初十”
DayName(11) = “十?quot;”
DayName(12) = “十二”
DayName(13) = “十三”
DayName(14) = “十四”
DayName(15) = “十五”
DayName(16) = “十六”
DayName(17) = “十七”
DayName(18) = “十八”
DayName(19) = “十九”
DayName(20) = “二十”
DayName(21) = “廿一”
DayName(22) = “廿二”
DayName(23) = “廿三”
DayName(24) = “廿四”
DayName(25) = “廿五”
DayName(26) = “廿六”
DayName(27) = “廿七”
DayName(28) = “廿八”
DayName(29) = “廿九”
DayName(30) = “三十”
‘農曆月份名
MonName(0) = “*”
MonName(1) = “正”
MonName(2) = “二”
MonName(3) = “三”
MonName(4) = “四”
MonName(5) = “五”
MonName(6) = “六”
MonName(7) = “七”
MonName(8) = “八”
MonName(9) = “九”
MonName(10) = “十”
MonName(11) = “十一”
MonName(12) = “臘”
‘公曆每月前面的天數
MonthAdd(0) = 0
MonthAdd(1) = 31
MonthAdd(2) = 59
MonthAdd(3) = 90
MonthAdd(4) = 120
MonthAdd(5) = 151
MonthAdd(6) = 181
MonthAdd(7) = 212
MonthAdd(8) = 243
MonthAdd(9) = 273
MonthAdd(10) = 304
MonthAdd(11) = 334
‘農曆數據
NongliData(0) = 2635
NongliData(1) = 333387
NongliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NongliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NongliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NongliData(18) = 3221
NongliData(19) = 3402
NongliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NongliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NongliData(30) = 2901
NongliData(31) = 330421
NongliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NongliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 461653
NongliData(48) = 1386
NongliData(49) = 2413
NongliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NongliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
‘生成當前公曆年、月、日 == GongliStr
curYear = Year(curTime)
curMonth = Month(curTime)
curDay = Day(curTime)
GongliStr = curYear “年”
If (curMonth 10) Then
GongliStr = GongliStr “0” curMonth “月”
Else
GongliStr = GongliStr curMonth “月”
End If
If (curDay 10) Then
GongliStr = GongliStr “0” curDay “日”
Else
GongliStr = GongliStr curDay “日”
End If
‘生成當前公曆星期 == WeekdayStr
curWeekday = Weekday(curTime)
WeekdayStr = WeekName(curWeekday)
‘計算到初始時間1921年2月8日的天數:1921-2-8(正月初一)
TheDate = (curYear – 1921) * 365 + Int((curYear – 1921) / 4) + curDay + MonthAdd(curMonth – 1) – 38
If ((curYear Mod 4) = 0 And curMonth 2) Then
TheDate = TheDate + 1
End If
‘計算農曆天干、地支、月、日
isEnd = 0
m = 0
Do
If (NongliData(m) 4095) Then
k = 11
Else
k = 12
End If
n = k
Do
If (n 0) Then
Exit Do
End If
‘獲取NongliData(m)的第n個二進位位的值
bit = NongliData(m)
For i = 1 To n Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
If (TheDate = 29 + bit) Then
isEnd = 1
Exit Do
End If
TheDate = TheDate – 29 – bit
n = n – 1
Loop
If (isEnd = 1) Then
Exit Do
End If
m = m + 1
Loop
curYear = 1921 + m
curMonth = k – n + 1
curDay = TheDate
If (k = 12) Then
If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
curMonth = 1 – curMonth
ElseIf (curMonth (Int(NongliData(m) / 65536) + 1)) Then
curMonth = curMonth – 1
End If
End If
‘生成農曆天干、地支、屬相 == NongliStr
NongliStr = “農曆” TianGan(((curYear – 4) Mod 60) Mod 10) DiZhi(((curYear – 4) Mod 60) Mod 12) “年”
NongliStr = NongliStr “(” ShuXiang(((curYear – 4) Mod 60) Mod 12) “)”
‘生成農曆月、日 == NongliDayStr
If (curMonth 1) Then
NongliDayStr = “閏” MonName(-1 * curMonth)
Else
NongliDayStr = MonName(curMonth)
End If
NongliDayStr = NongliDayStr “月”
NongliDayStr = NongliDayStr DayName(curDay)
MsgBox NongliStr NongliDayStr
End Sub
誰有將陽曆轉換成陰曆的C語言程序代碼啊
我剛好有資源,這是我原創的程序,裡面的數據壓縮方式、轉換、參考點等,都是自行設計的,能夠準確地將公曆轉農曆,將農曆轉公曆,同時還提供一個自行設計的農曆庫,附帶常式,還有農曆信息提取工具,可以自定義年份區間(1600-7000)。
農曆信息提取器生成的頭文件(這裡限於篇幅,只取10年跨度)
/*****************************************************
* 農曆信息(查表方式) *
* 生成時間:2014/12/25 *
*****************************************************/
#ifndef _LUNARDATA_H
#define _LUNARDATA_H
#define START_YEAR 1600 //定義數據起始年份(公曆)
#define END_YEAR 1610 //定義數據終止年份(不包含該年)
short iPreLeapIndex=-1;//起始年份以前的農曆閏月索引,對應iPreMonth中的序號,如果是-1則代表無閏月。
//從起始年份前一年的農曆十月開始,每月初一對應在起始年份中的年內序數,
//序數小於零代表起始年份之前。
short iPreMonth[3]={-44,-15,15};
//每年農曆正月初一的日期在公曆年內的序數(年內序數指定元旦為0)。
unsigned char uLunarNewYearOrdinal[10]={
44,33,22,41,30,48,37,27,46,34 //1600-1609
};
//月份大小數組,從「START_YEAR」的正月到「END_YEAR」前一年的(閏)十二月。
//每年十二或十三個月用兩個位元組表示,最高兩位定為10,後面從正月開始到十二月,包含閏月。月份小的在前,
//1 0 0或1 x x x x x x x x x x x x x
//1 0 12個月為0,13個月為1 從正月到十二月,月份天數29天則為0,月份天數30天則為1。
//注意,如果沒有閏月,月份位為12位,總長度是15位,有閏月,月份位為13位,總長度是16位。
unsigned short LunarMonthDX[10]={
0x4A5D,0x492D,0xB92B,0x4A95,0xB695,0x46AA,0x4AD5,0xAAB5,0x44BA,0x4A5B //1600-1609
};
//閏月數組,用4位表示一個農曆年內的閏月信息,一個位元組表示相鄰兩年。
// x x x x x x x x
// 年份① 年份②
unsigned char LeapMonth[5]={
0x00,0x20,0x90,0x06,0x00 //1600-1609
};
//24節氣數組,一年用12個位元組表示,即每個月用一個位元組(注意:此壓縮演算法適用於公元1600以後的數據)。
//如1901年的節氣為:
// 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
// 6, 21, 4, 19, 6, 21, 5, 21, 6, 22, 6, 22, 8, 23, 8, 24, 8, 24, 8, 24, 8, 23, 8, 22
// 9, 6, 11, 4, 9, 6, 10, 6, 9, 7, 9, 7, 7, 8, 7, 9, 7, 9, 7, 9, 7, 8, 7, 15
//小寒 大寒 立春 雨水 驚蟄 春分 清明 穀雨 立夏 小滿 芒種 夏至 小暑 大暑 立秋 處暑 白露 秋分 寒露 霜降 立冬 小雪 大雪 冬至
//這樣每月兩個節氣對應數據都小於16,每月用一個位元組存放,高位存放第一個節氣數據,低位存放第二個節氣的數據,可得下表:
unsigned char SolarTerms[120]={
0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0x96,0x96, //1600
0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x97,0x96,0x96, //1601
0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97, //1602
0x96,0xA6,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87, //1603
0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0xA6,0x96, //1604
0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96, //1605
0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97, //1606
0x96,0xA5,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87, //1607
0x96,0x96,0x87,0x97,0x87,0x96,0x87,0x96,0x96,0x96,0xA6,0x96, //1608
0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96 //1609
};
//每年數九、入梅、出梅及三伏日期(以該年元旦為基準)。
//公曆年內首個是三九(適用於公元1600年以後)。
//數組中,每一行表示一年,四九、五九……省略,輸在每個九相差9天,同理二九省略,中伏在初伏後10天。分別對應如下(括弧中的已省略):
//三九 (四九 五九 六九 七九 八九 九九) 入梅 出梅 初伏 (中伏) 末伏 一九 (二九),注意:一九就是冬至。
unsigned short ExtermSeason[60]={
8,165,190,199,219,355,7,159,196,193,223,355, //1600-1601
7,164,191,198,218,355,8,159,198,193,223,355, //1602-1603
8,164,193,198,218,355,7,158,199,202,222,355, //1604-1605
7,163,194,197,227,355,8,158,189,202,222,355, //1606-1607
8,163,196,197,227,355,7,167,190,201,221,354 //1608-1609
};
#endif //_LUNARDATA_H
用C語言怎麼將公曆日期轉化為農曆日期?
其實很簡單,你的程序中定義一些數組,保存一些重要參數即可,下面是JAVASCRIPT的,看懂了你就可以用C來寫:
var lunarInfo=new Array(
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
//====================================== 傳回農曆 y年的總天數
function lYearDays(y) {
var i, sum = 348
for(i=0x8000; i0x8; i=1) sum += (lunarInfo[y-1900] i)? 1: 0
return(sum+leapDays(y))
}
//====================================== 傳回農曆 y年閏月的天數
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] 0x10000)? 30: 29)
else return(0)
}
//====================================== 傳回農曆 y年閏哪個月 1-12 , 沒閏傳回 0
function leapMonth(y) {
return(lunarInfo[y-1900] 0xf)
}
//====================================== 傳回農曆 y年m月的總天數
function monthDays(y,m) {
return( (lunarInfo[y-1900] (0x10000m))? 30: 29 )
}
萬年曆的c語言程序代碼包括節假日農曆,農曆轉公曆,公曆農曆查詢某
直接給你整個工程吧,實現了星期計算、公曆轉農曆、農曆轉公曆、節氣查詢。非常不錯的代碼,你要的年份範圍可以自己決定,支持從公元1600年到公元6400年的四千八百年數據。數據經過我精心設計的原創壓縮演算法壓縮,體積非常小,效率很高。
密碼:n51c (之前的不知啥原因被HX了,原創的都會被這樣,鑒於需要的朋友很多,重新更換了鏈接)。
如果需要開發日曆的完整開發包(支持更長年份),可私信。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183706.html