用c语言代码实现万年历查询程序 功能要求: (1)提供菜单方式选择 (2)输入年份、月份、日期,计算得到的是这一天据今天有多少天,星期几; (3)输入公历的年月日,输出农历年月日;

时间: 2024-05-11 18:16:00 浏览: 10
好的,我知道您提出的要求,并将为您提供回答。下面是实现万年历查询程序的C语言代码。 ``` #include <stdio.h> // 声明函数 void menu(); int is_leap_year(int year); int get_day_of_year(int year, int month, int day); int get_weekday(int year, int month, int day); int get_year_days(int year); void get_lunar_date(int year, int month, int day); int get_year_days(int year); int get_lunar_month_days(int year, int month); void get_lunar_month_day(int year, int month, int day); int main() { int year, month, day; int choice; while (1) { menu(); printf("请输入您的选择:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); printf("请输入日期:"); scanf("%d", &day); int day_of_year = get_day_of_year(year, month, day); int weekday = get_weekday(year, month, day); printf("这一天据今天有 %d 天\n", day_of_year); printf("星期 %d\n", weekday); break; case 2: printf("请输入公历的年月日,例如:2022 3 3\n"); scanf("%d %d %d", &year, &month, &day); printf("公历 %d 年 %d 月 %d 日对应的农历日期为:", year, month, day); get_lunar_date(year, month, day); printf("\n"); break; case 3: printf("感谢您使用本程序,再见!\n"); return 0; default: printf("无效的选项,请重新输入!\n"); break; } } } // 输出菜单 void menu() { printf("\n===== 万年历查询程序 =====\n"); printf("1. 查询这一天据今天有多少天,星期几\n"); printf("2. 查询公历日期对应的农历日期\n"); printf("3. 退出程序\n"); } // 判断是否是闰年 int is_leap_year(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 1; } else { return 0; } } // 获取当天是这一年的第几天 int get_day_of_year(int year, int month, int day) { int days = 0; for (int i = 1; i < month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days += 31; break; case 4: case 6: case 9: case 11: days += 30; break; case 2: if (is_leap_year(year)) { days += 29; } else { days += 28; } break; } } days += day; return days; } // 获取该天是星期几 int get_weekday(int year, int month, int day) { int k = year % 100; int j = year / 100; int q = day; int m = month; int h = (q + 26 * (m + 1) / 10 + k + k / 4 + j / 4 + 5 * j) % 7; return (h + 6) % 7 + 1; } // 获取该年共有多少天 int get_year_days(int year) { int days = 0; for (int i = 1; i <= 12; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days += 31; break; case 4: case 6: case 9: case 11: days += 30; break; case 2: if (is_leap_year(year)) { days += 29; } else { days += 28; } break; } } return days; } // 获取农历日期 void get_lunar_date(int year, int month, int day) { int days = 0; int lunar_year = year; int lunar_month = 1; int lunar_day = 1; while (1) { days += get_year_days(lunar_year); if (days > get_day_of_year(year, month, day)) { days -= get_year_days(lunar_year); break; } lunar_year++; } for (int i = 1; i <= 12; i++) { int days_of_month = get_lunar_month_days(lunar_year, i); if (days >= days_of_month) { days -= days_of_month; lunar_month++; } else { break; } } lunar_day += days; get_lunar_month_day(lunar_year, lunar_month, lunar_day); } // 获取农历年份中该月有多少天 int get_lunar_month_days(int year, int month) { int month_day = 29; if ((year & 0x03) == 0 && month == 2) { month_day = 30; } else if ((year & 0x03) != 0 && month == 3) { month_day = 30; } if ((0x8000 >> (month - 1)) & 0x0f) { month_day++; } return month_day; } // 获取农历年月日 void get_lunar_month_day(int year, int month, int day) { char *g_month[] = {"*","正","二","三","四","五","六","七","八","九","十","冬","腊"}; char *g_day[] = {"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"}; char *zodiac[] = {"猴","鸡","狗","猪","鼠","牛","虎","兔","龙","蛇","马","羊"}; printf("%s年", zodiac[(year - 4) % 12]); printf("%s月", g_month[month]); printf("%s", g_day[day]); } ``` 以上就是实现万年历查询程序的C语言代码,您可以根据需要对代码进行适当的修改和调整。希望能够帮到您!

相关推荐

最新推荐

recommend-type

C语言程序设计实现区号查询系统C语言程序设计实现

用C语言编程的区号查询系统,要求实现区号查询系统中,添加新记录、删除记录、显示记录信息、按城市查找信息和退出系统等功能。 ①录入有关城市的名称和区号。 ②显示所有城市的信息。 ③通过输入城市名称查找对应...
recommend-type

单片机C语言程序设计:用计数器中断实现100以内的按键计数

名称:用计数器中断实现 100 以内的按键计数 ...说明:本例用 T0 计数器中断实现按键技术,由于计数寄存器初值为 1,因此 P3.4 引脚的每次负跳变都会触发 T0 中断,实现计数值累加。计数器的清零用外部中断 0 控制。
recommend-type

CRC4的C语言实现代码

这里给大家分享一个函数,实现DSP通讯中的CRC4校验 。特征码为0x13。
recommend-type

基于C语言的万年历课程设计报告(内附程序,原理分析,心得体会等)

2、日期查询,输入日期能够判断该日期是星期几及具体信息。3、月历查询,可显示指定日期所在月份的月历,包括打印指定个数的空格、打印分隔线。4、打印整年日历,输入一个年份能够显示出该年的全部月历。
recommend-type

C语言计算日期差的方法示例

主要介绍了C语言计算日期差的方法,结合具体实例形式分析了C语言针对日期转换、运算等相关操作技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB正态分布协方差分析:揭示正态分布变量之间的协方差

![MATLAB正态分布协方差分析:揭示正态分布变量之间的协方差](https://site.cdn.mengte.online/official/2021/11/20211128213137293.png) # 1. 正态分布概述 正态分布,又称高斯分布,是统计学中最重要的连续概率分布之一。它广泛应用于自然科学、社会科学和工程领域。 正态分布的概率密度函数为: ``` f(x) = (1 / (σ√(2π))) * exp(-(x - μ)² / (2σ²)) ``` 其中: - μ:正态分布的均值 - σ:正态分布的标准差 - π:圆周率 正态分布具有以下特性: - 对称性:
recommend-type

我正在开发一款个人碳足迹计算app,如何撰写其需求分析文档,请给我一个范例

为了更全面、清晰地定义个人碳足迹计算app的需求,需求分析文档应该包含以下内容: 1.项目简介:对该app项目的概述及目标进行说明。 2.用户分析:包括目标用户群、用户需求、行为等。 3.功能需求:对app的基本功能进行定义,如用户登录、数据录入、数据统计等。 4.非功能需求:对使用app的性能和质量等进行定义,如界面设计、数据安全、可扩展性等。 5.运行环境:包括app的开发环境和使用环境。 下面是一个范例: 需求分析文档 1. 项目简介 该app项目旨在为用户提供一款方便、易用、可定制的个人碳足迹计算平台,以促进环保和可持续性发展。 2. 用户分析 目标用户群:全球关
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。