嗨,我还是这个编码的新手。这是我最后的编程任务,遇到了一些麻烦。这是我的程序分配:
程序需要定义一个整数数组来存储10个考试分数,并要求用户将这10个分数输入该数组(输入验证)。然后将数组传递给一个函数并返回该数组的最小值的索引,然后将该数组传递给另一个函数并返回该数组的最大值的索引,然后将该数组传递给第三个函数以计算平均值( )中得分最低的那些考试分数,然后返回平均分数。这些功能中没有输入和输出。最后,在主函数中输出min和max的索引,min和max的值以及平均值。
每当我运行该程序时,它根本不会显示平均值(保持为0.0),也不会显示正确的最高和最低测试分数。这是代码
#include <iostream>
#include <iomanip>
using namespace std;
int examScores(int,int, int);
int lowestExamScore(int[]);
int highestExamScore(int[]);
double average(int, int);
int main()
{
int scoreArray[10];
int testScore = 0,
lowestScore = 0,
highestScore = 0,
total = 0;
double avg = 0.0;
for(int i = 1; i < 11; i++)
{
testScore = examScores(testScore, i, total);
scoreArray[i-1] = testScore;
}
lowestScore = lowestExamScore(scoreArray);
highestScore = highestExamScore(scoreArray);
average(lowestScore, total);
cout<<"The lowest score dropped was: "<<lowestScore
<<" whilst the highest score was: "<<highestScore<<endl;
cout<<setprecision(2)<<fixed<<showpoint<<endl;
cout<<"Average of the exams is: "<<avg<<endl;
return 0;
}
int examScores(int testScore, int i, int total)
{
cout<<"Please enter the test score for exam "<<i<<endl;
cin>>testScore;
while(testScore == 0 || testScore > 100)
{
cout<<"Invalid test score. Please enter a valid test score."<<endl;
cin>>testScore;
}
total += testScore;
return testScore;
}
int lowestExamScore(int scoreArray[10])
{
int smallest = scoreArray[0];
for(int i = 1; i < 11; i++)
{
if(scoreArray[i] < smallest)
smallest = scoreArray[i];
return smallest;
}
}
int highestExamScore(int scoreArray[10])
{
int highest = scoreArray[0];
for(int i = 1; i < 11; i++)
{
if(scoreArray[i] > highest)
highest = scoreArray[i];
return highest;
}
}
double average(int lowestScore, int total)
{
double avg;
int sumOfExams;
sumOfExams = total - lowestScore;
avg = sumOfExams / 9.0;
return avg;
}
答案 0 :(得分:2)
lowestExamScore()
和highestExamScore()
在其for循环中具有return语句。同样,这些函数中的循环将上升到索引10,而不是上升到9。尝试访问数组的元素10将导致未定义的行为。重写这些函数,如下所示:
int highestExamScore(int scoreArray[])
{
int highestScore = scoreArray[0];
// Starts at 2nd element in scoreArray and increments to last
for(int i = 1; i < 10; i++)
{
if (highestScore < scoreArray[i])
{
highestScore = scoreArray[i];
}
}
return highestScore;
}
对于其他功能也是如此。
关于意外的平均收益0.0,我注意到您的int total
从不会在您的主函数中增加。如果您仅添加以下行:
total += testScore;
在您的主循环中,那应该可以解决它。
对于一般的调试,这里有一些提示:
您可以在某些代码行中将打印语句用于测试值。例如,在您的平均功能中,打印传入的总和最小分数值可以帮助您确定错误的位置。
如果使用的是IDE(如Visual Studio,KDevelop等),则可以在认为代码可能获得错误值的行上添加断点。然后,内置调试器将为您显示范围内每个变量的值。
在此处发布问题之前,需要进行一些调试工作。有关问题所在的信息越多,您将获得更好的答案。此外,它可能会排除需要职位的情况。 :)
答案 1 :(得分:0)
最低y最高不是notvcalculatong,因为您的循环在第一个循环退出。将回车移到外面。您在平均函数中使用avg全局变量,而使用局部变量avg而不是返回它。但是,当您调用平均函数时,您不会将结果赋给任何变量。因此,当您打印avg的值时,您正在打印全局变量。或从平均值函数中删除局部变量或分配全局avg = average。
我的英语不好,但我希望你能理解我。