
这里是将阴历集成到万年历中的代码. #include #include #include unsigned int LunarCalendarDay;无符号int LunarCalendarTable [199] = {0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/ * 1901-1910 * / 0x6A0D0000B00000B00 ,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E,/ * 1921-1930 * / 0x0D4x0,0x0D4x0,0x0D40,0x0D4A0,0X0 / 0,0D0,0D0,0B0,0D0,0B0,0D0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0,0B0B 0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/ x000A5ABB,0x0A5B,0x06AA48,0x6AD53C,/ * 1951至60年* / 0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x0D0,0x0D0B0,0x0D4B, 0 0x0B5452,0x0B6A47,0x696D3C,0x095B50,/ * 1971 -1980 * / 0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x093,0 * 1991,0x0A651,0x093,01990 -2000 * / 0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/ * 2001-2010 * / 0x0B4A43,0xB50,0xB5,0x55 ,/ * 2011-2020 * / 0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A关于c 编写万年历程序,0x0D5340,0x000x0D0D0D0x0AA05,/ * 2021-2030B4D0x0x0x0x0x0x0x0x4x0x0x0x0x4x0x0x0x4x0x0x0x0x4x0x0x0x4x0x0x0x0x4x0x0x0x4x0x0x0x0x4x0x0x0x4x0x0x0x0x4x0x0x0x0x4x0x0x0x0x4x0x0x0x0x0x56x ,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA,0x06D24E,0x00B0 + 0x0B37,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/ *二〇五一年至2060年* / 0x3C9735,0x0C9649,0x7D4ABD,0x0D4A50,0x55AABA,0x0A0A0D4A4E, 0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38,0x0 A5B4C,0x052B42,0x3A93B6,/ * 2071-2080 * / 0x069349,0x7729BD,0x06AA51,0x0AD546,0x54D64,0xB0A0,0A4A0,0A3E0A,0xB4A0,0A6A0,0A4A0,0A6A0,0A6A0,0A6A,0xA0A,0A0A,0A0A,0A0A,0A0A,0A0A,0A0A,0A0A关于c 编写万年历程序,0A0A,0A0A,0A0A,0A0A,0A0A,0A0A,0A51A 0x0 0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 / * 2091-2099 * /}; int MonthAdd [12] =(0,31,59,90,120,151,181,212,243,273,304,334}; int LunarCalendar(int year,int month,int day){int Spring_NY,Sun_NY StaticDayCount; int index,flag; if((((LunarCalendarTable [year-1901] &0x0060)>> 5)== 1)Spring_NY =(LunarCalendarTable [year-1901]&0x001F)-1; elseSpring_NY =(LunarCalendarTable [year-1901]&0x001F)-1 + 31; Sun_NY = MonthAdd [month-1 ] + day-1; if((!(年%4))&&(月> 2))Sun_NY ++; if(Sun_NY> = Spring_NY){Sun_NY- = Spring_NY;月= 1;索引= 1;标志= 0;如果(((LunarCalendarTable [year-1901]&(0x80000 >>(index-1))))== 0)StaticDayCount = 29; elseStaticDayCount = 30;而(Sun_NY> = StaticDayCount){Sun_NY- = StaticDayCount; index + +; if(month ==(((LunarCalendarTable [year-1901]&0xF00000)>> 20))){flag =〜flag; if(flag == 0)month ++;} elsemonth ++; if(((LunarCalendarTable [ year 1901]&(0x80000 >>(index-1)))== 0)StaticDayCount = 29; elseStaticDayCount = 30;} day = Sun_NY + 1;} else {Spring_NY- = Sun_NY; year-; month = 12;如果((((LunarCalendarTable [year-1901]&0xF00000)>> 20)== 0)索引= 12; elseindex = 13;标志= 0; if((LunarCalendarTable [year-1901]&(0x80000 >>(index-1)))== 0)StaticDayCount = 29; elseStaticDayCount = 30; while(Spring_NY> StaticDayCount)(Spring_NY- = StaticDayCount; index-; if(flag == 0)month-; if(month ==(((LunarCalendarTable [year-1901]&0xF00000)>> 20))flag =〜标志;如果((LunarCalendarTable [year-1901]&(0x80000 >>(index -1))))== 0)StaticDayCount = 29; elseStaticDayCount = 30;)day = StaticDayCount-Spring_NY + 1;)LunarCalendarDay | =天;农历日历日| =(月<< 6);如果(month ==(((LunarCalendarTable [year-1901]&0xF00000)>> 20))返回1; elsereturn 0;} main(int a,char ** date){const char * ChDay [] = {“ *”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6” ,“ 7”,“ 8”,“ 9”,“ 10”,“ 11”,“ 12”,“ 13”,“ 14”,“ 15”,“ 16”,“ 17”,“ 18”,“ 19“,” 20“,” 21“,” 22“,” 23“,” 24“,” 25“,” 26“,” 27“,” 28“,” 29“,” 30“}; const char * ChMonth [] = {“ *”,“一月”,“二月”,“三月”,“四月”,“五月”,“六月”,“七月”,“八月”,“九月”,“十月“, “十一月十二月”}; struct tm *本地;长时间char str [13] =“”; int年= 0,月= 0,天= 0,周; int d,i,dm,dy,m2; char WEEK [9]; if(a == 1){printf(“ \ n错误!您忘记输入要查看的日期\ n”);退出(0);} i = 0; d = -1; while(日期[1] [i]){if(((日期[1] [i] =='/'||日期[1] [i] =='. ')&& d ==-1){d = 0;我++;继续;}如果((date [1] [i] =='/'|| date [1] [i] =='. ')&& d == 0){d = 1;我++;继续;}如果(d ==-1)年=年* 10 +(日期[1] [i]-'0');如果(d = = 0)month = month * 10 +(date [1] [i]-'0');如果(d == 1)天=天* 10 +(日期[1] [i]-'0'); i ++;} if(month <1 || month> 12){printf(“ \ n错误!输入的MONTH无效\ n”);退出(0);}如果(年== 2000){dy = 0; m2 = 1; goto la_100;}如果(年份> 2000)d =(年份1-2000)/ 4-(年份1-2000)/ 100 +(年份1-2000)/ 400 + 1; elsed =(2000年)/ 4(2000年)/ 100 +(2000年)/ 400; dy =(2000年)+ d; if((y的耳朵%4 == 0 && year0!= 0)||(year0 == 0 && year%400 == 0))m2 = 1; elsem2 = 0; la_100: 开关(月)(情况1: dm = 0;月= 31;休息;情况2: dm = 3;月= d == 1?29:28;休息;情况3: dm = 3 + m2;月= 31;休息;情况4: dm = 6 + m2;月= 30;休息;情况5: dm = 1 + m2;月= 31;休息;情况6: dm = 4 + m2;月= 30;休息;情况7: dm = 6 + m2;月= 31;休息;情况8: dm = 2 + m2;月= 31;休息;情况9: dm = 5 + m2;月= 30;休息;情况10: dm = m2;月= 31;休息;情况11: dm = 3 + m2;月= 30;休息;情况12: dm = 5 + m2;月= 31;休息;} if(day <0 || day> month) {printf(“ \ n错误!输入的DAY无效\ n”);退出(0);} week =(dy + dm + day-1 + 6)%7; if(week <0)week + = 7 ; if(day> 0)(switch(week){情况0: strcpy(WEEK,“ SUNDAY”);中断;情况1: strcpy(WEEK,“ MONDAY”);中断;情况2: strcpy(WEEK,“ TUESDAY” “);休息;情况3: strcpy(星期三,“星期三”);休息;情况4: strcpy(星期三,“星期四”);休息;情况5: strcpy(星期三,“星期五”);休息;情况6: strcpy(WEEK,“ SATURDAY”); break;} printf(“ \ n这天是%s \(%d \)\ n \ n好! \ n“,WEEK,week);} #if 0t =时间(N ULL);本地=本地时间(&t);年=本地-> tm_year + 1900;月=本地-> tm_mon + 1;天=本地- > tm_mday; #elseyear = 2013; month = 2; day = 10; #endifprintf(“%dyear%dmonth%dday \ t”,年,月,日); if(LunarCalendar(年,月,日)){strcat (str,“ run”); strcat(str,ChMonth [(LunarCalendarDay&0x3C0)>> 6]);} elsestrcat(str,ChMonth [(LunarCalendarDay&0x3C0)>> 6]); strcat(str,“ yue” ); strcat(str,ChDay [LunarCalendarDay&0x3F]); puts(str); getchar(); getchar(); getchar();}但是此程序有问题. 显示的农历错误. 我希望要求: 运行后,结果包括星期几和农历(该程序是在tc上运行的,所以我更改了所有中文).
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-152681-1.html
一起去追求公平公义