十进制与二进制小数的相互转换C语言
来源:互联网 发布:腾讯强力卸载软件 编辑:程序博客网 时间:2024/05/21 09:35
LinkStack * IntConverDToB(int t, LinkStack *s)/*十进制到二进制整数部分转换函数*/{ while(t != 0) { s = LStackPush(s,t % 2); t /= 2; } return s;}void DecConverDToB(float f,LinkQueue *l)/* 十进制到二进制小数部分转换函数*/{ int i = 0; while(i <= 6 && f != 0) { f = f * 2; if(f >= 1) { f -= 1; LQueueEnQueue(l,1); } else LQueueEnQueue(l,0); i ++; }}void GetRadixPoint(const char * chs, int *pos,int *len) /* 获取小数点位置以及串的长度 */ { int i = 0; int flag = FALSE; while('\0' != chs[i]) { if(chs[i] == '.') { *pos = i; flag = TRUE; } i ++; } if(flag) *len = i; else { *pos = -1; *len = i; }}int StringSplit(const char * chs, char * chs1,char *chs2) /* 拆分字符串chs,分成整数部分chs1和小数部分chs2 */{ int pos = 0, len = 0; int i = 0; int k = 0; GetRadixPoint(chs, &pos, &len); if(pos != -1) { for(i = 0; i < pos; i ++) chs1[i] = chs[i]; chs1[i] = '\0'; for(i = pos + 1; i < len; i ++) chs2[k ++] = chs[i]; chs2[k] = '\0'; } else return ERROR; return OK;}int IntConverBToD(char * chs, LinkStack *s)/* 二进制到十进制整数部分转换函数*/{ int i = 0; int sum = 0; int k = 1; int temp = 0; int tt=0;/*临时输出栈元素使用*/ while('\0' != chs[i]) { s = LStackPush(s,chs[i] - '0'); i++; } i = 0; while(!LStackIsEmpty(s)) { temp=LStackGetTop(s); s = LStackPop(s,&tt); if(temp != 1 && temp != 0) return -ERROR; if(0 == i) sum += temp; else { k *= 2; sum += temp * k; } i++; } return sum;}float DecConverBToD(char * chs ,LinkQueue *l)/* 二进制到十进制小数部分转换函数*/{ int i = 0; float sum = 0; float k = 1; int temp = 0; while('\0' != chs[i]) { LQueueEnQueue(l,chs[i] - '0'); i ++; } while(!LQueueIsEmpty(l)) { LQueueDeQueue(l,&temp); if(temp != 1 && temp != 0) return -ERROR; k /= 2; sum += temp * k; i++; } return sum;}
int main(int argc,char* argv[]){ int menu; int k; float temp; float f; LinkQueue *l; LinkStack *s = NULL; char chs[100]; char chs1[100]; char chs2[100]; DataType e; float num; int tt=0;/*输出栈元素时使用*/ printf(" 进制转换 \n"); while(TRUE) { l = LQueueCreateEmpty(); s = (LinkStack *)malloc(sizeof(LinkStack)); s->data=1; s->next=NULL; printf("*****************************************\n"); printf("** 1、10-2进制小数转换 **\n"); printf("** 2、2-10进制小数转换 **\n"); printf("** 3、退出 **\n"); printf("*****************************************\n"); scanf("%d",&menu); switch(menu) { case 1: getchar(); printf("请输入需要转换的数字:\n"); scanf("%f",&temp); if(temp > 1.0 && temp != (int)temp) {/* 如果输入的不是一个整数并且大于1 */ s = IntConverDToB((int)temp,s); DecConverDToB(temp - (int)temp,l); printf("转化后的二进制小数为:",temp); while(!LStackIsEmpty(s)) { printf("%d",LStackGetTop(s)); /* 输出整数部分 */ s=LStackPop(s,&tt); } printf(".",temp); while(!LQueueIsEmpty(l)) /* 输出小数部分 */ { LQueueDeQueue(l,&e); printf("%d",e); } printf("\n"); } else { if(temp == (int)temp) /* 如果输入的是一个整数 */ { printf("%d转化后的二进制小数为:",(int)temp); s = IntConverDToB((int)temp,s); while(!LStackIsEmpty(s)) /* 输出整数部分 */ { printf("%d",LStackGetTop(s)); s=LStackPop(s,&tt); } printf(".0\n"); } else /* 如果输入的是一个小于1的小数 */ { printf("----------\n"); printf("转化后的二进制小数为:",temp); DecConverDToB(temp,l); printf("0.",temp); while(!LQueueIsEmpty(l)) /* 输出小数部分 */ { LQueueDeQueue(l,&e); printf("%d",e); } printf("\n"); getchar(); } } break; case 2: getchar(); printf("请输入需要转换的二进制数字:\n"); gets(chs); k = StringSplit(chs,chs1,chs2); if(k != -1) { num = IntConverBToD(chs1,s); f = DecConverBToD(chs2,l); if(-1 != num && f != -1) printf("转化后的十进制形式为:%f\n",(float)num + f); else printf("输入格式错误\n"); } else { num = IntConverBToD(chs,s); if(-1 != num) printf("转化后的十进制形式为:%f\n",(float)num); else printf("输入格式错误\n"); } break; case 3: /* 退出 */ return 0; default: /* 输入不满足要求,提示输入错误 */ printf("输入错误,请重新输入!\n"); continue; } } return 0;}
阅读全文
0 0
- 十进制与二进制小数的相互转换C语言
- 十进制小数与二进制的相互转换
- 二进制与十进制的相互转换(小数)
- 二进制数与十进制数相互转换的C代码(C语言/C程序)
- 十进制小数分数与二进制的转换
- 十进制与二进制的相互转换
- 十进制小数与二进制小数之间的互相转换
- [十进制小数] 与 [二进制小数] 互相转换
- 十进制与二进制相互转换
- C语言实现二进制与十进制转换
- 小数的十进制与二进制之间的转换
- c/c++代码 No.13 二进制与十进制相互转换
- C语言实现十进制小数转二进制
- 二进制,八进制,十进制与十六进制之间的相互转换
- js实现二进制与十进制的相互转换
- Oracle里二进制与十进制的相互转换
- 实现二进制与十进制之间的相互转换
- 实现二进制与十进制之间的相互转换
- 数据库之MySQL5.7.20安装及乱码问题
- 在orcal数据库中循环插入的语句
- linux系统之pxe无人值守安装系统
- ios-保存密码
- elasticsearch 一、环境配置
- 十进制与二进制小数的相互转换C语言
- Linux 命令大全
- java异常处理
- 【TensorFlow】MNIST(使用LeNet5+滑动平均+正则化+指数衰减法+激活函数+模型持久化)
- pxe装机(http篇)
- 项目中,微信利用jweixin进行图片上传
- 线程中的一些方法(yield,sleep,wait)
- 如何将图片存到数据库中,并在前台显示:
- 【Maven实战】之灵活的构建