最大输出不正确

时间:2014-02-28 08:16:14

标签: c++ random max min

尝试计算数组中随机数的最大值和最小值,我不确定我在这里做错了什么。我一直试图弄明白,我在我的智慧结束。也许你们中的一个可以帮忙吗?

#include <iostream>
#include <stdlib.h>   
#include <ctime>

using namespace std;

int main() {
    int *sora;
    int num;
    int min;
    int max;

    cout<< "Enter the size :  " ;
    cin >> num;
    cout<< endl;
    sora = new int [num];   

    max= sora[0];
    min= sora[0];

    srand((unsigned)time(0));

    for(int x=0;x<num; x++) {
        sora[x]=rand()%100;

        if(min > sora[x]) {
            min=sora[x];        
        }
        else if (max < sora[x]) {
            max=sora[x];
        }

        cout<< sora[x] << endl;     
    }

    cout<< "Maximum value is: " << max << endl << "Minimum value is: " << min;
}

4 个答案:

答案 0 :(得分:2)

您正在阅读未初始化的内存位置:

sora = new int [num];   

max= sora[0];
min= sora[0];

使用new创建数组不会初始化其内容。

这会导致所谓的未定义行为,这意味着几乎任何事情都可能发生。在这种情况下,它可能非常香草:一些任意值(很可能在0-99范围之外的rand()%100)以最小值和最大值存储,通常会导致错误的结果。

相反,做

// must #include <limits>

int max = std::numeric_limits<int>::min();
int min = std::numeric_limits<int>::max();

甚至只是

int max = 0;
int min = 99;

因为您的范围是预定义的。

答案 1 :(得分:2)

if(min > sora[x]) {
    min=sora[x];
}
else if (max < sora[x])
{
    max=sora[x];
}

有问题。仅当满足第一个if时才输入第二个else if语句。但是第二个if必须始终执行。请按以下步骤更改上述块

if(min > sora[x]) {
    min = sora[x];
}
if (max < sora[x]) {
    max = sora[x];
}

您还使用未初始化的区域进行比较。如果您只使用正数

max = 0;
min = UINT_MAX;

如果你也使用负数,那么

max = INT_MIN;
min = INT_MAX;

您必须为这些宏添加<limits.h>

答案 2 :(得分:2)

当您执行max= sora[0];min= sora[0];

时,您正在将min和max初始化为未定义的值

此外,您有一个else,您不一定需要一个max=0。第一个值将是min 最大值。 您可以先设置min=99和{{1}},这样就可以解决该问题。

答案 3 :(得分:2)

sora = new int [num];   

max= sora[0];
min= sora[0];

此行使用garbage初始化int数组,并将max和min设置为垃圾值。

您有两种选择:

  1. 在开始时将max初始化为可能的最低值(INT_MIN)并将min初始化为可能的最高值(INT_MAX)。

  2. 首先创建一个随机值并在sora [0]中分配它,并将max和min初始化为此值。之后初始化[1..num]