我必须找到给出的最低输入,然后平均总数减去最低分数。我的averageScore
函数从阵列中找到最低分,我遇到了一些麻烦。我输出非常奇怪的数字。任何关于如何调整这一点的建议将不胜感激。提前谢谢。
#include <iostream>
#include <cstdlib>
using namespace std;
//function prototypes
double* allocate(int&);
double averageScore(int&);
int main()
{
double* testArray;
int numOfScores;
double average;
testArray = allocate(numOfScores);
average = averageScore(numOfScores);
//delete memory created
delete[] testArray;
return 0;
}
//function to collect user info, dynamically allocate
double* allocate(int &numOfScores)
{
double* testArray;
//prompt user for scores
cout << "How many test scores would\n";
cout << "you like to process: ";
//user input validation
if(!(cin >> numOfScores))
{
cout << "Invalid input!\n";
cout << "Program termination, please\n";
cout << "restart the program." << endl;
exit(0);
}
else if(numOfScores < 0)
{
cout << "Invalid input!\n";
cout << "Program termination, please\n";
cout << "restart the program." << endl;
exit(0);
}
//dynammically allocate an arrray to hold the scores
testArray = new double[numOfScores];
//get the scores from user
for (int count = 0; count < numOfScores; count++)
{
cout << "Enter Score: ";
//user input validation
if(!(cin >> testArray[count]))
{
cout << "Invalid input!\n";
cout << "Program termination, please\n";
cout << "restart the program." << endl;
exit(0);
}
else if(testArray[count] < 0.0)
{
cout << "Invalid input!\n";
cout << "Program termination, please\n";
cout << "restart the program." << endl;
exit(0);
}
}
return testArray;
}
//function to calculate the average score
double averageScore(int &numOfScores)
{
double* testArray;
double total,
average,
scores[0],
lowest;
lowest = scores[0];
//calculate total scores entered
for(int count = 0; count < numOfScores; count++)
{
total += testArray[count];
//find lowest score entered
for(int count = 1; count < numOfScores; count++)
{
if (testArray[numOfScores] < lowest)
lowest = scores[numOfScores];
}
}
//average the total amount of scores drop the lowest
average = (total - lowest) / numOfScores;
cout << "The average test score is: " << average << endl;
cout << "Lowest is: " << lowest << endl;
return average;
}
答案 0 :(得分:3)
std::vector<double> scores = {1.2,6.5,3.0,8.3,4.8,6,7.7};
// drop lowest score
scores.erase(min_element(begin(scores),end(scores)));
double average = accumulate(begin(scores),end(scores),0.0)/scores.size();
答案 1 :(得分:2)
我想你想改变这一行:
if(testArray[numOfScores] < lowest)
到此:
if(testArray[count] < lowest)
另外,正如@jzworkman指出的那样,平均值的分母应该是(numScores - 1),因为你从分子中消除了最低分。 (如果适用,您可能希望测试只有一个分数的边缘情况,一旦消除最低分数,就不会有任何平均值。)
答案 2 :(得分:2)
夫妻问题。你不应该嵌套这两个for循环(而只是使用if语句检查值是否低于最低值)。
由于这是作业,我会给你步骤,然后你可以修复你的代码
答案 3 :(得分:1)
您的averageScore
功能存在很多问题,但我现在将介绍最基本的功能。
首先,你应该传递一些数据。现在你正在使用testArray
我甚至看不到它的分配位置。当你运行它时,我很惊讶你没有得到分段错误。
但它也没有初始化。在c ++中,当您声明指针时,它指向的变量具有值。它有一个垃圾值,如果你用该垃圾值执行算术运算,那么你的输出也是垃圾。
您必须为您的averageScore
功能提供分数列表,最好将其作为参数传递。
平均功能的开头如下所示:
double averageScore(int &numOfScores)
{
double* testArray;
...
相反它应该看起来像这样
double averageScore(double*testArray, int numOfScores)
{
...
当您使用&numOfScores
代替numOfScores
时,这意味着如果您更改了numOfScores
功能中的averageScore
,则会更改main
中的double* testArray;
功能也是如此,你不应该这样做。
现在,在averageScore
行上,你正在声明一个名为“testArray”的全新指针,并且其中没有有意义的数据,尽管它可能充满垃圾。可能还有其他双指针变量,在代码中名为“testArray”,但它们都不属于testArray
函数的范围。如果您在方法调用中传递double someNumber = testArray[i]
,则可以使用它。例如:`double averageScore(double testArray[], int numOfScores)`
。
请记住,您的数组也是通过引用传递的。如果您希望按值传递它,可以尝试
{{1}}
但不要引用我那个
一旦你完成了,你的代码仍然会有一些问题,但输出应该足够有意义,你希望能够自己解决这些问题。