010:拼数。模拟编译程序,将以字符形式读入的数字序列转换成对应的实数。例如,由键盘输入‘1’,‘2’,‘3’,‘.’,‘4’,‘5’要转换成对应的实数123.45。(书例3.37)
二、代码实现 思路:输入的字符‘1’转成数字1只需要‘1’-‘0’即可,(字符1的ASCII码是49,字符0的ASCII码是48),如果再输入‘2’,通过result=result*10+‘2’-‘0’,就能得到12,依次进行。出现小数点后,先仍按照整数处理,如123.45,先按照整数12345处理,再除以10^2,得到123.45代码如下:
//010:拼数。模拟编译程序,将以字符形式读入的数字序列转换成对应的实数。例如,由键盘输入‘1’,‘2’,‘3’,‘.’,‘4’,‘5’要转换成对应的实数123.45 # include运行结果:int main() { char ch;//读取的字符 double result;//准备输出的结果 int scale;//输入中若含有小数点,将result除以scale以实现小数点移位 result=0; printf("please input:"); scanf("%c",&ch);//键盘键入后,程序逐个读取ch字符并执行操作 do { result=10*result+(ch-'0');//将字符转化成数字 scanf("%c",&ch); } while(ch>='0'&&ch<='9'); if(ch=='.')//出现小数点后,循环加上要除的规模,其余类同 { scale=1; scanf("%c",&ch); do { result=10*result+(ch-'0'); scale*=10; scanf("%c",&ch); } while(ch>='0'&&ch<='9'); result/=scale;//得到最后输出 } printf("result=%gn",result); return 0; }
please input:12.456 result=12.456 按任意键关闭终端。
please input:0.00123456 result=0.00123456 按任意键关闭终端。注意%g格式输出可以去掉后面无意义的0,但是只能保留6位有效数字



