c语言实现阳历转农历的代码
时间: 2024-01-22 18:20:06 浏览: 143
C#阳历转农历
以下是C语言实现阳历转农历的代码:
```c
#include <stdio.h>
int lunar_year(int year);
int lunar_month(int year, int month);
int lunar_day(int year, int month, int day);
void lunar_calendar(int year, int month, int day);
int main()
{
int year, month, day;
printf("请输入阳历日期(年 月 日,用空格隔开):");
scanf("%d%d%d", &year, &month, &day);
lunar_calendar(year, month, day);
return 0;
}
int lunar_year(int year) // 判断该年是否为闰年,是返回1,否返回0
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int lunar_month(int year, int month) // 返回该年该月的天数
{
int month_day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && lunar_year(year)) // 若为闰年且为2月,则天数为29天
return 29;
else
return month_day[month];
}
int lunar_day(int year, int month, int day) // 返回这一天为该年的第几天
{
int i, days = 0;
for (i = 1; i < month; i++)
days += lunar_month(year, i);
days += day;
return days;
}
void lunar_calendar(int year, int month, int day)
{
int i, days = 0, lunar_year, lunar_month, lunar_day;
int lunar_month_day[13][2] = {
{0, 0}, {29, 30}, {59, 60}, {88, 89}, {118, 119}, {147, 148},
{177, 178}, {206, 207}, {236, 237}, {265, 266}, {295, 296}, {324, 325}, {354, 355}
}; // 农历每月初一对应的阳历日期
int lunar_year_days[12] = {0, 354, 355, 383, 354, 355, 384, 354, 355, 383, 354, 355}; // 每年农历的总天数
days = lunar_day(year, month, day);
for (i = 1900; days > 0; i++) { // 从1900年开始计算
if (days > 365 + lunar_year(i)) { // 若跨年,则减去该年的天数
days -= 365 + lunar_year(i);
} else {
lunar_year = i;
for (lunar_month = 1; lunar_month <= 12; lunar_month++) { // 计算该年的月份和日期
if (days <= lunar_month_day[lunar_month][lunar_year_days[lunar_year % 12]]) {
lunar_day = days + lunar_month_day[lunar_month - 1][lunar_year_days[lunar_year % 12]];
break;
}
}
break;
}
}
printf("农历日期:%d年", lunar_year);
if (lunar_month < 10)
printf("0");
printf("%d月", lunar_month);
if (lunar_day < 10)
printf("0");
printf("%d日\n", lunar_day);
}
```
实现过程分为三个函数:
- `lunar_year(year)`:判断该年是否为闰年,是返回1,否返回0。
- `lunar_month(year, month)`:返回该年该月的天数。
- `lunar_day(year, month, day)`:返回这一天为该年的第几天。
根据这三个函数可以计算出农历日期。
阅读全文