在C ++中查找最小最大值

时间:2015-11-27 23:13:15

标签: c++

我的练习如下:给定N个整数的列表,找到它的平均值(作为双精度),最大值,最小值和范围。您的程序将首先询问N,即列表中的整数,用户将输入该整数。然后用户将输入N个更多数字。

这是我的代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "Input n: ";
    cin >> n;

    int first;             //**LINE NUMBER 1**
    cout << "No 1 is: ";
    cin >> first;
    int max = first;
    int min = first;

    for (int i=1; i<n;i++) //**LINE NUMBER 2**
    {
        int x;
        cout << "No " << i+1 << " is: ";
        cin >> x;
        first = x;         //**LINE NUMBER 3**
        if (max < x)
        {
           max = x;
        }
        if (min > x)
        {
           min = x;
        }
    }
    cout << "max is: " << max << endl;
    cout << "min is: " << min << endl;
    cout << "mean is: " << (double) (max+min)/2 << endl; //**LINE NUMBER 4**
    cout << "range is: " << max - min << endl;

    return 0;
}

然而,解决方案有点不同:

  • 对于第1行,它是int first=0;而不是int first;

  • 对于第2行,它是for (int i=1; i<n;++i)而不是for (int i=1; i<n;i++)

  • 对于第3行,它是first += x;而不是first = x;

  • 对于第4行,它是cout << "mean is: " << (double) first/n<< endl;而不是cout << "mean is: " << (double) (max+min)/2 << endl;

我尝试了一些例子,但两个代码产生了完全相同的结果。这是为什么?或者我在某处错了?

1 个答案:

答案 0 :(得分:3)

好:

这些线本身都不是错误的。更重要的是,他们最好以另一种方式完成。即:

  • int first =0只是确保first == 0开头。 int first;可能会导致问题,因为它被分配,最初分配给任意数字(无论发生在变量指向的内存地址处)

  • 虽然++ii++在for循环中的工作方式与迭代器的工作方式相同,但在其他用法方面却略有不同。详细了解here

  • first += x基本上是first = first + x,它更清楚地概述了您的代码与它之间的区别。这也很清楚为什么int first = 0如此重要。如果first是一个随机值,那么所有数字的总和(这是first应该是什么)将被随机分配为从一个数字开始,而不是始终为0。

  • 这最后一个是你唯一的一个,实际上是错的。 mean被定义为所有数据的总和除以数据点的数量(与average相同),其中median被描述为数据的中间点,或者描述数据最大值和最小值之间中间点的数字。在计算您认为的内容时,mean实际上是median。这种情况的复杂性有时取决于您的数据mean = median。例如,如果您的数据为3,4,5,则均值和中位数均等于4

我希望这能为你澄清一些事情:)