2012-08-17 83 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;