The C Programming Language 练习题4-2

来源:互联网 发布:js正则验证身份证号码 编辑:程序博客网 时间:2024/05/21 05:38

题目
对atof函数进行扩充,使它可以处理形如123.45e-6的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)。

题目分析
教材中atof函数已经处理到指数之前的位置,扩充只需判断后面是否有指数。

代码实现

#include <ctype.h>#include <stdio.h>double atof(char s[]){    double val, power;    int i, sign, eval, epower;    for (i = 0; isspace(s[i]); i++)        ;    sign = (s[i] == '-') ? -1 : 1;    if (s[i] == '+'  || s[i] =='-')        i++;    for (val = 0.0; isdigit(s[i]); i++)        val = 10.0 * val + (s[i] - '0');    if (s[i] == '.')        i++;    for (power = 1.0; isdigit(s[i]); i++)    {        val = 10.0 * val + (s[i] - '0');        power *= 10;    }    val = sign * val / power;    /*从此处开始判断是否有指数部分*/    if (s[i] == 'e' || s[i] == 'E')        i++;    sign = (s[i] == '-') ? -1 : 1;    if (s[i] == '-' || s[i] =='+')        i++;    for (eval = 0; isdigit(s[i]); i++)        eval = 10 * eval + (s[i] - '0');    for (epower = 1; eval > 0; eval--)        epower = 10 * epower;    if (sign > 0)        return val * epower;    else        return val / epower;}int main(){    char s1[] = "123.45e-3";    printf("%f\n", atof(s1));}
原创粉丝点击