2012-08-17 2 views
-4

입력 n, 소수점 다음 정확히 2 자리를 유지하면서 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

무엇이 문제입니까? –

+0

이 코드는 별도의'result' float을 가짐으로써 개선 될 것이고 각'if' 문에서'result = abs (m)'또는'result = 2 * m + 5'를' printf ("% 1.2f", 결과);'끝에. – huon

+0

또한 계산을 수행 한 후'main '에서'scanf'와'printf ("% 1.2f", f (m)) 함수를 가진'float f (float x) {...}'함수를 정의해야합니다. '. – huon

답변

2

마지막 주위에 괄호가 필요합니다. 해야 당신이 당신의 마지막 경우에 같은 실수를하지 않는 것이 방법 :

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

또는 더 나은 :

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

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

또한, 첫 번째 경우는 다음과 같이 쓸 수있다

이지만 실제로는 원래 수식보다 최적화되어 컴파일러와 해당 옵션에 따라 성능이 더 좋을 수도 있고 그렇지 않을 수도 있습니다.

6

귀하의 마지막 if -statement는 m = m + 5;if의 "몸"의 부족과

(모든 조건에 대해) 각 상황에서 실행됩니다, 그렇지 않으면

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

해야합니다, 잘못 그냥 쓸 수

또는

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

당신은 당신은 모든 if 블록에 괄호를 사용해야 다른

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

대신

else if (m >= 4) 
    m = (m * 2); 
m = m + 5; 
관련 문제