#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAXSIZE 20typedef struct                //实现顺序栈结构体
{int top;int data[MAXSIZE];
}Stack;void InitStack(Stack *&S)    //初始化栈
{S->top = -1;S->data[MAXSIZE]={0};} int Push(Stack *S,int i)    //进栈
{if(S->top > MAXSIZE-1){return 0;} S->top++;S->data[S->top]=i;
}int Pop(Stack *S)          //出栈
{int e;if(S->top == -1){return 0;}e = S->data[S->top];S->top--;return e;
}int GetTop(Stack *S)       //取栈顶元素
{int e;if(S->top == -1){return 0;}e = S->data[S->top];return e;
}void DTranB(Stack *S,int i)        //十进制 -> 二进制
{int n = i;while(i>0){Push(S,i%2);i /= 2;}printf("%d转换为二进制为:",n);while(S->top > -1){printf("%d",Pop(S));}printf("\n\n");
}void DTranH(Stack *S,int i)        //十进制 -> 十六进制
{int n = i;while(i>0){      Push(S,i%16);i /= 16;}printf("%d转换为十六进制为:0X",n);while(S->top > -1){switch(GetTop(S))        //根据栈顶元素来实现不同情况输出十六进制 {case(10):{           //当栈顶元素为10输出'a' printf("a");Pop(S);break;}case(11):{            //当栈顶元素为11输出'b' printf("b");Pop(S);break;}case(12):{            //当栈顶元素为12输出'c' printf("c");Pop(S);break;}case(13):{            //当栈顶元素为13输出'd' printf("d");Pop(S);break;}case(14):{            //当栈顶元素为14输出'e' printf("e");Pop(S);break;}case(15):{            //当栈顶元素为15输出'f' printf("f");Pop(S);break;}default:{         //其他情况输出0--9 printf("%d",Pop(S));             break;}}}printf("\n\n");
}int BTranD(Stack *S,int i)     //二进制 -> 十进制
{int n=i,D=0;while(i>0){Push(S,i%10);i /= 10;}while(S->top > -1){int b = (int)pow(2,S->top);        //把当前位数上的1或0乘以2的S->top次方 D += Pop(S)*b;}printf("%d转换为十进制为:%d\n\n",n,D);return D;
}int HTranD(Stack *S,char s[])  //十六进制 -> 十进制
{int len = strlen(s),D=0,h;   //算出字符串的长度,D为十进制加总 char o[10];                   //将原字符串保留到o中 strcpy(o,s);for(int i=0; i<len; i++) //根据不同情况实现十进制加总 {h = (int)pow(16,(len-1)-i);   //当前位数下应该乘以的16的某次幂 if(s[i]<97)               //当前字符为0-9时,数字乘以16的某次幂 {                     //97和48是根据字符转换为ascII码进行的运算 D += (s[i]-48)*h;}else if(s[i] == 'a') //当前字符为'a' {D += 10*h;}else if(s[i] == 'b') //当前字符为'b' {D += 11*h;}else if(s[i] == 'c') //当前字符为'c' {D += 12*h;}else if(s[i] == 'd') //当前字符为'd' {D += 13*h;}else if(s[i] == 'e') //当前字符为'e' {D += 14*h;}else                 //当前字符为'f' {D += 15*h;}}printf("0X%s转换为十进制为:%d\n",o,D);return D;
}void BTranH(Stack *S,int i)        //二进制 -> 十六进制
{DTranH(S,BTranD(S,i));     //二进制 -> 十进制 -> 十六进制
}void HTranB(Stack *S,char s[]) //十六进制 -> 二进制
{DTranB(S,HTranD(S,s));     //十六进制 -> 十进制 -> 二进制
}int main()
{Stack *S;S = (Stack*)malloc(sizeof(Stack));       //为栈分配空间 InitStack(S);while(1){printf("**********进制转换**********\n");//根据用户输入实现不同功能printf("1.二 -> 十\n");printf("2.二 -> 十六\n");printf("3.十六 -> 二\n");printf("4.十六 -> 十\n");printf("5.十 -> 二\n");printf("6.十 -> 十六\n");int o,i;printf("功能:");scanf("%d",&o);if(o==1||o==2||o==5||o==6){printf("要转换的数字:"); scanf("%d",&i);                } switch(o)                             //根据用户输入实现不同功能 {case(1):{           BTranD(S,i);break;}case(2):{ BTranH(S,i);break;}case(3):{char s[0];printf("要转换的数字:0X"); scanf("%s",&s);  HTranB(S,s);break;}case(4):{char s[0];printf("要转换的数字:0X"); scanf("%s",&s);   HTranD(S,s);break;}case(5):{DTranB(S,i);break;}case(6):{DTranH(S,i);break;}default:printf("输入错误\n");break;}}
}

运行结果



C语言实现二、十、十六进制的相互转换相关推荐

  1. 【C语言】二十二步了解函数栈帧(压栈、传参、返回、弹栈)

    阅读本文需要掌握的知识 熟练使用--c语言函数 进入正题前 首先我们为什么要学习函数的栈帧? 简单回答就是:增加内功 学习函数调用的底层代码,了解函数如何传参.如何返回 这样对于函数的使用有很大的帮助 ...

  2. 二,八,十六进制c语言,数制 二·八·十六进制 C语言

    各种进制的介绍及它们之间的转换 ,最重要的一点,一个很大的十进制数在转化为二进制时可以借助于十六进制或者八进制,然后再转化为二进制. C语言中的八进制 十六进制的表示方法,有3点应特别注意,第一点,八 ...

  3. python是最好的语言 永远二十岁_Python是世界上最好的语言吗?

    编程语言的选择是IT圈子永远的争议.在任意一个程序员聚集的场合,喊一句类似于"PHP是世界上最好的语言"这样的话,肯定会惹来不少人和你争论得面红耳赤.那么,python是世界上最好 ...

  4. C语言试题二十九之编写函数int function(int lim,int aa[max])求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。

    1. 题目 编写函数int function(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数. 2 .温馨提示 C语 ...

  5. C语言试题二十八之编写函数function功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。

    1. 题目 编写函数function,该函数的功能是:从字符中删除指定的字符,同一字母的大.小写按不同字符处理. 2 .温馨提示 C试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科 ...

  6. C语言试题二十五之编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数)。

    1. 题目 编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数). 2 .温馨提示 C语言试题汇总里可用于 ...

  7. C语言试题二十四之编写一个函数unsigned function(unsigned w),w使一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。

    1. 题目 请编写一个函数unsigned function(unsigned w),w使一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回. 比如:w是1 ...

  8. C语言试题二十二之定义了3×3的二维数组,并在主函数中赋值。函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。

    1. 题目 定义了3×3的二维数组,并在主函数中赋值.函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试 ...

  9. C语言试题二十之利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。

    1. 题目 编写函数function,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根. 迭代步骤如下: (1)取x1初值为0.0: (2)x0=x1,把x1的值赋各x0; (3 ...

  10. python是最好的语言 永远二十岁_“Python才是世界上最好的语言”

    比如,举个最简单的例子,我们想输出"Hello, World!".用 C ++ 你需要这样写: #include int main() { std::cout << & ...

最新文章

  1. hadoop2 自定义OutputFormat场景杂记
  2. 《编写高质量代码:改善c程序代码的125个建议》——第1章 数据,程序设计之根本建议1:认识ANSI C...
  3. 全民大数据时代已来 阿里数加平台详解
  4. 八数码问题——双向广度优先搜索解决
  5. IIS 之 Asp.Net项目内部运行详解
  6. (01)System Verilog验证理论
  7. 黑苹果efi制作_黑苹果微星B450AMD完美方案分享包括EFI制作工具及教程
  8. CAPL-如何调用外部的可执行程序
  9. 入手STM32单片机的知识点总结
  10. 笔记本显示器亮度调节脚本
  11. 从零到一制作个人网站
  12. java提取图片文字
  13. 微信开发者工具之页面跳转
  14. Kubernetes kubeadm 证书到期,更新证书
  15. 刘彬20000词汇01
  16. 聊天功能,实现:每增加一条消息整体往上移动,滚动查看聊天记录
  17. 大前研一系列思维导图
  18. 生日转换星座html,jQuery实现根据生日计算年龄 星座 生肖
  19. PC-DMIS 2019 校验测针注意事项
  20. 三菱modbusRTU通讯实例_实例 | 威纶触摸屏与三菱D700变频器通讯

热门文章

  1. input中blur失去焦点事件与点击事件冲突的解决方法(vue)
  2. springMVC之拦截未登录
  3. “爆打”团队阿尔法发布 以及 第四周任务
  4. 区分网络管理员和网络工程师
  5. 关于parcel的介绍
  6. 从获评毕马威中国领先地产科技50强 看贝壳的长期主义
  7. 【Java并发编程】闭锁
  8. python读取bin文件,转成16进制通信协议
  9. Percona 数据库
  10. java 非法字符uff5b,uff,老外说uff是什么意思