【发布时间】:2020-05-24 17:23:50
【问题描述】:
我有这个作业,我将在其中显示它的提示:
编写一个程序,从用户那里读取一组测试分数数据。 (测试 分数应以十进制形式输入以表示百分比等级)。一旦用户拥有 输入完考试成绩(输入-1表示输入结束),打印出成绩 输入的测试、测试的平均值和标准偏差。使用以下公式 (Welford 方法)计算标准差: (Standard Deviaton Formula)
您可以通过跟踪计数(测试次数)、总和和总和来计算此数量 处理输入值时的平方数。 注意:虽然还有其他方法可以计算标准差,但请使用此方法。这 使用方法是因为它只需要传递一次数据。不要使用数组或向量。
现在下面的代码是我目前所拥有的。在终端中,我得到了错误的平均值和标准数字。偏差输出(Terminal Output)。我的数学有什么问题吗?任何帮助表示赞赏。
#include <iostream>
#include <cmath>
using namespace std;
int main()
double sum = 0;
double sumSq = 0;
double grade = 0;
int numtests = 0;
cout << "Enter the test scores. Once finished, enter -1 to end input.\n";
cin >> grade;
while(grade != -1)
{
cin >>grade;
sum = sum + grade;
sumSq = sumSq + pow(grade,2);
numtests++;
}
double average =(sum/numtests);
double std = (sumSq - numtests*pow(average,2)/(numtests - 1));
cout << "The number of scores: "<<numtests<<"\n";
cout << "Average: "<<average<<"\n";
cout << "Std. Deviation: "<<std<<"\n";
return 0;
}
【问题讨论】:
-
bool cin = true将局部变量命名为cin是一个非常糟糕的主意,它隐藏了std::cin。无论如何,第一次之后,您在代码中的哪个位置阅读grade?也就是说,循环在哪里?如果你再也没有读过任何东西,你就不能指望grade改变值。 -
pow(2,grade)是 2 的grade幂,而不是grade的平方。 -
@kaylum 我是 C++ 新手,目前是我专业的第一年。你能解释一下你所说的阅读是什么意思吗?我还更新了删除布尔值的代码。
-
查看它的简单方法是在
cin >> grade;之后,grade只包含一个整数值。如果该值不是-1-- “成绩到底在哪里发生变化?” 那么while(grade != -1)会将其视为输入的第一级以外的其他内容?
标签: c++ math computer-science cmath