2014-01-23 55 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 + = *分數',它需要'ttlScore + =分數[index]' –

+0

我可能會提出的另一點是這個代碼可能是如果你在你的main中使用了更多的功能(例如顯示輸出),那麼它就有點整潔。它是個人喜好的問題,但我喜歡我的主要功能: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 for循環之外聲明'i'? –

+0

這就是更好:) –

+0

@MatthewPigram謝謝。 – Rahul

0

*分數引用數組的開始。你需要總和所有的數組的值的指出:

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

return avgScore; 
+0

如我的代碼 –

+0

那樣執行'return ttlScore/size'會更好 - 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 

這樣您不必知道數組的長度或數量。