我正在编写一个软件,允许用户计算十个整数的平均值。这是代码:
// Algorithm for computing the average of the grades of a class with the controlled iteration of a counter
#include <iostream>
using namespace std;
int main()
{
int total, // sum of all grades
gradeCounter, // n° of inputted grades
grade, // a single vote
average; // average of grades
// initialization phase
total = 0; //sets the total to zero
gradeCounter = 1; //prepares the counter
// elaboration phase
while ( gradeCounter <= 10 ) { // 10 times cycle
cout << "Enter grade: "; // input prompt
cin >> grade; // input grade
total = total + grade; // adds the grade to the total
gradeCounter = gradeCounter + 1; // increases the counter
}
// end phase
average = total / gradeCounter;
cout << "The class average is " << average << endl;
return 0;
}
现在,我认为编写average = total / gradeCounter;
会起作用,因为gradeCounter
中存储的最后一个变量是10;但average = total / 10;
给出的结果是实际平均值。我不明白为什么会出现这种差异。
有人可以向我解释一下吗?
答案 0 :(得分:1)
while ( gradeCounter <= 10 ) { //10 times cycle
cout << "Enter grade: "; //input prompt
cin >> grade; //input grade
total = total + grade; //adds the grade to the total
gradeCounter = gradeCounter + 1; //increases the counter
}
在这段代码中,当gradeCounter
为10
时,while
循环再次运行,gradeCounter
递增到11
。所以后来,你实际上除以11而不是10。
答案 1 :(得分:1)
while ( gradeCounter <= 10 )
在您的情况下,gradeCounter
增加到11时,此条件的计算结果为false。
(11不小于或等于10)
所以你的计数器是11,而不是你的循环后的10。
答案 2 :(得分:1)
while ( gradeCounter <= 10 ) { //10 times cycle
gradeCounter = gradeCounter + 1;
在循环结束后,成绩计数器将为11(最后一次迭代它被设置为11,然后&lt; = 10不成立并退出。所以你要除以11而不是10。 / p>
答案 3 :(得分:1)
实际上发生的事情是,每次运行while循环后,gradeCounter
的值比循环运行的次数多1(因为您已将gradeCounter
初始化为1在开始循环之前)。您可以执行以下任何一项来解决此问题。
1)
average = total / (gradeCounter-1);
2)
gradeCounter = 0;
while ( gradeCounter < 10 ) {
cout << "Enter grade: ";
cin >> grade;
total = total + grade;
gradeCounter = gradeCounter + 1;
}
答案 4 :(得分:0)
您应该为此绘制一个流程图。如果gradeCounter <= 10
,您进入循环,仅在gradeCounter >= 11
进行average = total/gradeCounter
这就是为什么你得到的结果除以11而不是10。