问答题
以下程序的功能是:
(1)模拟scanf函数调用时格式字符串中转换说明"%le"的转换功能,即接收键盘输入的一个以小数形式或指数形式表示的实数字符串,将该字符串转换成double类型数据;
(2)以小数形式输出该double类型数据。例如,若输入"123.4",则输出123. 400000;若输入"123. 4e5",则输出12340000.000000。
#include
double toDouble (char *s)
{
int e=0;
double t=0, idx=1.0;
char *p, sign='+';
for(p=s; *p &&(*p==' '|| *p=='/t');p++); /*跳过前面的空白符*/
if(*p=='+' || *p=='-') sign=*p++; /*符号处理*/
while(*p>='0' && *p<='9') /提取整数部分母/
{
t=t*10+(*p-'0');
p++;
}
if(*p=='.')
{
___(19)___; /*越过小数点,继续处理小数部分*/
idx/=10;
while(*p>='0' && *p<='9')
{
t+=(*p-'0')*idx;
p++;
idx/=10;
}
}
if (sign=='-') ___(20)___ ;
if(*p !='e' && *p !='E') /*若无指数部分,则结束转换*/
return t;
p++;
sign='+'; /*提取指数部分*/
if(*p=='+' || *p=='-')
sign=*p++;
while(*p>='0' && *p<='9')
{
e= ___(21)___ ;
p++;
}
if(sign=='-')idx=0.1;
else idx=10;
vrhile (e>0)
{
t*=idx;
___(22)___ ;
}
return t:
}
int main()
{
char ss[80];
gets (ss);
printf("%f/n", toDouble (ss));
return 0;
}
【正确答案】 (19)p++或++p
(20) t =- t
(21) e * 10 +*p - '0'
(22) e--或 --e
【答案解析】