2014-01-23 1 views
0

따라서 프로그램은 지정된 수의 점수를 수집 한 다음 오름차순으로 표시하고 은 평균 점수를 나타내는으로되어 있습니다. 하지만 지금은 첫 번째 점수 만 표시되며 점수의 수로 나뉩니다. 어떻게 올바르게 표시 할 수 있습니까?(C++) 평균 수익률을 계산하는 함수 (첫 번째 점수/총 점수 수)?

#include <iostream> 
#include <iomanip> 

using namespace std; 

void sortArray(int*, int); 
double getAverage(int*, int); 


int main() 
{ 
int *scores; 
int num_Tests; 

cout << "How many test scores would you like to enter?" << endl; 
cin >> num_Tests; 

scores = new int[num_Tests]; 

cout << "\nEnter score number (do not use negative numbers):\n"; 
    for (int count = 0; count < num_Tests; count++) 
    { 
    cout << count + 1 << ". "; 
    cin >> scores[count]; 
    } 

sortArray(scores, num_Tests); 

cout << "\n\n"; 
cout << "\n\n________________________________________________________________________________" << endl; 
cout << "Test Score List (in ascending order)" << endl; 
cout << "________________________________________________________________________________" << endl; 

    for (int count = 0; count < num_Tests; count++) 
    { 
    cout << count + 1 << ". "; 
    cout << scores[count] << endl; 
    } 

cout << "\nAverage test score: " << getAverage(scores, num_Tests) << endl; 

return 0; 
} 

double getAverage(int *scores, int size) 
{ 
double ttlScore = 0.0; 
double avgScore = 0.0; 

ttlScore += *scores; 
avgScore = ttlScore/size; 

return avgScore; 
} 

void sortArray(int *scores, int size) 
{ 
int temp; 
bool swap; 

    do 
    { swap = false; 
     for (int count = 0; count < (size - 1); count++) 
     { 
      if (scores[count] < scores[count + 1]) 
      { 
      temp = scores[count]; 
      scores[count] = scores[count + 1]; 
      scores[count + 1] = temp; 
      swap = true; 
      } 
     } 
    } while (swap); 
} 
+0

평균 점수는 모든 점수를 숫자로 나눈 값입니다. 따라서 합계를 계산하여 시작하십시오. –

+0

점수 배열을 반복 할 필요가 있습니다. 단지'ttlScore + = * score '만 할 수는 없으며,'ttlScore + = scores [index]'가되어야합니다. –

+0

또 다른 포인트는이 코드가 될 수 있다는 것입니다. 예를 들어 출력을 표시하기 위해 메인에서 더 많은 기능을 사용했다면 좀 더 깔끔합니다. 개인적인 취향의 문제지만 내 주요 기능이 깔끔하다 : P –

답변

0

당신은 추가 할 점수의 배열을 통해 루프가 필요, 당신은 단지 ttlScore += *scores을 할 수 없다, 그것은 ttlScore += scores[index]

예 할 필요 :

double getAverage(int *scores, int size) 
{ 
    double ttlScore = 0.0; 

    for (int i = 0; i < size; i++) 
    { 
     ttlScore += scores[i]; 
    } 

    return ttlScore/size; 
} 
0

getAverage 논리가 올바르지 않습니다. 첫 번째 번호 만 추가하고 있습니다. 추가는 다음과 같습니다 :

double getAverage(int *scores, int size) 
    { 
    double ttlScore = 0.0; 
    double avgScore = 0.0; 

    for(int i=0;i<size;i++) 
    { 
     ttlScore += *(scores+i); 
    } 
     avgScore = ttlScore/size; 
     return avgScore; 
    } 
+0

왜'for' 루프 밖에서'i'를 선언합니까? –

+0

thats better :) –

+0

@MatthewPigram 감사합니다. – Rahul

0

* 점수 배열의 시작을 참조합니다. 당신은 배열의 모든 값을 통해 요약 할 필요가 지적 : 난이 당신을 도울 것이라고 생각

for (int i=0; i < size; i++) 
{ 
ttlScore += scores[i]; 
} 
avgScore = ttlScore/size; 

return avgScore; 
+0

내 코드에서와 같이'return ttlScore/size'를 수행하는 것이 더 낫습니다. –

+0

Matthew가 말한 것 - 적은 작업. 최근에 필자가 작성한 일부 코드에서 주요 속도 저하의 원인. 분명히 나는 ​​배웠다! – chrisb2244

+0

또한 적은 메모리를 사용하지만이 작은 코드에는 중요하지 않지만 좋은 습관을 일찍 시작하는 것이 좋습니다. –

0

,

더블 getAverage (INT * 점수, INT 크기) {

int i, sum = 0;  
double avg;   

for (i = 0; i < size; ++i) 
    { 
    sum += scores[i]; 
    } 

avg = (double)sum/size; 

return avg; 

}

문제가 있으면 알려주세요.

0

저는 프로그래밍에 익숙하지 않지만 여기에 있습니다.

//average function 

double average(int* pnData) 

{ 

    double result; 

    int sum = 0;  //declare and initialize our variables 
    int count = 0; 

    for (int i = 0; i < pnData[i]; i++) 
    { 
      sum += pnData[i]; //sum = sum + elements of our array 
      count++;   //increment count 
    }//end of for loop 

    result = sum/(double)count; 
    return result; 
}//end of function average 

이렇게하면 배열의 길이 또는 개수를 알 필요가 없습니다.

관련 문제