在随机数组中查找最小值和最大值

时间:2018-02-22 07:55:24

标签: c++ arrays max 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;
}

3 个答案:

答案 0 :(得分:7)

maxmin设置为array的未初始化元素永远不会结束。在此注释中,您还需要初始化sum。您也可以删除avg,因为您没有使用它。

一旦你知道它是什么,你需要将maxmin设置为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

答案 1 :(得分:0)

问题在于以下几行:

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

答案 2 :(得分:0)

为确保正确初始化minstd::numeric_limits,C ++为所有类型提供max()。它们各自具有min()max成员函数,以返回该类型的minmin值。在您要查找最大值和最小值的任何代码中,您希望首先将最大值初始化为类型的最小值,反之亦然。这样,任何值都会大于max且小于std::numeric_limits

您使用int min = std::numeric_limits<int>::max() int max = std::numeric_limits<int>::min() 类似于:

执行此操作
$stateProvider
// .... many states...
  .state('file-petition-tab', {
    url: '/file-petition-tab/:id',
    templateUrl: ['$stateParams', function ($stateParams) {
        return 'app/dashboard/views/tabs/tab' + $stateParams.id + '.html';
    }],
    controller: 'DashboardController',
    controllerAs: 'vm',
    lazyModules: [
      'app/dashboard/dashboard.controller.js',
      'app/tpl/api.services.js',
    ]
  })

如果您有更多问题,请与我们联系。