我有一个关于显示数组中给定成绩10个给定等级的分配。现在,我不需要考虑值-1的成绩。在这种情况下,-1表示分配尚未完成,因此不应在平均值中考虑任务。示例:
Grade 1: 90
Grade 2: 86
Grade 3: 95
Grade 4: 76
Grade 5: 92
Grade 6: 83
Grade 7: 100
Grade 8: 87
Grade 9: 91
Grade 10: -1
Average Grade: 88% //Notice how the -1 for the 10th grade is not factored into the average.
Example 2
Grade 1: -1
Grade 2: -1
Grade 3: -1
Grade 4: -1
Grade 5: -1
Grade 6: -1
Grade 7: -1
Grade 8: -1
Grade 9: -1
Grade 10: -1
Average Grade: ---%
由于所有等级都是-1
,因此没有平均值。您将需要处理此条件。这是我的代码:
#include <iostream>
using namespace std;
#define NUM_GRADES 10
void getGrades(int grades[], int num)
{
for(int iGrades = 0; iGrades < num; iGrades++)
{
cout << "Grade " << iGrades + 1 << ": ";
cin >> grades[iGrades];
}
return;
}
int averageGrades(int grades[], int num)
{
int average;
int sum;
for(int i = 0; i < num; i++)
{
sum+=grades[i];
}
average = sum / num;
return average;
}
int main()
{
int grades[NUM_GRADES];
averageGrades(grades, NUM_GRADES);
getGrades(grades, NUM_GRADES);
cout << "Average Grade: "
<< averageGrades(grades, NUM_GRADES)
<< "%n";
return 0;
}
averageGrades()
需要一个if
语句来跳过-1
等级,也需要有效等级数的计数器。它还需要在添加到它之前将sum
初始化为0
。
您可以从函数返回-1
,以表明没有平均值。
int averageGrades(int grades[], int num)
{
int average;
int sum = 0, gradeCount = 0;
for(int i = 0; i < num; i++)
{
if (grades[i] != -1) {
sum+=grades[i];
gradeCount++;
}
}
if (gradeCount > 0) {
average = sum / gradeCount;
} else {
average = -1;
}
return average;
}
然后,在main()
中打印结果时,您需要检查此特殊返回值,因此您可以显示---
而不是数字。
int avg = averageGrades(grades, NUM_GRADES);
cout << "Average Grade: ";
if (avg == -1) {
cout << "---";
} else {
cout << avg;
}
cout << "%n";