问答题 以下程序的功能是: (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
【答案解析】