1

我正在阅读一本 O'reilly 编程书,其中一个问题是“编写一个程序来平均 n 个元素”。

这是我拥有的代码:

#include <iostream>

int n; //number of numbers
int number; //the numbers to be averaged
float avg; //the average of the elements
int counter; //iterator

int main()
{
    std::cout << "Please enter the number of elements you want averaged: ";
    std::cin >> n;
    avg = 0;

    counter = 0;
    while (counter < n)
    {
        std::cout << "enter number: ";
        std:: cin >> number;

        number += number;

        ++counter;

    }

    avg = number/n;

    std::cout << "Average of your " << n << " elements is: " << avg;

    return 0;
}

出于某种原因,当我尝试使用 3 的 3 个值时,我得到的平均值为 2。我确定我的“数字”声明存在问题,因为它没有采用我输入并添加的每个数字的值它与对方。有人可以帮我解决我的错误。我希望我的代码适用于一般情况;不仅仅是3个元素。谢谢。

4

3 回答 3

5

两个问题。

1)

    std:: cin >> number;

    number += number;

我假设这number是所有数字的总和,但是在这里您还使用它来存储单个数字,并且当您为变量分配值时,它会覆盖已经存在的值。您必须使用两个不同的变量名,例如

    std:: cin >> number;

    sum += number;

2)

number/n;是整数除法,因为number是整数并且n是整数。整数除法向下舍入。将表达式的结果分配给浮点数是不够的 - 为时已晚,表达式已经被计算为整数除法。

你想要浮点除法,sum/(double)n例如这样做。

于 2013-05-29T06:06:29.610 回答
1

你读了数字3。你说number += number,这使得它6,并递增计数器1。然后你再次读取数字,它变成3了,再次添加,再次6,递增,计数器。第三次,同样的事情发生。

所以你得到6/2哪个是3。

于 2013-05-29T06:07:34.327 回答
0

您将输入读入number,但实际上并没有保留输入的所有数字的总数,而这正是您真正需要的。

于 2013-05-29T06:07:41.987 回答