-4

输入 n,计算 f(n),精确保留小数点后 2 位。 分段函数

示例:输入 5 输出:15.00

(欢迎对下面的代码进行改进/建议)这是我到目前为止的想法;

#include <stdio.h>
#include <math.h>

int main() {
    float m;

    scanf("%f", &m);
    if (m < 0)
        m = abs(m);

    else if (m < 2)
        m = sqrt(m + 1);

    else if (m < 4)
        m = pow(m + 2, 5);

    else if (m >= 4)
        m = (m * 2);
    m = m + 5;

    printf("%1.2f", m);
}
4

3 回答 3

6

你最后if的陈述是错误的,必须是

else if (m >= 4)
{
    m = (m * 2);
    m = m + 5;
}

否则,m = m + 5;不在if“主体”之外,将在每种情况下执行(适用于所有条件)

或者,你可以写

else if (m >= 4)
    m = m * 2 + 5;
于 2012-08-17T12:36:54.377 回答
4

你需要在你的最后一个其他人周围戴上大括号

 else if (m >= 4) {
    m = (m * 2);
    m = m + 5;
 }

代替

 else if (m >= 4)
    m = (m * 2);
m = m + 5;
于 2012-08-17T12:37:36.103 回答
2

if您应该对所有块使用大括号。这样你就可以避免像你最后一个案例中的错误,应该是:

} else if (m >= 4) {
    m = (m * 2);
    m = m + 5;
}

甚至更好:

} else if (m >= 4) {
    m = (m * 2) + 5;
}

另外,第一种情况可以写成:

if (m < 0) {
    m = -m;
} else if ...

尽管这实际上是对原始公式的优化,并且可能会或可能不会根据编译器及其选项而提高性能。

于 2012-08-17T12:42:29.780 回答