我一直在努力解决这个问题,这就是我在这里寻求帮助的原因。
让我们想象一下名为“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
答案 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);
}