日历显示程序c语言,一个完整的日历程序(含有农历)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我是敲了一个上午啊

#include

#include

#include

#include

int leapyear(int years);//判断是否是闰年的函数

int week(int years); //判断一年当中第一天是星期几

void   print();        //格式化输出横线函数

int LunarCalendar(int year,int *pmonth,int *pday); //求农历的函数

char* LunarCalendarResult(int yy,int mm,int dd);

static char *title="星期日          星期一           星期二           星期三            星期四           星期五            星期六";

static char *month[12]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};

int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};

char Sky[10][4]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

char Earth[12][4]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

const int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

const int LunarCalendarTable[100] ={

2635,333387,1701,1748,267701,694,2391,133423,1175,396438

,3402,3749,331177,1453,694,201326,2350,465197,3221,3402

,400202,2901,1386,267611,605,2349,137515,2709,464533,1738

,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762

,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413

,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395

,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031

,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个相对复杂的大作业,需要涉及到公历、农历的计算和转换。下面是一个简单的实现思路: 1. 首先需要实现公历相关的计算,包括判断某一年是否为闰年、计算某一年某一月的天数、计算某一日是该年的第几天等。 2. 接下来需要实现农历相关的计算,包括农历年份的计算、农历月份的计算、农历日期的计算等。这部分可以使用已有的算法或者库函数进行计算。 3. 实现万年历的显示,可以使用控制台输出或者GUI界面显示。在显示时需要注意公历和农历的转换,并且需要考虑到节气、节日等特殊情况的显示。 下面是一个简单的代码示例,实现了基本的公历和农历转换和万年历显示: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MIN_YEAR 1900 #define MAX_YEAR 2100 // 公历计算相关函数 int is_leap_year(int year); int days_of_month(int year, int month); int days_of_year(int year, int month, int day); // 农历计算相关函数 int lunar_year(int year); int lunar_month(int year, int month, int day); int lunar_day(int year, int month, int day); char* lunar_month_name(int month); // 万年历显示函数 void print_calendar(int year, int month, int day); int main() { int year, month, day; // 获取当前时间 time_t t = time(NULL); struct tm* tm = localtime(&t); year = tm->tm_year + 1900; month = tm->tm_mon + 1; day = tm->tm_mday; // 显示万年历 print_calendar(year, month, day); return 0; } int is_leap_year(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 1; } return 0; } int days_of_month(int year, int month) { int days; switch (month) { case 2: days = is_leap_year(year) ? 29 : 28; break; case 4: case 6: case 9: case 11: days = 30; break; default: days = 31; break; } return days; } int days_of_year(int year, int month, int day) { int days = day; for (int i = 1; i < month; i++) { days += days_of_month(year, i); } return days; } int lunar_year(int year) { int lunar_year = 0; int delta = year - MIN_YEAR; int leap_years = delta / 4 - delta / 100 + delta / 400; lunar_year = delta * 365 + leap_years; return lunar_year; } int lunar_month(int year, int month, int day) { int lunar_month = 0; int days = days_of_year(year, month, day); for (int i = 1; i <= 12; i++) { int leap = ((i == 2 && is_leap_year(year)) ? 1 : 0); if (days <= (29 + leap)) { lunar_month = i; break; } days -= (29 + leap); } return lunar_month; } int lunar_day(int year, int month, int day) { int lunar_day = 0; int days = days_of_year(year, month, day); int leap_month = lunar_month(year, month, day); for (int i = 1; i <= days; i++) { lunar_day++; if (lunar_day > 29 + ((leap_month == 2 && is_leap_year(year)) ? 1 : 0)) { lunar_day = 1; leap_month = (leap_month == 12) ? 1 : leap_month + 1; } } return lunar_day; } char* lunar_month_name(int month) { char* name = ""; switch (month) { case 1: name = "正月"; break; case 2: name = "二月"; break; case 3: name = "三月"; break; case 4: name = "四月"; break; case 5: name = "五月"; break; case 6: name = "六月"; break; case 7: name = "七月"; break; case 8: name = "八月"; break; case 9: name = "九月"; break; case 10: name = "十月"; break; case 11: name = "冬月"; break; case 12: name = "腊月"; break; } return name; } void print_calendar(int year, int month, int day) { printf("公历:%d年%d月%d日\n", year, month, day); int lunar_y = (lunar_year(year) + days_of_year(year, month, day) - 1) / 29.5; int lunar_m = lunar_month(year, month, day); int lunar_d = lunar_day(year, month, day); printf("农历:%d年%s%d日\n", lunar_y, lunar_month_name(lunar_m), lunar_d); // TODO: 万年历显示 } ``` 在上面的代码中,我们实现了公历和农历的转换,并且可以输出基本的公历和农历信息。下一步需要实现万年历的显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值