100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C语言编写生辰八字计算器

C语言编写生辰八字计算器

时间:2022-09-08 13:34:39

相关推荐

C语言编写生辰八字计算器

笔者在网上搜索并查看了关于计算生辰八字的各种计算方法,然后一个人研究构思花了三天左右写下了下面计算生辰八字的C程序,然后经过多次修改和数据试验发现还是存在问题的,希望看到并仔细研究的读者能够帮我纠正。如有更好的算法请联系我!谢谢!(微信:Zhangsir1949)

//

// main.c

// 生辰八字计算程序

//

// Created by 恺铉(zkx1949) on /3/7.

// Copyright © 恺铉(zkx1949). All rights reserved.

//

#include <stdio.h>

int main(int argc, const char * argv[])

{

int sl[8];

int y,m,d,h,minute;

int a=0;

printf("请输入您的出生年月日时,输入格式例如:“1997/03/22/01:38” 「范围(1900-2099)」:");

scanf("%d/%d/%d/%d:%d",&y,&m,&d,&h,&minute);

//年干支计算

sl[0]=(y%10)-3;

if(sl[0]<=0)

sl[0]=sl[0]+10;

//年干计算********************************************************

if(y>= 2000&&y<=2099)//2000-2099年年支计算************************************

{

sl[1]=(y%100+5)%12;

}

else if(y>=1900&&y<=1999)

{

sl[1]=(y%100+1)%12;//1900-1999年年支计算**************************************

}

else

{

printf("超出范围!!! 范围(1900-2099)");

}

//月干支计算

sl[2]=(sl[0]*2+m-1)%10;//月干计算*******************************************************

sl[3]=(m+1)%12;

if(sl[3]<=0)

{sl[3]=sl[3]+12;}

//月支计算**********************************************************

//日干支计算

if(y>=2000)

{

int α=((y-2000)/4)*1461;

int β=(y-2000)%4;

int x=0;

if(y%4!=0)

{

switch (m)

{

case 1:

x=d-1;

break;

case 2:

x=31+d-1;

break;

case 3:

x=59+d-1;

break;

case 4:

x=90+d-1;

break;

case 5:

x=120+d-1;

break;

case 6:

x=151+d-1;

break;

case 7:

x=181+d-1;

break;

case 8:

x=213+d-1;

break;

case 9:

x=243+d-1;

break;

case 10:

x=273+d-1;

break;

case 11:

x=304+d-1;

break;

case 12:

x=334+d-1;

break;

default:

break;

}

}

else

{

switch (m)

{

case 1:

x=d-1;

break;

case 2:

x=31+d-1;

break;

case 3:

x=60+d-1;

break;

case 4:

x=91+d-1;

break;

case 5:

x=121+d-1;

break;

case 6:

x=152+d-1;

break;

case 7:

x=182+d-1;

break;

case 8:

x=214+d-1;

break;

case 9:

x=244+d-1;

break;

case 10:

x=274+d-1;

break;

case 11:

x=305+d-1;

break;

case 12:

x=335+d-1;

break;

default:

break;

}

}

switch (β)

{

case 0:

a=α+x;

break;

case 1:

a=366+α+x;

break;

case 2:

a=366+365+α+x;

break;

case 3:

a=366+365+365+α+x;

break;

}

sl[4]=(a-5)%10;//2000年及以后日干计算*************************************************

sl[5]=(a-5)%12;//2000年及以后日支计算*************************************************

}

else

{

int x=0;

if(y%4!=0)

{

switch (m)

{

case 1:

x=366-d;

break;

case 2:

x=335-d;

break;

case 3:

x=307-d;

break;

case 4:

x=276-d;

break;

case 5:

x=246-d;

break;

case 6:

x=215-d;

break;

case 7:

x=185-d;

break;

case 8:

x=154-d;

break;

case 9:

x=123-d;

break;

case 10:

x=93-d;

break;

case 11:

x=62-d;

break;

case 12:

x=32-d;

break;

default:

break;

}

}

else

{

switch (m)

{

case 1:

x=367-d;

break;

case 2:

x=336-d;

break;

case 3:

x=308-d;

break;

case 4:

x=277-d;

break;

case 5:

x=247-d;

break;

case 6:

x=216-d;

break;

case 7:

x=186-d;

break;

case 8:

x=155-d;

break;

case 9:

x=124-d;

break;

case 10:

x=94-d;

break;

case 11:

x=63-d;

break;

case 12:

x=33-d;

break;

default:

break;

}

}

a=x+((1999-y)/4)*1461+((1999-y)%4)*365;

sl[4]=10-((a+5)%10);//2000年以前日干计算*********************************************

sl[5]=12-((a+5)%12);//2000年以前日支计算*********************************************

}

//时干支计算

switch (h)

{

case 23:sl[7]=1;

break;

case 0:sl[7]=1;

break;

case 1:sl[7]=2;

break;

case 2:sl[7]=2;

break;

case 3:sl[7]=3;

break;

case 4:sl[7]=3;

break;

case 5:sl[7]=4;

break;

case 6:sl[7]=4;

break;

case 7:sl[7]=5;

break;

case 8:sl[7]=5;

break;

case 9:sl[7]=6;

break;

case 10:sl[7]=6;

break;

case 11:sl[7]=7;

break;

case 12:sl[7]=7;

break;

case 13:sl[7]=8;

break;

case 14:sl[7]=8;

break;

case 15:sl[7]=9;

break;

case 16:sl[7]=9;

break;

case 17:sl[7]=10;

break;

case 18:sl[7]=10;

break;

case 19:sl[7]=11;

break;

case 20:sl[7]=11;

break;

case 21:sl[7]=12;

break;

case 22:sl[7]=12;

break;

}//时支计算****************************************************************************

sl[6]=(sl[4]*2+sl[7]-2)%10;//时干计算*************************************************

int i=0;

for(i=0;i<8;i++)

{

if(i%2==0)

{

switch (sl[i])

{

case 1:

printf("甲");

break;

case 2:

printf("乙");

break;

case 3:

printf("丙");

break;

case 4:

printf("丁");

break;

case 5:

printf("戊");

break;

case 6:

printf("己");

break;

case 7:

printf("庚");

break;

case 8:

printf("辛");

break;

case 9:

printf("壬");

break;

case 0:

printf("癸");

break;

case 10:

printf("癸");

break;

default:

break;

}

}

else

{

switch (sl[i])

{

case 1:

printf("子");

break;

case 2:

printf("丑");

break;

case 3:

printf("寅");

break;

case 4:

printf("卯");

break;

case 5:

printf("辰");

break;

case 6:

printf("巳");

break;

case 7:

printf("午");

break;

case 8:

printf("未");

break;

case 9:

printf("申");

break;

case 10:

printf("酉");

break;

case 11:

printf("戌");

break;

case 0:

printf("亥");

break;

case 12:

printf("亥");

break;

default:

break;

}

}

}

printf("为您的生辰八字\n");

printf("%d/%d/%d/%d/%d/%d/%d/%d\n",sl[0],sl[1],sl[2],sl[3],sl[4],sl[5],sl[6],sl[7]);

return 0;

}

感谢您抽出宝贵时间来阅读此程序,此程序还有不足的地方和关于生辰八字错误的算法,请读者务必用您锐利的眼睛和严谨的思维帮我发觉出来,笔者在这里感激不尽!!!

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