反变量:它是如何工作的?

时间:2015-07-21 17:41:32

标签: c++

我正在编写一个软件,允许用户计算十个整数的平均值。这是代码:

// 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;给出的结果是实际平均值。我不明白为什么会出现这种差异。 有人可以向我解释一下吗?

5 个答案:

答案 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
}

在这段代码中,当gradeCounter10时,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。