关于c语言的一个程序(设计函数)

img


把函数写出来加以解释

#include <stdio.h>
double atof(char s[])
{
    double val, val2, power;
    int sign, sign2, i, p;
    //去掉字符串中的空格
    for (i = 0; s[i]==' '; ++i)
        ;
    //判断正负数 ,并将i指向下一个位置
    sign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-')
        i++;
    //取浮点数的整数部分
    for (val = 0.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
        val = 10 * val + s[i] - '0';
    //取小数点
    if (s[i] == '.')
        i++; //后一个位置
    //取小数点后面数
    for (power = 1.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
    {
        val = 10 * val + s[i] - '0';
        power *= 10; //float 放大的倍数
    }
    val = sign * val / power;
    //如果有e的话处理e后面的数字
    if (s[i] == 'e' || s[i] == 'E')
    {
        i++;
        sign2 = (s[i] == '-') ? -1 : 1;
        if (s[i] == '+' || s[i] == '-')
            i++;
        for (val2 = 0.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
        {
            val2 = 10 * val2 + s[i] - '0';
        }
        p = 1;
        for (i = 0; i < val2; i++)
            p *= 10;
        if (sign2 == -1)
            return val / p;
        else
            return val * p;
    }
    return val;
}

#define MAXLINE 80

int main()
{
    char s[MAXLINE];
    scanf("%s", s);
    printf("%f\n", atof(s));

    return 0;
}