day8三个小作业

1、

 

2、

 

3、

已复习

  • 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、付费专栏及课程。

余额充值