c语言万年历农历代码
时间: 2023-12-26 15:27:04 浏览: 203
以下是C语言实现万年历和农历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
// 定义全局变量
int year, month, day;
int week, days;
int lunar_year, lunar_month, lunar_day;
char lunar_month_name[10];
// 定义函数
void gotoxy(int x, int y);
void get_date();
void print_calendar();
void print_lunar_calendar();
void get_lunar_date();
void get_lunar_month_name();
void month(int y, int m);
int get_lunar_month_days(int year, int month);
int get_lunar_year_days(int year);
int get_lunar_month(int year, int day);
int get_lunar_day(int year, int month, int day);
int get_lunar_year(int year);
// 主函数
int main()
{
printf("请输入年月:");
scanf("%d%d", &year, &month);
month(year, month);
return 0;
}
// 移动光标
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
// 获取公历日期
void get_date()
{
SYSTEMTIME sys;
GetLocalTime(&sys);
year = sys.wYear;
month = sys.wMonth;
day = sys.wDay;
}
// 打印公历日历
void print_calendar()
{
printf("日 一 二 三 四 五 六\n");
for (int i = 1; i < week; i++)
{
printf(" ");
}
for (int i = 1; i <= days; i++)
{
if (week == 7)
{
printf("%2d\n", i);
week = 0;
}
else
{
printf("%2d ", i);
}
week++;
}
printf("\n");
}
// 打印农历日历
void print_lunar_calendar()
{
printf("农历:%s月%s\n", lunar_month_name, lunar_day == 1 ? "初一" : lunar_day == 10 ? "初十" : lunar_day == 20 ? "二十" : lunar_day == 30 ? "三十" : "");
}
// 获取农历日期
void get_lunar_date()
{
int i, leap = 0, temp = 0;
for (i = 1900; i <= year && temp <= 0x10000; i++)
{
temp = get_lunar_year_days(i); }
if (year == i - 1)
{
temp = get_lunar_year_days(year);
}
days = temp - 1;
for (i = 1; i <= 12 && days > 0; i++)
{
if (get_lunar_month_days(year, i) == 13)
{
leap = leap_month(year);
}
else
{
leap = 0;
}
if (leap == i && days > 0)
{
i--;
days -= get_lunar_month_days(year, leap);
leap = 0;
}
else
{
days -= get_lunar_month_days(year, i);
}
}
if (days == 0 && leap > 0 && i == leap + 1)
{
if (leap == 12)
{
leap = 1;
}
else
{
leap++;
}
}
if (days < 0)
{
days += get_lunar_month_days(year, --i);
}
lunar_month = i;
lunar_day = days + 1;
}
// 获取农历月份名称
void get_lunar_month_name()
{
char *month_name[] = {"", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};
strcpy(lunar_month_name, month_name[lunar_month]);
}
// 获取农历年份的总天数
int get_lunar_year_days(int year)
{
int i, sum = 348;
for (i = 0x8000; i > 0x8; i >>= 1)
{
sum += (get_lunar_year(year) & i) ? 1 : 0;
}
return sum + leap_month(year);
}
// 获取农历月份的总天数
int get_lunar_month_days(int year, int month)
{
return (get_lunar_year(year) & (0x10000 >> month)) ? 30 : 29;
}
// 获取农历年份的闰月月份
int leap_month(int year)
{
return get_lunar_year(year) & 0xf;
}
// 获取农历年份的二进制码
int get_lunar_year(int year)
{
int i, sum = 0;
for (i = 0x8000; i > 0x8; i >>= 1)
{
sum += (get_lunar_year(year) & i) ? 1 : 0;
}
return sum;
}
// 获取农历月份
int get_lunar_month(int year, int day)
{
int i, leap = 0, temp = 0;
for (i = 1; i <= 12 && day > 0; i++)
{
if (get_lunar_month_days(year, i) == 13)
{
leap = leap_month(year);
}
else
{
leap = 0;
}
if (leap > 0 && i == leap + 1 && day > 0)
{
--i;
day -= get_lunar_month_days(year, leap);
leap = 0;
}
else
{
day -= get_lunar_month_days(year, i);
}
}
if (day == 0 && leap > 0 && i == leap + 1)
{
if (leap == 12)
{
leap = 1;
}
else
{
leap++;
}
}
if (day < 0)
{
day += get_lunar_month_days(year, --i);
}
return i;
}
// 获取农历日
int get_lunar_day(int year, int month, int day)
{
int i, leap = 0, temp = 0;
for (i = 1; i < month; i++)
{
if (get_lunar_month_days(year, i) == 13)
{
leap = leap_month(year);
}
else
{
leap = 0;
}
if (leap > 0 && i == leap + 1)
{
--i;
leap = 0;
}
}
return day;
}
// 获取农历年份
int get_lunar_year(int year)
{
int i, leap = 0, temp = 0;
for (i = 1; i <= 12 && temp < year; i++)
{
temp += get_lunar_month_days(year, i);
if (get_lunar_month_days(year, i) == 13)
{
leap = leap_month(year);
}
else
{
leap = 0;
}
if (leap > 0 && i == leap + 1)
{
--i;
leap = 0;
}
}
if (temp > year)
{
--i;
}
return i;
}
// 打印一个月的日历
void month(int y, int m)
{
int i, j;
get_date();
week = 0;
days = 0;
lunar_year = 0;
lunar_month = 0;
lunar_day = 0;
get_lunar_date();
get_lunar_month_name();
printf("%d年%d月\n", y, m);
printf("公历:\n");
printf("日 一 二 三 四 五 六\n");
for (i = 1; i < week; i++)
{
printf(" ");
}
for (i = 1; i <= days; i++)
{
if (week == 7)
{
printf("%2d\n", i);
week = 0;
}
else
{
printf("%2d ", i);
}
week++;
}
printf("\n");
printf("农历:\n");
printf("日 一 二 三 四 五 六\n");
for (i = 1; i < week; i++)
{
printf(" ");
}
for (i = 1; i <= days; i++)
{
if (week == 7)
{
print_lunar_calendar();
printf("\n");
week = 0;
}
else
{
print_lunar_calendar();
}
week++;
}
printf("\n");
}
// 相关问题:
阅读全文