一、题目
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<stdio.h>
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=%g\n",result);
return 0;
}
运行结果:
please input:12.456
result=12.456
按任意键关闭终端。
please input:0.00123456
result=0.00123456
按任意键关闭终端。