上学期在做老师布置的一个任务时,本打算在日历中再加上二十四节气的,不过上网搜索发现二十四节气的数据表实在太长,一行才表示一年,心想这一加上又是好几百行的代码,于是就没了兴头。

今天突然心血来潮,想自己动手做一个二十四节气的数据表,并且在脑中也形成了一个很好的思路。上网百科了一下,知道二十四节气中每个月上半月和下半月各有一个节气,并且在上半年中,上半月的是在3至7日,下半月的是在18至22日;而在下半年中,上半月在6至9号,下半月在21至24号。上半年是从3到7和从18到22,跨越的范围是5,用二进制数需要三位;下半年是从6至9和21至24,跨越的范围是4,用二进制数只需两位。

既然这样,我想我们就可以把数据分成两部分,一部分是上半年,一部分是下半年。在上半年中,上半月的日期设为3,那么以上半月节气的日期与三的差作为数据,而下半月的日期设为18,以下半月节气的日期与18的差作为数据。

如2010年1月5日是小寒,与3相差为2,用二进制表示是010(2);1月20日是大寒,与18相差是2,用二进数据表示是010;那么1月份的数据就可表示为010010,2至6月份以此类推,这样就可制成上半年的数据表,一共是36位。

下半年与上面一样,但因为跨越日期是4天,所以记录每个节气只需要2位。设上半月的基数是6,下半月的基数是21。

如7月7日是小暑,则用二进制数记录数据为01(2);7月23日是大暑,用二进制数记录为10(2)。如此记录7月的节气信息可为0110。由此下半年的节气数据仅需24位数据就可以表示。

这样上半年与下半年一共需要60位数据表示。定义一个64位的数组变量。在输入时以16进制数输入,这样在屏幕上,如果一行能记录五个数据的话,50年的二十四节气表只需要10行。

但是做成节气表后怎么使用呢?下面以实例说明。

先定义一个数组,记录从某年到某年的节气表。

void SolarTerm(char *day1,char *day2,char month,int year)

//day1,day2是上下半月读到的节气,month,year是所要查询的年份

{

long

long solarterm;//记录将从节气表中由参数year读到的当年节气信息

char

temp;//记录某月的信息

solarterm

= (这里读取该年信息)

if(month>6)

{

solarterm>>=48-4*month;//将需要的信息移到最右边的四位

temp=solarterm&15;//得到最右边四位的数据

*day1=temp>>2+6;//得到上半月的节气

*day2=temp&3+21;//得到下半月的节气

}

else

{

solarterm>>=60-6*month;

temp=solarterm&63;

*day1=temp>>3+3;

*day2=temp&7+18;

}

}

虽然计算的过程可能会麻烦些,不如直接的用有12个8位的元素的数组记录一年信息的方便,但是我这个记录一年的节气信息只需要8个字节,比用数组的12个字节省了三分之一,对单片机的移植性应该比较大。

我还有两个思路,不过也都要用到54位。原理大同小异,这里不加赘述。

欢迎加QQ群讨论:31066229。

24节气的算法 c语言,制作二十四节气表的一个思路(C语言版)(原创)相关推荐

  1. java 节气_谁有关于24节气的算法,最后有java实现的代码

    展开全部 以下是查表算法调用 jieqi(int Y, int M, int D)传入年月日返回节气,如果非节气返回null 注意传入的62616964757a686964616fe58685e5ae ...

  2. c语言创造线性表储存复数,《c语言数结构》第02章 线性表.ppt

    <c语言数结构>第02章 线性表 第1章回顾 数据结构课程-- 数据结构+算法=程序,涉及数学.计算机硬件和软件. 数据结构定义--指互相有关联的数据元素的集合,可用data_Struct ...

  3. 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc

    线性表的基本操作顺序存储(C语言) #include#include#include#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/#define LISTINCREMEN ...

  4. c语言分桃分题设计思路,C语言实现的猴子分桃问题算法解决方案

    本文实例讲述了C语言实现的猴子分桃问题算法.分享给大家供大家参考,具体如下: 问题: 海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份 ...

  5. 单片机C语言制作ESR表,超级ESR表 - 〓仪表工具专区〓 - 矿石收音机论坛 - Powered by Discuz!...

    本帖最后由 北极兵 于 2015-3-6 12:28 编辑 我参赛作品<超级ESR表>发贴以来,得到不少坛友的赞同,有一部分人正在仿制,有的已经仿制成功.长期以来很多坛友都想做一只,但以前 ...

  6. 单片机C语言制作ESR表,电容ESR表(二) 电容ESR表的设计、制作、调试

    3 设计构思及最终完成的电路 一.方案选择 在设计制作之前,最重要的决定是动手的方向.几经考虑和权衡,笔者决定采用指针式ESR表的方案.原因有三: 一是指针式ESR表的测量更便捷.指针表长于定性测量, ...

  7. 单片机C语言制作ESR表,【参赛】 自制ESR表

    补充说明: 我在制作这台ESR表时装了两遍,第一次安装时,由于买的洞洞板质量太次,调整时焊了几次,很多焊盘就脱落了,无奈只得又重新购买洞洞板,一切从头来过. 第二次制作就比较顺利了,基本上是一次成功, ...

  8. c语言求最大公约数多一个负号,C语言 求最大公约数

    质因数分解法 质因数分解 质因数分解法:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的 最大公约数. 例如:求24和60的最大公约数,先分解质因数,得24=2× ...

  9. c语言点餐系统感悟,一个简单C语言点餐系统的学习心得

    首先附上源代码: 1 #include 2 3 voidmain_munu(){4 //打印主菜单 5 char a[6][20]={"菜单","凉菜",&qu ...

最新文章

  1. css中那些容易被我们程序猿所忽略的选择器
  2. [JVM 相关] Java 新型垃圾回收器(Garbage First,G1)
  3. [翻译] NSRegexTester
  4. flutter 图片路径_【Flutter开发工具推荐】Flutter资源管理利器:Flr
  5. 变与不变——一汽-大众的数字化人才战略“突围”
  6. Arcgis for Javascript实现两个地图的联动
  7. 校园PHP表白墙程序源码
  8. sourcetree克隆一直不成功_Git神器| SourceTree安装使用教程
  9. 【python基础知识】AttributeError: module 'turtle' has no attribute 'setup'
  10. python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验
  11. python中闭包详解
  12. Python随机梯度下降法(四)【完结篇】
  13. SAP License:工程设备采购倒扣备品价
  14. 1.2 xss原理分析与剖析(3)
  15. java 标签时间format_fmt:formatDate 标签
  16. 程序员头发都是怎么没的?第二个原因扎心了!
  17. html5清新文艺,30句清新文艺范的句子
  18. 移动云mas 通过HTTP请求发送普通短信和 模板短信
  19. ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)
  20. 浅谈Android中的异步加载之ListView中图片的缓存及优化三

热门文章

  1. 【Android View】写一个蛛网评分控件
  2. Erlang/OTP 构建 Application
  3. Linux安装指定版本的docker及添加国内镜像源
  4. 研究报告|25W以上的高端新能源车KOL爱谁谁?
  5. 关于典型二阶系统固有频率
  6. 使用Acrobat时,怎样使其默认页面显示方式为启用滚动
  7. 多方面,全访问的剖析Tomcat十大线程和四大通道
  8. SCI科研制图的尺寸及字体大小
  9. PLATFORMS(平台)
  10. 不小心清空了回收站怎么办?回收站清空了怎么恢复