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;
}
感谢您抽出宝贵时间来阅读此程序,此程序还有不足的地方和关于生辰八字错误的算法,请读者务必用您锐利的眼睛和严谨的思维帮我发觉出来,笔者在这里感激不尽!!!
C语言编写生辰八字计算器相关推荐
- 软件工程-c语言--基于at89c51单片机c语言编写的计算器,基于AT89C1单片机C语言编写的计算器.doc...
基于AT89C1单片机C语言编写的计算器 #include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; ...
- 用C语言编写简易计算器
用C语言中的switch语句实现简易的四则运算计算器 #include<stdio.h> int main() {double number1=0.0;double number2=0.0 ...
- c程序语言编写 计算器,C语言编写简单计算器
主函数 main() { int result; /*运算的结果*/ printf("*****************************************\n"); ...
- java语言编写计算器_第二次作业利用java语言编写计算器进行四则运算
随着第一次作业的完成,助教 牛老师又布置了第二次作业:用java语言编写一个程序然后进行四则运算用户用键盘输入一个字符来结束程序显示统计结果.一开始看到这个题目我也着实吓了一跳 因为不知道如何下手而且 ...
- 十位数连加 c语言,用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除....
用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除. 用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除. 人气:435 ℃时间:2020-04-10 06:55:13 优质解答 ...
- (C语言)静态栈编写简单计算器(感悟与详细解析)
C语言数据结构静态栈--计算器的实现 下面我来详细的解释一下我编写的计算器代码.... 有必要先说明一下的是,此代码中含有两个栈:数据栈和算符栈: 数据栈:存放double型数字: 算符栈:存放cha ...
- C语言编写的简单计算器程序
这两天在看一个C语言写的计算器程序,做了不少的功夫,跟着作者一步步的进行完善,了解了许多细节性的东西,在此自己做个总结,加深自己对程序的印象,也算是梳理. 在该计算器程序,能进行加减乘除.sin.co ...
- c语言计算机编程例题详解,计算机C语言编写程序题及答案解析精选.doc
计算机C语言编写程序题及答案解析精选 2011年计算机二级C语言编写程序题及答案解析精选 [4.1]已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年月息利率 ...
- c语言随机产生三个大写字母,C语言编写的随机产生四则运算测试题
题目:编写一个四则运算测试题的程序,要求每道题都要随机产生 解题思路: 1.编写测试题,且为30道,就要用到循环函数,因此想到用for()函数 2.随机产生两个数,就想到用rand()函数. 注:1. ...
最新文章
- REACT day 1
- Mac vscode 调试打印有问题 输出缓冲区 “\r\n“
- oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...
- java excel处理框架,Java三方—-excel框架之POI的使用一
- 【Matlab/C/Python/VB/...】代码复制到word时如何变成彩色的
- oss按量付费_ACP云计算笔记—VPCamp;OSS
- 创业须要恪守“一个常识“
- 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
- SpringBoot项目解决 log4j2 核弹漏洞
- 获取三角形外接圆的圆心坐标、半径
- Python基于OpenCV的人脸集合相似度检测系统(源码&UI&教程)
- 【思维导图】本博客技术思维导图
- 16数码管静态显示(74hc_595)
- 获取iframe里面的数据
- 下载pyboard的flash中的驱动程序_驱动人生下载-驱动人生绿色最新下载正式版
- epub文件是什么文件?哪里有epub图书资源?如何打开?
- android app防止锁屏_解决安卓app锁屏掉线问题
- 程序设计思维模测 - M4
- 1027: 伊顿公学进入名校人数第2题(2级)输入两个用空格分隔的整数m和n,分别表示某年的毕业生人数和该年度进入某名校的百分比。输出输出一个整数count,表示该年度进入该名校的学生人数
- 西北乱跑娃 --- bottle框架部署pytorch模型