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

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



//

//  main.c

//  生辰八字计算程序

//

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

//  Copyright © 2018年 恺铉(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;

            

}




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










  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值