问题 问答题

以下程序的功能是:(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

单项选择题
问答题 简答题