使用数组来确定最小值

Using arrays to determine the minimum

本文关键字:最小值 数组      更新时间:2023-10-16

为什么这个简单的代码不能工作?一切似乎都很好,我得到没有错误(IDE: Visual studio 2013)有人能帮忙吗?

int a[30];
int b;
int min = 0;
do {
    cin >> b;
    if (b != 0) {   
        int i = 0;
        a[i] = b;
        i++;
        if (min>a[i])
            min = a[i];
    }
} while (b != 0);
cout << endl << "THE MIN IS : "<<min<<endl;

程序有未定义的行为,因为您使用了数组中未初始化的元素。

在这个代码片段中

if (b != 0)
    {   
        int i = 0;
        a[i] = b;
        i++;
        if (min>a[i])
            min = a[i];
    }

总是将min与未赋值的a[1]进行比较。在if语句的块语句中,变量i总是被重新创建并初始化为0。然后将其增加,并将min与a[1]进行比较。但它只赋值了一个[0]。

实际上你不需要任何数组。代码可以按照如下方式编写

bool empty = true;
int min;
int value;
while ( std::cin >> value && value != 0 )
{
   if ( empty || value < min )
   {
      empty = false;
      min = value;
   }
}
if ( !empty ) std::cout << "nThe minimum is equal to " << min << std::endl;
else std::cout << "nYou did not enter any number" << std::endl;

如果需要在数组中存储值,则代码可以如下所示

const size_t N = 30;
int a[N];
int value;
size_t i = 0;
while ( i < N && std::cin >> value && value != 0 ) a[i++] = value;
if ( i != 0 )
{
   int min = a[0];
   for ( size_t j = 1; j < i; j++ )
   {
      if ( a[j] < min ) min = a[j];
   }
   std::cout << "nThe minimum is equal to " << min << std::endl;
}
else
{
    std::cout << "nYou did not enter any number" << std::endl;
} 

考虑到c++的标头<algorithm>中声明了标准算法std::min_element