600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C语言 生辰八字+五行+纳音 查询

C语言 生辰八字+五行+纳音 查询

时间:2019-04-08 18:12:09

相关推荐

C语言 生辰八字+五行+纳音 查询

干支是天干和地支的总称

把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的"干支表"。

甲、乙、丙、丁、戊、己、庚、辛、壬、癸等十个符号叫天干;

子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥等十二个符号叫地支。

所谓的干支纪年就是把一个年份用一个天干和一个地支组合来表示;

相应的也有干支纪月 干支纪日 干支纪时;

而 干支纪 年 月 日 时 就组成了生辰八字;

生辰八字,简称八字,是指一个人出生时的干支历日期;

年月日时共四柱干支,每柱两字,合共八个字。

生辰八字在中国民俗信仰中占有重要地位,

古代中国道家、星相家据此推算人的命运的好坏。

五行指的是金 木 水 火 土

对应关系如下:

天干地支的五行属性表

天干:

甲 - 木、乙 - 木、丙 - 火、丁-火、戊-土、己-土、庚-金、辛-金、

壬-水、癸-水

地支

子 - 水、丑 - 土、寅 - 木、卯-木、辰-土、巳-火、午-火、未-土、

申-金、酉-金、戌-土、亥-水

五行纳音命理对照表

以上是关于生辰八字五行及年干支本命纳音的简单介绍,下面是代码运行情况及代码:

查询结果如下图:

-4-8 修改:

增加 对输入数据的判断,“错误“–重新进入程序,正确 继续查询

增加 0”退出,or 任意键 继续查询

修改如下:

