c语言 农历查询
时间: 2023-07-09 14:09:38 浏览: 102
C语言实现万年历小程序
要实现农历查询,需要用到农历算法,可以参考以下代码实现:
```c
#include <stdio.h>
// 农历数据
int lunar_month_days[13] = {0, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30};
char *lunar_month_names[13] = {"", "正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月"};
char *lunar_day_names[31] = {"", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"};
// 公历转农历
void solar2lunar(int year, int month, int day, int *lunar_year, int *lunar_month, int *lunar_day) {
int i, leap = 0, temp = 0;
int offset = (year - 1900) * 365 + (year - 1900) / 4 + (day - 1);
for (i = 1; i < month; i++) {
offset += lunar_month_days[i];
}
if (month > 1 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
offset++;
}
temp = offset;
for (i = 1900; i < 2050 && temp > 0; i++) {
leap = (i % 4 == 0 && i % 100 != 0) || (i % 400 == 0);
temp -= 365 + leap;
}
if (temp < 0) {
temp += 365 + leap;
i--;
}
*lunar_year = i;
int lunar_year_days = leap ? 366 : 365;
for (i = 1; i <= 12 && temp > 0; i++) {
if (i == month && leap && temp == 29) {
temp -= 29;
continue;
}
temp -= lunar_month_days[i];
}
if (temp < 0) {
temp += lunar_month_days[i - 1];
*lunar_month = i - 1;
} else {
*lunar_month = i;
}
*lunar_day = temp + 1;
}
int main() {
int year, month, day, lunar_year, lunar_month, lunar_day;
printf("请输入公历年月日,用空格分隔:");
scanf("%d %d %d", &year, &month, &day);
solar2lunar(year, month, day, &lunar_year, &lunar_month, &lunar_day);
printf("公历 %d 年 %d 月 %d 日对应的农历是:%d年%s%s\n", year, month, day, lunar_year, lunar_month_names[lunar_month], lunar_day_names[lunar_day]);
return 0;
}
```
该程序可以输入公历年月日,输出对应的农历年月日。
阅读全文