2012-08-17 60 views
-4

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

例如:输入5个输出:15.00

(改进/ suggetions欢迎到下面的代码)这里是我已经拿出为止;

#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); 
} 
+7

问题是什么? – 2012-08-17 12:36:54

+0

这个代码可能会通过单独的'result' float,然后在每个'if'语句中,根据需要设置'result = abs(m)'或'result = 2 * m + 5', printf(“%1.2f”,结果);'最后。 – huon 2012-08-17 12:39:08

+0

另外,你应该定义一个函数'float f(float x){...}'来进行计算,然后在main中只有'scanf'和'printf(“%1.2f”,f(m)) '。 – huon 2012-08-17 12:40:47

回答

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 ... 

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

6

你最后if语句来是错误的,必须

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

否则,m = m + 5;是出了if的‘身体’,并在每种情况下

执行(所有条件)

或者,你可以只写

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

你需要括号在你最后还有

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

,而不是

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