我正在尝试使用函数找到测验的平均值。我一直在调整它,但它只是不断返回10.程序的前提是要求用户提交他们的测验(其中有10个)。这些输入放在数组quizarray[]
中。然后,我将所有信息从quizarray
复制到另一个tempArray
。然后对tempArray进行排序并将其用于calcQuizAverage
函数。该函数应该返回两个平均值中的一个。这由numberOfQuizzes
double calcQuizAverage(int quizArray[], int numberOfQuizzes)
{
int a;
double avrg, sum, lowSum;
a = 0;
sum = 0;
lowSum = quizArray[0] + quizArray[1];
for (a=0; a< numberOfQuizzes; a++)
{
sum += double(quizArray[a]);
}
if (numberOfQuizzes <= 2)
{
avrg= double(((sum) / (10* numberOfQuizzes)) * 100);
return avrg;
}
else if (numberOfQuizzes > 2)
{
avrg= double(((sum-lowSum) / (10* (numberOfQuizzes - 2)))*100);
return avrg;
}
}
我已经检查了当numberOfQuizzes
超过2时,sum和lowSum是否是它们的意思,看起来很好。如果numberOfQuizzes
小于或等于2,则只返回10.
以下是代码的其余部分:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
//Symbolic Constants
const int MAX=12;
//Function Prototypes
int buildQuizArray(int[]);
void printArray(string,int[],int);
double calcQuizAverage(int[],int);
void sortArray(int[],int);
int main ()
{
int quizScores[MAX];
int compQuiz;
int tempArray[MAX];
double average;
int temp;
int i;
average = 0;
compQuiz = buildQuizArray(quizScores);
for(int i=0; i<MAX; i++)
{
tempArray[i] = quizScores[i];
}
sortArray(tempArray, compQuiz);
average = calcQuizAverage(tempArray, compQuiz);
cout<<endl<<"Your quiz average is "<<average<<endl;
printArray ("Quiz Scores", tempArray, compQuiz);
}
int buildQuizArray(int quizArray[])
{
int numQuiz, input, a;
a=0;
numQuiz=1;
cout << "Enter your score for quiz "<<numQuiz<<" (-1 to quit): ";
cin >> input;
while (input != -1)
{
quizArray[a] = input;
a++;
numQuiz++;
cout<< "Enter your score for quiz "<<numQuiz<<" (-1 to quit): ";
cin >> input;
}
return a+1;
}
void printArray(string reportTitle, int quizArray[], int numberOfQuizzes)
{
int a;
cout<< endl <<reportTitle <<endl<<"-----------"<<endl;
for (a=1; a<numberOfQuizzes; a++)
{
cout<< "Quiz " << a <<": " << setw(2) <<quizArray[a-1] <<"/10"<<endl;
}
}
double calcQuizAverage(int quizArray[], int numberOfQuizzes)
{
int a;
double avrg, sum, lowSum;
a = 0;
sum = 0;
lowSum = quizArray[0] + quizArray[1];
for (a=0; a< numberOfQuizzes; a++)
{
sum += double(quizArray[a]);
}
if (numberOfQuizzes <= 2)
{
avrg= double(((sum) / (10* numberOfQuizzes)) * 100);
return avrg;
}
else if (numberOfQuizzes > 2)
{
avrg= double(((sum-lowSum) / (10* (numberOfQuizzes - 2)))*100);
return avrg;
}
}
void sortArray(int num[], int numberOfQuizzes)
{
int i, j, flag = 1;
int temp;
for(i = 1; (i <= numberOfQuizzes) && flag; i++)
{
flag = 0;
for (j=0; j < (numberOfQuizzes -2); j++)
{
if (num[j+1] < num[j])
{
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
flag = 1;
}
}
}
return;
}
答案 0 :(得分:0)
如果没有进一步的解释,您的代码应该做什么是不可理解的。根据标题,您想要计算数组中的平均值吗? 以下代码将执行此操作:
double calcQuizAverage(int quizArray[], int numberOfQuizzes){
double avrg = 0.0;
int a = 0;
for (a = 0; a< numberOfQuizzes; a++){
avrg += quizArray[a];
}
return avrg / static_cast<double>(numberOfQuizzes);
}
int main(int argc, char* argv[]){
int array[] = { 0, 1, 2};
double x = calcQuizAverage(array, 3);
return 0;
}
目前尚不清楚,你的附加if-clauses的原因是什么:你的函数应该总是返回一个值(你可能想要替换最后的&#39;否则如果&#39;只是&#39; ;否则&#39;?)
答案 1 :(得分:0)
avrg= double(((sum) / (10* numberOfQuizzes)) * 100);
e.g.
avrg = (sum/(numberofQuizzes*10.0))*100.0;
答案 2 :(得分:0)
由于您的sum
变量是双倍的,因此您不需要在很多地方进行投射。
此外,您的代码可以通过而不是使用表单来整理:
int a;
a=0;
for (a=0; ...) {
改为写作:
for (int a=0; ...) {
您的buildQuizArray
函数未返回输入的测验数量 - 我怀疑您打算写return a;
,而不是return a+1;
(这可能是关键问题)< / p>
关于向量,vector
是使用#include <vector>
通过标准库提供的容器类。矢量可以根据需要增长,并具有各种有用的功能,特别是myVector.size()
返回myVector
的长度。这样可以防止需要在阵列的任何位置传递大小。您也不需要分配特定的12个条目,从而允许更简单的sort
函数(因为您不必避免尾随零)。
我还建议您lowSum
仅在其使用的if
循环内进行计算(和定义) - 这会缩小其范围(这不是一个真正的问题)并且意味着除非要使用它,否则你不必计算它(在小程序中也不重要,但一般值得考虑)