尝试计算数组中随机数的最大值和最小值,我不确定我在这里做错了什么。我一直试图弄明白,我在我的智慧结束。也许你们中的一个可以帮忙吗?
#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;
}
答案 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];
此外,您有一个else
,您不一定需要一个max=0
。第一个值将是min 和最大值。
您可以先设置min=99
和{{1}},这样就可以解决该问题。
答案 3 :(得分:2)
sora = new int [num];
max= sora[0];
min= sora[0];
此行使用garbage初始化int数组,并将max和min设置为垃圾值。
您有两种选择:
在开始时将max初始化为可能的最低值(INT_MIN)并将min初始化为可能的最高值(INT_MAX)。
首先创建一个随机值并在sora [0]中分配它,并将max和min初始化为此值。之后初始化[1..num]