一个关于浮点数用二进制表达的问题,求指教
程序代码:
#include "stdio.h" char a[32]; void changex(float x)//小数部分转换 { int w=(int)(x*2); if(x!=0) { if(w<10) printf("%d",w); else printf("%c",'A'+w-10); changex((x*2)-w); } else return; } change2(int a)//整数部分转换 { int j,k; if(a==0) return 0; else { j=a%2; k=a/2; change2(k); printf("%d",j); } } change() { int k,z; float x,y; printf("请输入一个数字:"); scanf("%f",&x); if(x<0) x=-x; k=(int)(x); change2(k); z=(int)x,y=x-z; if(y!=0) { printf("."); changex(y); } } void Init()//输入待转数的二进制数 { int i; printf("请输入您要转换的23位二进制数,位数不够的在前面补0:"); for(i=9;i<32;i++) { scanf("%c",&a[i]); if(a[i]=='\n') break; } } void PrintYuanMa() { int i; for(i=0;i<8;i++) printf("%c",a[i]); } void PrintFanMa() { int i; for(i=9;i<32;i++) { if(a[i]=='1') printf("0"); if(a[i]=='0') printf("1"); } printf("\n"); } void PrintBuMa() { int j; if(a[0]=='1') { for(j=9;j<32;j++) { if(a[j]=='1') a[j]='0'; else a[j]='1'; } a[0]='1'; int mark=0;int i; for(i=31;i>=9;i--) { if(mark==1||i==31) { a[i]=a[i]+1; if(a[i]=='2') { a[i]='0'; mark=1; } else mark=0; } } PrintYuanMa(); } else { if(a[0]=='0') { PrintYuanMa(); } } } void main() { char a[32]; change(); Init(); PrintBuMa(); }
我想问的是,为什么我无法进行二次输入。就是当我的实数被转换成2进制后,为什么我的Init函数没有起到输入的功能。直接跳完了。