在随机数组中查找最小值和最大值
Finding min and max value in a random array
正在做一项要求我输入一些函数的作业(查找数组中随机数的 max/min 值、总和和平均值),我设法完成了所有这些,但需要 min我得到的值为 -2145379808。我不确定我在哪里搞砸了,我将不胜感激。
到目前为止的代码:
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main(int argc, char** argv) {
{
cout << "Enter array size " << endl;
}
float avg;
float sum;
int size;
cin >> size;
int array[size];
int max = array [0];
int min = array [0];
srand((unsigned)time(NULL));
for (int i = 1; i < size + 1; i++)
{
array[i] = 1+rand()%100 ;
sum += array[i];
cout << "number " << i << " = "<< array[i] << endl;
}
for (int x = 1; x < size; x++){
if (array[x] > max){
max = array[x];
}
if (array[x] < min){
min = array[x];
}
}
cout << "\nmax = " << max << endl;
cout << "\nmin = " << min << endl;
cout << "\nsum = "<< sum << endl;
cout << "\navg = " << sum / size << endl;
return 0;
}
将 max
和 min
设置为 array
的未初始化元素永远不会有好结果。关于这一点,您还需要初始化 sum
。您也可以删除 avg
,因为您不使用它。
您需要将 max
和 min
设置为 array
的第一个元素,一旦您知道它是什么。粗略地说,您可以将 max
设置为 std::numeric_limits<int>::min()
,将 min
设置为 std::numeric_limits<int>::max()
。
另请注意,array
的 边界 是 array[0]
到 array[size - 1]
。因此,您需要重新访问循环中的索引。
然后一旦你让它工作,将它装箱,然后使用 std::vector<int>
,以及类似 minmax_element
的东西:http://en.cppreference.com/w/cpp/algorithm/minmax_element
问题出在以下几行:
float avg;
float sum;
...
int max = array [0];
int min = array [0];
因为此时array [0]
处的值是垃圾值.
要更正您的代码,请按以下方式更改此行(还包括 climits
头文件)。此外,相应地更改循环索引:
float avg = 0;
float sum = 0;
...
int max = INT_MIN;
int min = INT_MAX;
以下是更正后的代码(为优化所做的一些更改)。看到它工作 here:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <climits>
using namespace std;
int main(int argc, char** argv) {
{
cout << "Enter array size " << endl;
}
float sum = 0;
int size;
cin >> size;
int array[size];
int max = INT_MIN;
int min = INT_MAX;
srand((unsigned)time(NULL));
for (int i = 0; i < size; i++)
{
array[i] = 1+rand()%100 ;
sum += array[i];
cout << "number " << i << " = "<< array[i] << endl;
if (array[i] > max){
max = array[i];
}
if (array[i] < min){
min = array[i];
}
}
cout << "\nmax = " << max << endl;
cout << "\nmin = " << min << endl;
cout << "\nsum = "<< sum << endl;
cout << "\navg = " << sum / size << endl;
return 0;
}
为了确保 max
和 min
正确初始化,C++ 为所有类型提供了 std::numeric_limits
。它们每个都有 max()
和 min()
成员函数来 return 类型的 max
和 min
值。在任何想要找到最大值和最小值的代码中,您都希望首先将最大值初始化为该类型的最小值,反之亦然。这样任何值都将大于您的 min
并小于您的 max
.
您使用 std::numeric_limits
类似于:
int min = std::numeric_limits<int>::max()
int max = std::numeric_limits<int>::min()
如果您有更多问题,请告诉我。
正在做一项要求我输入一些函数的作业(查找数组中随机数的 max/min 值、总和和平均值),我设法完成了所有这些,但需要 min我得到的值为 -2145379808。我不确定我在哪里搞砸了,我将不胜感激。 到目前为止的代码:
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main(int argc, char** argv) {
{
cout << "Enter array size " << endl;
}
float avg;
float sum;
int size;
cin >> size;
int array[size];
int max = array [0];
int min = array [0];
srand((unsigned)time(NULL));
for (int i = 1; i < size + 1; i++)
{
array[i] = 1+rand()%100 ;
sum += array[i];
cout << "number " << i << " = "<< array[i] << endl;
}
for (int x = 1; x < size; x++){
if (array[x] > max){
max = array[x];
}
if (array[x] < min){
min = array[x];
}
}
cout << "\nmax = " << max << endl;
cout << "\nmin = " << min << endl;
cout << "\nsum = "<< sum << endl;
cout << "\navg = " << sum / size << endl;
return 0;
}
将 max
和 min
设置为 array
的未初始化元素永远不会有好结果。关于这一点,您还需要初始化 sum
。您也可以删除 avg
,因为您不使用它。
您需要将 max
和 min
设置为 array
的第一个元素,一旦您知道它是什么。粗略地说,您可以将 max
设置为 std::numeric_limits<int>::min()
,将 min
设置为 std::numeric_limits<int>::max()
。
另请注意,array
的 边界 是 array[0]
到 array[size - 1]
。因此,您需要重新访问循环中的索引。
然后一旦你让它工作,将它装箱,然后使用 std::vector<int>
,以及类似 minmax_element
的东西:http://en.cppreference.com/w/cpp/algorithm/minmax_element
问题出在以下几行:
float avg;
float sum;
...
int max = array [0];
int min = array [0];
因为此时array [0]
处的值是垃圾值.
要更正您的代码,请按以下方式更改此行(还包括 climits
头文件)。此外,相应地更改循环索引:
float avg = 0;
float sum = 0;
...
int max = INT_MIN;
int min = INT_MAX;
以下是更正后的代码(为优化所做的一些更改)。看到它工作 here:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <climits>
using namespace std;
int main(int argc, char** argv) {
{
cout << "Enter array size " << endl;
}
float sum = 0;
int size;
cin >> size;
int array[size];
int max = INT_MIN;
int min = INT_MAX;
srand((unsigned)time(NULL));
for (int i = 0; i < size; i++)
{
array[i] = 1+rand()%100 ;
sum += array[i];
cout << "number " << i << " = "<< array[i] << endl;
if (array[i] > max){
max = array[i];
}
if (array[i] < min){
min = array[i];
}
}
cout << "\nmax = " << max << endl;
cout << "\nmin = " << min << endl;
cout << "\nsum = "<< sum << endl;
cout << "\navg = " << sum / size << endl;
return 0;
}
为了确保 max
和 min
正确初始化,C++ 为所有类型提供了 std::numeric_limits
。它们每个都有 max()
和 min()
成员函数来 return 类型的 max
和 min
值。在任何想要找到最大值和最小值的代码中,您都希望首先将最大值初始化为该类型的最小值,反之亦然。这样任何值都将大于您的 min
并小于您的 max
.
您使用 std::numeric_limits
类似于:
int min = std::numeric_limits<int>::max()
int max = std::numeric_limits<int>::min()
如果您有更多问题,请告诉我。