计算平均值C ++

时间:2014-02-16 16:47:25

标签: c++

我需要在平均值中显示两位小数。现在,它舍入到最接近的数字,并且当计算量为十分之一和百分之一时,显示零。我可能会忽略一些非常简单的事情。我认为将类型声明为double将允许它显示正确的计算。

double CalculateAverageScore(int score[],int numPlayers, double averageScore)
{
    double total = 0;
    for (int i = 0; i < numPlayers; i++)
    {
        total += score[i];
    }
    averageScore = total / numPlayers;
    cout << fixed << showpoint << setprecision(2);
    cout << "\nAverage Score: " << averageScore << endl;
    return averageScore;
}

2 个答案:

答案 0 :(得分:5)

averageScore = total / numPlayers;
                    ^^^
          integer division

为了保持双精度:

averageScore = static_cast< double>( total) / numPlayers;
                  ^^^
               explicit cast

但是,如果您将double除以int结果,则应该已经是double,并且不需要演员。


既然你已经解释过你有兴趣现在就听听最佳实践,在编程曲线的舞台上 - 你应该真正改变功能

double CalculateAverageScore(int score[],int numPlayers)
{
    //...
    double averageScore = total / numPlayers;
    return averageScore;
}

因为您之前已将averageScore作为参数但未使用它的初始值:

double CalculateAverageScore(int score[],int numPlayers, double averageScore)
{
    double total = 0.0;
    //...
    averageScore = total / numPlayers;
                 ^
           forget initial value, so it was useless
           == no need to pass averageScore as argument
    //....
} 

答案 1 :(得分:1)

根据您的示例,您的解决方案应该按原样运行。

double total = 0;
// ...
averageScore = total / numPlayers; // Result of division is of type double.

您要将double除以int,结果应为double。因此不需要演员表。

其他一些问题:

  • 您已将参数score声明为int*,允许客户端传递空值(并且您不会检查此值)。
  • 您已将参数numPlayers声明为int这是不好的做法,而是声明为std::size_t
  • averageScore被声明为参数但从不使用参数。而是将其声明为局部变量。
  • 您缺少const-correctness,即在您不打算修改时将参数传递为const

请考虑使用模板参数将score作为对int[N]的引用。然后,您不必将数组长度作为第二个参数传递。 E.g:

template <const std::size_t N>
double average(const int (&score)[N]) {
    return static_cast<double>(std::accumulate(std::begin(score), std::end(score), 0)) / N;
}

并用作:

int score[5] = { 2, 2, 3, 4, 5};
std::cout << std::fixed << std::showpoint << std::setprecision(2);
std::cout << average(score) << std::endl; // Outputs 3.20

或者使用标准库中的容器而不是score的内置数组,例如std::array