2014-01-22 5 views
-4

C++ 배열을 배우고 있습니다. 아래의 코드에서 : 내가 생각하는배열 요소의 이상한 평균 값

double mean(int n, double *a) 
{ 
    double sum = 0; 
    for (int i=0; i<n; i++) 
    { 
     sum += a[i]; 
     return sum/n; 
    } 
} 

main() 
{ 
    double t[]={5, 5}; 
    cout << mean(2,t) << endl; 
} 

mean 수익률 2.5, 그것은 5로 반환해야하지만.

누가 2.53이 mean에서 반환 된 이유를 알고 있습니까?

+2

코드가 컴파일됩니까? 함수가 모든 브랜치에서 값을 반환하지 않는다고하지는 않습니까? – A4L

답변

0

현재 코드는 배열의 첫 번째 요소를 요소 수로 나눈 값을 반환합니다.

double mean(int n, double *a){ 
    double sum = 0; 
    for (int i=0; i<n; i++){ 
     sum += a[i]; 
    } 
    return sum/n; 
} 

을하지만 표준 라이브러리 알고리즘의 도움으로 당신은 당신의 코드를 단순화 할 수 있습니다 std::accumulate :이 문제를 해결하려면 당신은 단지 for 루프의 외부 return sum/n 문을 이동할 수 있습니다

inline double mean(int n, double *a) { 
    return std::accumulate(a, a + n, 0)/n; 
} 

그리고 here를 ' 그 실례입니다.

마지막으로 using namespace std을 피하고 항상 main 함수의 반환 유형을 지정해야합니다. 또한 컴파일러 경고를 켜십시오. would have been warned 코드에서 이상한 점이 있습니다.

2

return sum/n;for 외부에 있어야합니다.

코드를 단계별로 실행하십시오. a[0]sum에 추가 한 후 sum/n5/2을 반환합니다.