m0_61684943 2021-11-18 17:58 采纳率: 73.8%
浏览 48
已结题

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

img


把函数写出来加以解释

  • 写回答

1条回答 默认 最新

  • 关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月18日