增加了以下代码段1:(判断输入是否正确

if(month>12||month<1||date<1||date>31||time>2400){printf("\t您的输入错误,重新进入程序\n\n");main();}else {

增加了以下代码段2::(实现重复查询,直到主动选择退出

printf("\t请选择0:退出 or 任意键继续查询\n\n\t");getchar();if(getchar()=='0'){printf("————————感谢使用 生辰八字五行查询 小程序————————\n\n");printf("\t\t\t再见!\n");return 0; }else {printf("\n\n");main(); }}

另外,调整了输入输出的格式,更方便查看。

以下是相关程序的代码:

/*输入出生年月日时,返回生辰八字五行*/#include<stdio.h>#include<string.h>char *tiang[]={"癸","甲","乙","丙","丁","戊","己","庚","辛","壬"};char *dizhi[]={"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"};char *wuxing[]={"木","火","土","金","水"};char *wxnayin[]={"海中金","炉中火","大林木","路旁土","剑锋金","山头火","涧下水","城头土","白蜡金","杨柳木","泉中水","屋上土","霹雳火","松柏木","长流水","沙中金","山下火","平地木","壁上土","金箔金","覆灯火","天河水","大驿土","钗钏金","桑柘木","大溪水","沙中土","天上火","石榴木","大海水"};int ytian(int year) /*计算年对应的天干*/{ int i;i=year-3;return (i%10);}int ydiz(int year) /*计算年对应的地支*/{int i;i=year-3;return (i%12);}int mtian(int t1,int t2) /*计算月对应的天干*/{ int i;i=t1%5*2+1+t2-2;i=i%10;return (i);}int dtian(int y,int m,int d) /*计算日对应的天干*/{ int g,c,j;if(m<=2)m+=12;c=y/100;y=y%100;g=4*c+c/4+5*y+y/4+3*(m+1)/5+d-3;j=g%10;return (j);}int ddi(int y,int m,int d) /*计算日对应的地支*/{ int z,c,i,j;if(m<=2)m+=12;if(m%2)i=6;else i=0;c=y/100;y=y%100;z=8*c+c/4+5*y+y/4+3*(m+1)/5+d+7+i;j=z%12+6;if(j>7)j=j%12;return (j);}int ttian(int t1,int t2) /*计算时对应的天干*/{ int i;//if(t1%5==0)i=9;// elsei=(t1*2-1)+(t2/100+1)/2;i=i%10;return (i);}int ttd(int t){ int tem;t=t/100;if(t>=1&&t<23)tem=(t+1)/2+1;else tem==1;return (tem%12);}int tgwx(int n)/*天干对应五行*/{return ((n+1)/2-1);}int dzwx(int n)/*地支对应五行*/{if(n==3||n==4)return 0;else if(n==6||n==7)return 1;else if(n==9||n==10)return 3;else if(n==0||n==1)return 4;else return 2;}int pr1(int n)/*天干输出*/{printf("%s",*(tiang+n));}int pr2(int n)/*地支输出*/{printf("%s",*(dizhi+n));}int pr3(int n)/*五行输出*/{printf("%s",*(wuxing+n));}int main(){ int year,month,date,time;printf("————————欢迎使用 生辰八字五行查询 小程序————————\n\n\t");printf("请输入阳历出生年、月、日、时:\n\n\t");printf("举例: 9 25 1702\n\n\t");scanf("%d%d%d%d",&year,&month,&date,&time);if(month>12||month<1||date<1||date>31||time>2400){printf("\t您的输入错误,重新进入程序\n\n");main();}else {int tg1,tg2,tg3,tg4,dz1,dz2,dz3,dz4;tg1=ytian(year);dz1=ydiz(year); tg2=mtian(tg1,month);if(month+1>=11)dz2=month-11;else dz2=month+1;tg3=dtian(year,month,date);dz3=ddi(year,month,date);tg4=ttian(tg3,time);dz4=ttd(time);printf("\n\t您查询生辰的八字五行如下:\n\n");printf("\t 年\t 月\t 日\t 时\n\n");printf("\t");pr1(tg1);pr2(dz1);printf("\t");pr1(tg2);pr2(dz2);printf("\t");pr1(tg3);pr2(dz3);printf("\t");pr1(tg4);pr2(dz4);printf("\n\n");printf("\t");pr3(tgwx(tg1));pr3(dzwx(dz1));printf("\t");pr3(tgwx(tg2));pr3(dzwx(dz2));printf("\t");pr3(tgwx(tg3));pr3(dzwx(dz3));printf("\t");pr3(tgwx(tg4));pr3(dzwx(dz4));printf("\n\n");printf("\n\t您查询的生辰八字五行纳音为:");printf("\%s\n\n",*(wxnayin+(((year-1924)%60)/2)));printf("\n\n");printf("\t请选择0:退出 or 任意键继续查询\n\n\t");getchar();if(getchar()=='0'){printf("————————感谢使用 生辰八字五行查询 小程序————————\n\n");printf("\t\t\t再见!\n");return 0; }else {printf("\n\n");main(); }}}

改进的代码

/*输入出生年月日时,返回生辰八字五行*/#include<stdio.h>#include<string.h>#include<windows.h>char *tiang[]={"癸","甲","乙","丙","丁","戊","己","庚","辛","壬"};char *dizhi[]={"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"};char *wuxing[]={"木","火","土","金","水"};char *wxnayin[]={"海中金","炉中火","大林木","路旁土","剑锋金","山头火","涧下水","城头土","白蜡金","杨柳木","泉中水","屋上土","霹雳火","松柏木","长流水","沙中金","山下火","平地木","壁上土","金箔金","覆灯火","天河水","大驿土","钗钏金","桑柘木","大溪水","沙中土","天上火","石榴木","大海水"};int ytian(int year) /*计算年对应的天干*/{ int i;i=year-3;return (i%10);}int ydiz(int year) /*计算年对应的地支*/{int i;i=year-3;return (i%12);}int mtian(int t1,int t2) /*计算月对应的天干*/{ int i;i=t1%5*2+1+t2-2;i=i%10;return (i);}int dtian(int y,int m,int d) /*计算日对应的天干*/{ int g,c,j;if(m<=2)m+=12;c=y/100;y=y%100;g=4*c+c/4+5*y+y/4+3*(m+1)/5+d-3;j=g%10;return (j);}int ddi(int y,int m,int d) /*计算日对应的地支*/{ int z,c,i,j;if(m<=2)m+=12;if(m%2)i=6;else i=0;c=y/100;y=y%100;z=8*c+c/4+5*y+y/4+3*(m+1)/5+d+7+i;j=z%12+6;if(j>7)j=j%12;return (j);}int ttian(int t1,int t2) /*计算时对应的天干*/{ int i;// if(t1%5==0)i=9;// elsei=(t1*2-1)+(t2/100+1)/2;i=i%10;return (i);}int ttd(int t){ int tem;t=t/100;if(t>=1&&t<23)tem=(t+1)/2+1;else tem==1;return (tem%12);}int tgwx(int n)/*天干对应五行*/{return ((n+1)/2-1);}int dzwx(int n)/*地支对应五行*/{if(n==3||n==4)return 0;else if(n==6||n==7)return 1;else if(n==9||n==10)return 3;else if(n==0||n==1)return 4;else return 2;}int pr1(int n)/*天干输出*/{printf("%s",*(tiang+n));}int pr2(int n)/*地支输出*/{printf("%s",*(dizhi+n));}int pr3(int n)/*五行输出*/{printf("%s",*(wuxing+n));}void meanu(){system("title 八字五行查询 Powered by : RedMaple");system("mode con cols=50 lines=30");system("color 74") ;}int main(){ system("cls");meanu();int year,month,date,time;printf("\n————欢迎使用 生辰八字五行查询 小程序————\n\n\t");printf("请输入阳历出生年、月、日、时:\n\n\t");printf("举例:1980 9 25 1702\n\n");printf("\t*********************************\n\t");scanf("%d%d%d%d",&year,&month,&date,&time);if(month>12||month<1||date<1||date>31||time>2400||year<1924){printf("\t您的输入错误,重新进入程序\n\n");main();}else {int tg1,tg2,tg3,tg4,dz1,dz2,dz3,dz4;tg1=ytian(year);dz1=ydiz(year); tg2=mtian(tg1,month);if(month+1>=11)dz2=month-11;else dz2=month+1;tg3=dtian(year,month,date);dz3=ddi(year,month,date);tg4=ttian(tg3,time);dz4=ttd(time);printf("\n\t*********************************\n");printf("\n\t您查询生辰的八字五行如下:\n\n");printf("\t 年\t 月\t 日\t 时\n\n");printf("\t");pr1(tg1);pr2(dz1);printf("\t");pr1(tg2);pr2(dz2);printf("\t");pr1(tg3);pr2(dz3);printf("\t");pr1(tg4);pr2(dz4);printf("\n\n");printf("\t");pr3(tgwx(tg1));pr3(dzwx(dz1));printf("\t");pr3(tgwx(tg2));pr3(dzwx(dz2));printf("\t");pr3(tgwx(tg3));pr3(dzwx(dz3));printf("\t");pr3(tgwx(tg4));pr3(dzwx(dz4));printf("\n\n");printf("\n\t五行纳音为:");printf("\%s\n\n",*(wxnayin+(((year-1924)%60)/2)));printf("\t*********************************\n");printf("\t【0】退出 【】任意键继续查询\n\n\t");getchar();if(getchar()=='0'){system("cls");printf("\n\n————感谢使用 生辰八字五行查询 小程序————\n\n");printf("\t\t\t再见!\n");return 0; }else {printf("\n\n");main(); }}}

/*****************************************************************************/公元**年的天干地支计算方法10天干:甲乙丙丁戊己庚辛壬癸12地支:子丑寅卯辰巳午未申酉戌亥甲子年 1924 1984 2044年 除以 60 余 4 即为 甲子年年的天干地支计算天干计算 年 -3 再%10 取余 所得余数 与10天干 一 一对应地支计算 年 -3 再%12 取余 所得余数 与12地支 一 一对应月的天干地支计算(阳历)天干计算 年天干数%5 取余 所得余数*2+1 加上月份-2 与天干 一 一对应 (只有5个,按余数0-4,甲丙戊庚壬)地支计算 丑寅卯辰巳午未申酉戌亥子 与12月一 一对应从已知日期计算干支纪日的公式为:G = 4C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d - 3Z = 8C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d + 7 + i其中 C 是世纪数减一,y 是年份后两位,M 是月份,d 是日数。1月和2月按上一年的13月和14月来算。奇数月i=0,偶数月i=6。G 除以10的余数是天干,Z 除以12的余数是地支。计算时带[ ]的数表示取整。例如:查4月1日的干支日。 将数值代入计算公式。G =4*20 + [20 / 4] + 5*06 + [06 / 4] + [3 * (4 + 1) / 5] + 1 - 3 =117除以10 余数为 7 ,天干的第7位是‘庚’。Z =8*20 + [20 / 4] + 5*06 + [06 / 4] + [3 * (4 + 1) / 5] + 1 + 7 + 6 =213除以12 余数为 9 ,地支的第9位是‘申’。答案是:4月1日的干支日是庚申日。12时辰对应的天干地支天干计算甲乙丙丁戊己庚辛壬癸 日天干 *2-1+((time%100+1)/2)%10 与10天干一 一对应地支计算子丑寅卯辰巳午未申酉戌亥 与12时辰一 一对应/*************************************************************************************/

查询方法来源于网络,经过自己的整理,推算,总结。

最终有了上面的代码,仅作为学习交流用。

如果用于商业用途,请提前声明。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。