查五行命理 C语言 生辰八字+五行+纳音 查询
查五行命理 C语言 生辰八字+五行+纳音 查询
茎干是天干地支的总称。
把茎枝的顺序正好匹配到60个做一个星期,重复循环,循环记录,就是俗称的“茎枝表”。
甲、乙、丙、丁、戊、吉、庚、辛、仁、桂等十个符号称为天干;
子、丑、寅、卯、辰、泗、吴、魏、申、酉、徐、亥等十二个符号称为地支。
所谓干支年表,就是用天干地支的组合来代表一年;
相应地,还有年月、日、时;
干支的年、月、日、年构成生日的八个字;
,简称八字,指一个人的出生日期;
年、月、日共四柱个词干查五行命理,每列两个字符,共八个字符。
生辰八字在中国民间信仰中占有重要地位,
中国古代的道家和占星家以此计算人的命运。
五行指金、木、水、火、土
对应关系如下:
天干地支五行属性表
天干地支:
A-木,B-木,C-火,D-火查五行命理,武-土,冀-土,庚-金,辛-金,
仁水,桂水
地支:
子-水,丑-土查五行命理 C语言 生辰八字+五行+纳音 查询,阴-木,毛-木,陈-土,思-火查五行命理查五行命理 C语言 生辰八字+五行+纳音 查询,武-火,魏-土,
沉-金,幽-金,徐-土,海-水
五行纳音命理对照表
以上是对出生年月、八字、五要素、年份干支的简要介绍。以下是代码和代码的操作:
查询结果如下:
2019-4-8 修改:
增加对输入数据的判断,“错误”——重新进入程序,继续正确查询
加 0" 退出,或任意键继续查询
修改如下:
添加如下代码段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
#include
char *tiang[]={"癸","甲","乙","丙","丁","戊","己","庚","辛","壬"};
char *dizhi[]={"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"};
char *wuxing[]={"木","火","土","金","水"};
char *wxnayin[]={"海中金","炉中火","大林木","路旁土","剑锋金","山头火","涧下水","城头土","白蜡金","杨柳木","泉中水","屋上土","霹雳火","松柏木","长流水",
"沙中金","山下火","平地木","壁上土","金箔金","覆灯火","天河水","大驿土","钗钏金","桑柘木","大溪水","沙中土","天上火","石榴木","大海水"};
int ytian(int year) /*计算年对应的天干*/
{ int i;
i=year-3;
return (i);
}
int ydiz(int year) /*计算年对应的地支*/
{
int i;
i=year-3;
return (i);
}
int mtian(int t1,int t2) /*计算月对应的天干*/
{ int i;
i=t1%5*2+1+t2-2;
i=i;
return (i);
}
int dtian(int y,int m,int d) /*计算日对应的天干*/
{ int g,c,j;
if(m<=2)m+=12;
c=y/100;
y=y0;
g=4*c+c/4+5*y+y/4+3*(m+1)/5+d-3;
j=g;
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=y0;
z=8*c+c/4+5*y+y/4+3*(m+1)/5+d+7+i;
j=z+6;
if(j>7)j=j;
return (j);
}
int ttian(int t1,int t2) /*计算时对应的天干*/
{ int i;
//if(t1%5==0)i=9;
// else
i=(t1*2-1)+(t2/100+1)/2;
i=i;
return (i);
}
int ttd(int t)
{ int tem;
t=t/100;
if(t>=1&&t
{
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("举例:2016 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
#include
#include
char *tiang[]={"癸","甲","乙","丙","丁","戊","己","庚","辛","壬"};
char *dizhi[]={"亥","子","丑","寅","卯","辰","巳","午","未","申","酉","戌"};
char *wuxing[]={"木","火","土","金","水"};
char *wxnayin[]={"海中金","炉中火","大林木","路旁土","剑锋金","山头火","涧下水","城头土","白蜡金","杨柳木","泉中水","屋上土","霹雳火","松柏木","长流水",
"沙中金","山下火","平地木","壁上土","金箔金","覆灯火","天河水","大驿土","钗钏金","桑柘木","大溪水","沙中土","天上火","石榴木","大海水"};
int ytian(int year) /*计算年对应的天干*/
{ int i;
i=year-3;
return (i);
}
int ydiz(int year) /*计算年对应的地支*/
{
int i;
i=year-3;
return (i);
}
int mtian(int t1,int t2) /*计算月对应的天干*/
{ int i;
i=t1%5*2+1+t2-2;
i=i;
return (i);
}
int dtian(int y,int m,int d) /*计算日对应的天干*/
{ int g,c,j;
if(m<=2)m+=12;
c=y/100;
y=y0;
g=4*c+c/4+5*y+y/4+3*(m+1)/5+d-3;
j=g;
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=y0;
z=8*c+c/4+5*y+y/4+3*(m+1)/5+d+7+i;
j=z+6;
if(j>7)j=j;
return (j);
}
int ttian(int t1,int t2) /*计算时对应的天干*/
{ int i;
// if(t1%5==0)i=9;
// else
i=(t1*2-1)+(t2/100+1)/2;
i=i;
return (i);
}
int ttd(int t)
{ int tem;
t=t/100;
if(t>=1&&t
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天干 一 一对应
地支计算
年 -3 再 取余 所得余数 与12地支 一 一对应
月的天干地支计算(阳历)
天干计算
年天干数%5 取余 所得余数*2+1 加上月份-2 与天干 一 一对应
(只有5个,按余数0-4,甲丙戊庚壬)
地支计算
丑寅卯辰巳午未申酉戌亥子 与12月一 一对应
从已知日期计算干支纪日的公式为:
G = 4C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d - 3
Z = 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的余数是地支。
计算时带[ ]的数表示取整。
例如:查2006年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位是‘申’。
答案是:2006年4月1日的干支日是庚申日。
12时辰对应的天干地支
天干计算
甲乙丙丁戊己庚辛壬癸 日天干 *2-1+((time0+1)/2)
与10天干一 一对应
地支计算
子丑寅卯辰巳午未申酉戌亥 与12时辰一 一对应
/*************************************************************************************/
查询方法来源于网络,本人整理、计算、总结。
最后,以上代码仅用于学习交流。