下面这个算法不用数组,是直接从键盘输入的。输入一串01字符串,开头可以有负号,中间也可以有小数点,遇到其他字符(包括空格、回车等等)就算结束。该算法的结果是double型。然后你在主程序中用printf("%lf",bi_input());就可以按十进制输出了。double bi_input(){ double x=0.0,y=1.0; int f=1,flag=0; while(1) { switch(flag) { case 0: switch(getchar()) /* flag==0:第一个字符,可以是负号或小数点,也可以是0或1 */ { case '1': flag=1;x=1; break; case '0': flag=1; break; case '-': flag=1;f=-1; break; case '.': flag=2; break; default: return(x*f);/* 遇非法字符(包括回车)结束输入 */ } break; case 1: switch(getchar()) /* flag==1:整数部分,可以是0或1,也可以是小数点 */ { case '1': x=x*2+1;break; case '0': x=x*2;break; case '.': flag=2; break; default: return(x*f);/* 遇非法字符(包括回车)结束输入 */ } break; case 2: y=y/2; /* flag==2:小数部分,可以是0或1 */ switch(getchar()) { case '1': x+=y;break; case '0': break; default: return(x*f);/* 遇非法字符(包括回车)结束输入 */ } } }} 【说明】上述算法中各变量说明:x是已经输入部分的绝对值,f是正负号。y是当前小数位的单位值。flag是状态标志:0——处理首字符;1——处理整数部分;2——处理小数部分。