我编写了以下代码,允许用户输入一个数组并给出该数组中的最大值和最小值
当我输入数组值的长度 = 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++ 标准,C++ 数组的大小必须是“编译时间常量”。所以你的第一个代码示例是不正确。也就是说,您不能将用户的数组大小作为输入。您必须像在第二个示例中那样显式指定数组的大小。 您可以使用
std::vector
来实现此目的。
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;
}
最小和最大计算:
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
可以容纳的值的范围。
#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;
}