查找数组中的最大和最小数

问题描述 投票:0回答:4

我编写了以下代码,允许用户输入一个数组并给出该数组中的最大值和最小值

当我输入数组值的长度 = 4 且数组元素为:- 32,152,38 时,它给出的输出为 最大值 = 1973314801 且最小值 = 24(意外值)

以下代码:-

#include<iostream>
using namespace std;
int main()
{
    int n;
    cout<<"input length of array = ";
    cin>>n;
    int array[n];
    for(int i=0; i<n;i++)
    {
        int a;
        cout<<"input element "<<i+1<<" = ";
        cin>>a;
    }
    int max=array[0];
    int min=array[0];
    for(int i=0; i<n;i++)
    {
        if(array[i]>max)
        {
            max=array[i];
        }
        if(array[i]<min)
        {
            min=array[i];
        }
    }
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;
}

但是当我在代码中定义数组的值时,它给出了预期的输出(min=3 和 max=12)

code(已定义数组值的代码):-

#include<iostream>
using namespace std;
int main()
{
    int array[4]={3,6,9,12};
    int max=array[0];
    int min=array[0];
    for(int i=0; i<4;i++)
    {
        if(array[i]>max)
        {
            max=array[i];
        }
        if(array[i]<min)
        {
            min=array[i];
        }
    }
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;
}

这里可能出现什么问题?

c++ arrays max min iostream
4个回答
1
投票

根据 C++ 标准,C++ 数组的大小必须是“编译时间常量”。所以你的第一个代码示例是不正确。也就是说,您不能将用户的数组大小作为输入。您必须像在第二个示例中那样显式指定数组的大小。 您可以使用

std::vector

来实现此目的。

    


0
投票
a

而不是数组

array
中,并且您不能像这样分配数组大小。在使用它之前,您必须将大小指定为常量。
#include<iostream>
using namespace std;
int main()
{
    const int n = 4;
    /*cout<<"input length of array = ";
    cin>>n;*/
    int array[n];
    for(int i=0; i<n;i++)
    {
        cout<<"input element "<<i+1<<" = ";
        cin>>array[i];
    }
    int max=array[0];
    int min=array[0];
    for(int i=0; i<n;i++)
    {
        if(array[i]>max)
        {
            max=array[i];
        }
        if(array[i]<min)
        {
            min=array[i];
        }
    }
    cout<<"max = "<<max<<endl;
    cout<<"min = "<<min;
}

但是如果您仍然想将大小作为用户输入,那么您必须在堆内存中创建该数组

#include<iostream> using namespace std; int main() { int n; cout<<"input length of array = "; cin>>n; int* array = new int[n]; //array in heap for(int i=0; i<n;i++) { cout<<"input element "<<i+1<<" = "; cin>>array[i]; } int max=array[0]; int min=array[0]; for(int i=0; i<n;i++) { if(array[i]>max) { max=array[i]; } if(array[i]<min) { min=array[i]; } } cout<<"max = "<<max<<endl; cout<<"min = "<<min; delete [] array; }



0
投票
running

最小和最大计算: int minimum; int maximum; cin >> minimum; maximum = minimum; int number; while (cin >> number) { if (number > maximum) maximum = number; if (number < minimum) minimum = number; } cout << "Maximum: " << maximum << ", Minimum: " << minimum << "\n";

无需存储数字,只需比较数字即可确定最大值和最小值。

仍然满足要求,因为程序正在输入一个数组或一堆数字。

running

最小值和最大值的一个很好的功能是可以输入的数字数量没有限制。唯一的限制是

int 可以容纳的值的范围。


我知道你已经有了答案,但这里有两种不同的方法来查找 std::array 的最小/最大元素(如果可以选择,我更喜欢使用它)。

0
投票
#include <iostream> #include <algorithm> #include <array> template<size_t S> void getMinMax(std::array<int, S> arr) { //Hard way: std::cout << "Min element: " << *std::min_element(arr.data(), arr.data() + S) << "\n"; std::cout << "Max element: " << *std::max_element(arr.data(), arr.data() + S) << "\n\n"; //Easy way: std::sort(arr.begin(), arr.end()); std::cout << "Min element: " << arr.front() << "\n"; std::cout << "Max element: " << arr.back() << "\n\n"; } int main() { std::array<int, 5> arr = {4, 2, 1, 3, 0}; getMinMax(arr); return 0; }


© www.soinside.com 2019 - 2024. All rights reserved.