代码仍打印 0,无法计算所需的任务


#include <iostream>
using namespace std;
int main()
{
int n, G;
float num[500], sum=0.0, average,Grades;
cout << "Enter the numbers of data: ";
cin >> n;
while (n > 500 || n <=  0)
{
cout << "Error! number should in range of (1 to 500)." << endl;
cout << "Enter the number again: ";
cin >> n;
}
for(G = 0; G < n; ++G)
{
cout << G + 1 << ". Enter number: ";
cin >> num[G];
sum += num[G];
}

average = sum / n;
Grades = num[G] >= average;

cout<<endl;

cout << "Grades Average = " << average << endl;
cout << "Grades above or equal the Average : " <<Grades<< endl;
cout << "Number of grades above the Average = "<<(int) Grades;

return 0;
}

我编写了这段代码,但是Number of grades above the AverageGrades above or equal the Average不起作用,它只是打印0

我试图打印成绩>=平均值,但它打印0

也num of Grades也打印0

错误在哪里?

我想你是想做这样的事情:

...
int grades_on_avg, upper_grades = 0; 
for(int i = 0; i < n; ++i)
{
cout << i + 1 << ". Enter number: ";
cin >> num[i];
sum += num[i];

}
average = sum / n;
for(int i = 0; i < n; ++i) // use separate for loop and redefined index
{
if(num[i] == average) // compare to average
grades_on_avg++;
else if(num[i] > average) // if bigger than average
upper_grades++;
}

cout<<endl;
cout << "Grades Average = " << average << endl;
cout << "Grades above or equal the Average =" << (grades_on_avg + upper_grades) << endl;
cout << "Number of grades above the Average = "<< upper_grades ;

Grades变量赋布尔值。此外,您还可以引用数组之外的元素:G变量在退出for循环后等于n,但是您可以使用的最大索引是n - 1(基本编程规则)。所以,你应该把你的代码改成这样:

...
int avgGrades{0};
int avgAboveGrades{0};
for(int i{0}; i < n; ++i)
{
if(num [i] == average)
{
++avgGrades;
}
else if(num [i] > average)
{
++avgAboveGrades;
}
}

如果你喜欢更优雅的方式,你可以使用std::count_if()函数,但它更棘手,需要关于lambda的知识。

最新更新