带农历万年历C语言程序,c语言万年历程序代码
时间: 2023-10-05 11:05:25 浏览: 282
下面是一个带有农历和万年历功能的 C 语言程序代码示例:
#include <stdio.h>
#include <stdlib.h>
int get_weekday(int year, int month, int day) {
if (month == 1 || month == 2) {
month += 12;
year--;
}
int c = year / 100;
year %= 100;
int week = year + year / 4 + c / 4 - 2 * c + 13 * (month + 1) / 5 + day - 1;
week = (week % 7 + 7) % 7;
return week;
}
int is_leap_year(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int get_month_days(int year, int month) {
int days[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return days[month - 1];
}
void print_calendar(int year, int month) {
printf(" %d 年 %d 月\n", year, month);
printf("日 一 二 三 四 五 六\n");
int weekday = get_weekday(year, month, 1);
for (int i = 0; i < weekday; i++) {
printf(" ");
}
int month_days = get_month_days(year, month);
for (int i = 1; i <= month_days; i++) {
printf("%2d ", i);
if ((i + weekday) % 7 == 0) {
printf("\n");
}
}
if ((month_days + weekday) % 7 != 0) {
printf("\n");
}
}
void print_lunar_calendar(int year, int month, int day) {
char *lunar_year[] = {
"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",
"十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十"
};
char *lunar_month[] = {
"正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"
};
char *lunar_day[] = {
"初", "十", "廿", "三十"
};
int lunar_month_days[] = {
29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 29
};
int lunar_year_days = 0;
for (int i = 1901; i < year; i++) {
lunar_year_days += is_leap_year(i) ? 366 : 365;
}
for (int i = 1; i < month; i++) {
lunar_year_days += lunar_month_days[i - 1];
}
lunar_year_days += day - 1;
int lunar_year_months[] = {0, 12};
int lunar_year_days_sum[] = {0, 383};
int lunar_month_days_sum = 0;
for (int i = 0; i < 12; i++) {
lunar_month_days_sum += lunar_month_days[i];
if (lunar_year_days_sum[0] + lunar_month_days_sum <= lunar_year_days) {
lunar_year_months[0]++;
lunar_year_days_sum[0] += lunar_month_days_sum;
}
if (lunar_year_days_sum[1] + lunar_month_days_sum <= lunar_year_days) {
lunar_year_months[1]++;
lunar_year_days_sum[1] += lunar_month_days_sum;
}
}
int lunar_month = lunar_year_months[1] == 12 ? 1 : lunar_year_months[1] + 1;
int lunar_day = lunar_year_days - lunar_year_days_sum[1] + 1;
printf("农历:%s%s年%s月%s%s\n", lunar_year[year / 1000], lunar_year[year % 1000 / 100], lunar_month[lunar_month], lunar_day[lunar_day / 10], lunar_day[lunar_day % 10]);
}
int main() {
int year, month, day;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
printf("请输入日期:");
scanf("%d", &day);
print_calendar(year, month);
print_lunar_calendar(year, month, day);
return 0;
}
这个程序可以通过输入年份、月份和日期来打印出对应的公历和农历日历。其中,get_weekday()
函数用于计算某一天是星期几,is_leap_year()
函数用于判断某一年是否为闰年,get_month_days()
函数用于获取某一年某一月的天数,print_calendar()
函数用于打印公历日历,print_lunar_calendar()
函数用于打印农历日历。
阅读全文
相关推荐


















