找到数组c ++的平均值

时间:2014-11-07 04:21:01

标签: c++ arrays average

我正在尝试使用函数找到测验的平均值。我一直在调整它,但它只是不断返回10.程序的前提是要求用户提交他们的测验(其中有10个)。这些输入放在数组quizarray[]中。然后,我将所有信息从quizarray复制到另一个tempArray。然后对tempArray进行排序并将其用于calcQuizAverage函数。该函数应该返回两个平均值中的一个。这由numberOfQuizzes

决定
double calcQuizAverage(int quizArray[], int numberOfQuizzes) 
{ 
    int a;
    double avrg, sum, lowSum;
    a = 0;
    sum = 0;

    lowSum = quizArray[0] + quizArray[1];

    for (a=0; a< numberOfQuizzes; a++)
    {
        sum += double(quizArray[a]);
    }

    if (numberOfQuizzes <= 2)
    {
        avrg= double(((sum) / (10* numberOfQuizzes)) * 100);

        return avrg;
    }
    else if (numberOfQuizzes > 2)
    {
        avrg= double(((sum-lowSum) / (10* (numberOfQuizzes - 2)))*100);

        return avrg;
    }
} 

我已经检查了当numberOfQuizzes超过2时,sum和lowSum是否是它们的意思,看起来很好。如果numberOfQuizzes小于或等于2,则只返回10.

以下是代码的其余部分:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

//Symbolic Constants

const int MAX=12;

//Function Prototypes

int buildQuizArray(int[]);
void printArray(string,int[],int);
double calcQuizAverage(int[],int);
void sortArray(int[],int);

int main ()
{
    int quizScores[MAX];
    int compQuiz;
    int tempArray[MAX];
    double average;
    int temp;
    int i;

    average = 0;

    compQuiz = buildQuizArray(quizScores);

    for(int i=0; i<MAX; i++)
    {
         tempArray[i] = quizScores[i];
    }

    sortArray(tempArray, compQuiz);

    average = calcQuizAverage(tempArray, compQuiz);

    cout<<endl<<"Your quiz average is "<<average<<endl;

    printArray ("Quiz Scores", tempArray, compQuiz);



}



int buildQuizArray(int quizArray[])
{ 
    int numQuiz, input, a;
    a=0;
    numQuiz=1;

    cout << "Enter your score for quiz "<<numQuiz<<" (-1 to quit): ";
    cin >> input;

    while (input != -1)
    { 
        quizArray[a] = input;
        a++;
        numQuiz++;

        cout<< "Enter your score for quiz "<<numQuiz<<" (-1 to quit): ";
        cin >> input;

    } 
    return a+1;
} 



void printArray(string reportTitle, int quizArray[], int numberOfQuizzes)
{ 
    int a;

    cout<< endl <<reportTitle <<endl<<"-----------"<<endl;

    for (a=1; a<numberOfQuizzes; a++)
    {
        cout<< "Quiz " << a <<": " << setw(2) <<quizArray[a-1] <<"/10"<<endl;
    }
} 



double calcQuizAverage(int quizArray[], int numberOfQuizzes) 
{ 
    int a;
    double avrg, sum, lowSum;
    a = 0;
    sum = 0;

    lowSum = quizArray[0] + quizArray[1];

    for (a=0; a< numberOfQuizzes; a++)
    {
        sum += double(quizArray[a]);
    }

    if (numberOfQuizzes <= 2)
    {
        avrg= double(((sum) / (10* numberOfQuizzes)) * 100);

        return avrg;
    }
    else if (numberOfQuizzes > 2)
    {
        avrg= double(((sum-lowSum) / (10* (numberOfQuizzes - 2)))*100);

        return avrg;
    }
} 



void sortArray(int num[], int numberOfQuizzes) 
{ 
      int i, j, flag = 1;  
      int temp; 

      for(i = 1; (i <= numberOfQuizzes) && flag; i++)
     {
          flag = 0;
          for (j=0; j < (numberOfQuizzes -2); j++)
         {
               if (num[j+1] < num[j])
              { 
                    temp = num[j];
                    num[j] = num[j+1];
                    num[j+1] = temp;
                    flag = 1; 
               }
          }
     }
     return; 
}

3 个答案:

答案 0 :(得分:0)

如果没有进一步的解释,您的代码应该做什么是不可理解的。根据标题,您想要计算数组中的平均值吗? 以下代码将执行此操作:

double calcQuizAverage(int quizArray[], int numberOfQuizzes){
  double avrg = 0.0;
  int a = 0;
  for (a = 0; a< numberOfQuizzes; a++){
    avrg += quizArray[a];
  }
  return avrg / static_cast<double>(numberOfQuizzes);
}

int main(int argc, char* argv[]){
  int array[] = { 0, 1, 2};
  double x = calcQuizAverage(array, 3);
  return 0;
}

目前尚不清楚,你的附加if-clauses的原因是什么:你的函数应该总是返回一个值(你可能想要替换最后的&#39;否则如果&#39;只是&#39; ;否则&#39;?)

答案 1 :(得分:0)

avrg= double(((sum) / (10* numberOfQuizzes)) * 100);

e.g.
avrg = (sum/(numberofQuizzes*10.0))*100.0;

答案 2 :(得分:0)

由于您的sum变量是双倍的,因此您不需要在很多地方进行投射。 此外,您的代码可以通过而不是使用表单来整理:

int a;
a=0;
for (a=0; ...) {

改为写作:

for (int a=0; ...) {

您的buildQuizArray函数未返回输入的测验数量 - 我怀疑您打算写return a;,而不是return a+1;(这可能是关键问题)< / p>

关于向量,vector是使用#include <vector>通过标准库提供的容器类。矢量可以根据需要增长,并具有各种有用的功能,特别是myVector.size()返回myVector的长度。这样可以防止需要在阵列的任何位置传递大小。您也不需要分配特定的12个条目,从而允许更简单的sort函数(因为您不必避免尾随零)。

我还建议您lowSum仅在其使用的if循环内进行计算(和定义) - 这会缩小其范围(这不是一个真正的问题)并且意味着除非要使用它,否则你不必计算它(在小程序中也不重要,但一般值得考虑)