最大输出不正确

Max output is incorrect

本文关键字:不正确 输出      更新时间:2023-10-16

试图计算数组中随机数的最大值和最小值,我不确定我在这里做错了什么。我一直在努力弄清楚,我已经到了智慧的尽头。也许你们中的一个人可以帮忙?

#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;
}
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>

当您

执行max= sora[0];min= sora[0];时,您将最小值和最大值初始化为未定义的值

此外,您有一个不一定想要的else。第一个值将是最小值和最大值。您可以从设置开始 max=0min=99 ,这应该可以解决该特定问题。

sora = new int [num];   
max= sora[0];
min= sora[0];

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

您有两种选择:

  1. 开始时,将最大值初始化为可能的最低值 (INT_MIN),并将最小值初始化为可能的最高值 (INT_MAX)。

  2. 首先创建一个随机值并将其分配给 sora[0] 并将 max 和 min 初始化为该值。之后初始化 [1..num]

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

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;

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