阵列上的平均值

时间:2014-11-12 21:58:47

标签: c++ c

我一直在努力解决这个问题,这就是我在这里寻求帮助的原因。

让我们想象一下名为“score”

的数组的以下值集
20 30 40 50 10 20 40 10

我想要做的是创建一个循环,计算每4个值的平均值。在这种情况下,做手动数学应该是

(20+30+40+50)/4
(10+20+40+10)/4 

现在,我的观点和问题是我不知道如何用一个循环来做到这一点。我知道我可以设置两个循环,然后这样做,但是如果数组更大那么显而易见的是我必须设置数百个循环。现在我所做的解决方案离真正的解决方案很远

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string names[4] = {"Peter","Mark","July","Sarah"};
  double scores [16] = {20,30,100,60,30,40,10,90,10,99,100,12,100,100,10,100};
  double average[4] ;
  int i;

    for (int d = 0, i = 0; d < 4 - 1; d++)
    {
        average[i] += scores[d];
        if (d % 4 == 0) {
            average[i] /= 4;
            i++;
        }
    }

    for (int l = 0 ; l < 4 ; l++)
    {

        cout << "\nName : " << names[l] << endl << endl ;
        cout << "Average :  " << average[l] << endl;

    }

}

期望的输出:

姓名:彼得 平均值:52.5 姓名:马克 平均值:42.5 姓名:七月 平均值:55.25 姓名:莎拉 平均值:77.5

实际输出: 姓名:彼得 平均:5 姓名:马克 平均:130 姓名:七月 平均值:3.11076e-317 姓名:莎拉 平均值:6.90921e-310

5 个答案:

答案 0 :(得分:2)

假设我了解您的输入数据和您的目标,我相信像这样简单的事情应该有效:

for (int i=0; i < num_students; i++)
    average[i] = std::accumulate(scores + 4*i, scores + 4*i + 4, 0) / 4;

答案 1 :(得分:2)

我认为你想要使用c ++的基础知识。以下代码将为您提供所需的输出。

      string names[4] = {"Peter","Mark","July","Sarah"};
      double scores [16] = {20,30,100,60,30,40,10,90,10,99,100,12,100,100,10,100};
      double average[4] ;
      int i;

        for (int d = 1, i = 0; d <= 16; d++)
        {
            average[i] += scores[d-1];
            if (d % 4 == 0) {
                average[i] /= 4;
                i++;
            }
        }

        for (int l = 0 ; l < 4 ; l++)
        {

            cout << "\nName : " << names[l] << endl << endl ;
            cout << "Average :  " << average[l] << endl;

        }

答案 2 :(得分:1)

试试这个:

average[0] = 0;
average[1] = 0;
for (unsigned int i = 0; i < scores_students; ++i)
{
  average[0] += scores[0 + i];
  average[1] += scores[4 + i];
}
average[0] = average[0] / scores_students;
average[1] = average[1] / scores_students;

请注意scores[0 + i]使用第一组4中的分数 此外,scores[4 + i]使用第二组4中的分数。

答案 3 :(得分:0)

这是我想到的第一件事。

   #include <iostream>
#include <string>

using namespace std;

int main()
{
    string names[4] = {"Peter","Mark","July","Sarah"};
    double scores[16] = {20,30,100,60,30,40,10,90,10,99,100,12,100,100,10,100};
    double average[4];
    for(int i = 0; i < 16 + 1; i+=4)
    {
        if(i != 0 && i % 4 == 0)
            average[(i / 4)-1] = (scores[i-4]+scores[i-3]+scores[i-2]+scores[i-1]) / 4;
    }
    for (int l = 0 ; l < 4 ; l++)
    {

        cout << "\nName : " << names[l] << endl << endl ;
        cout << "Average :  " << average[l] << endl;

    }
    return 0;
}

答案 4 :(得分:0)

据我了解您的问题,您的主要目标是创建最快速的代码。你想只有一个没有任何if语句的循环。

我的解决方案#1:

int scores[] = {20,30,100,60,30,40,10,90,10,99,100,12,100,100,10,100};
double avgs[4] = {};

for (int it = 0; it < 16; ++it)
{
    avgs[it / 4] += scores[it] / 4.0;
}

for (int it = 0; it < 4; ++it)
{
    cout << it << ": " << avgs[it] << endl;
}

我的解决方案#2:

double accumulate(int input[4])
{
    return (input[0] + input[1] + input[2] + input[3]) / 4.0;
}

for (int it = 0; it < 4; ++it)
{
    avgs[it] = accumulate(scores + 4 * it);
}