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

finding maximum and minimum number in array

提问人: 提问时间:10/10/2021 更新时间:10/11/2021 访问量:2246

问:

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

当我输入数组值 = 4 和数组元素的长度时:- 32,152,38 它给出的输出为 max = 1973314801 和 min = 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++ 数组 最大 最小 IOTream

评论

4赞 Ch3steR 10/10/2021
cin >> a;?您从未存储过您读入的值。在第二种情况下,它已经有价值,所以它起作用了。 是一个 VLA,它是 GCC 中的编译器扩展,使您的代码不可移植。STL 有许多实用函数查找 std::minmax_elementarrayarrayarray[n]
0赞 Kundan 10/10/2021
@KeshavNischal 您也可以尝试以下答案。

答:

0赞 Kundan 10/10/2021 #1

您将输入数据存储在变量而不是数组中,并且不能像这样分配数组大小。在使用之前,必须将大小指定为常量。aarray

#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;
}
1赞 user12002570 10/10/2021 #2

根据 C++ 标准,C++ 数组的大小必须是编译时常量。因此,您的第一个代码示例不正确。也就是说,您不能从用户那里获取数组的大小作为输入。您必须显式指定数组的大小,就像在第二个示例中所做的那样。

您可以改用此目的。std::vector

0赞 Thomas Matthews 10/11/2021 #3

你不需要数组;使用运行最小值和最大值计算:

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

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

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

运行最小值和最大值的一个很好的功能是可以输入的数字数量没有限制。唯一的限制是可以容纳的值范围。int