使用数组来确定最小值
Using arrays to determine the minimum
为什么这个简单的代码不能工作?一切似乎都很好,我得到没有错误(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
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 在不进行排序的情况下查找数组中n个最小值的索引
- 在索引0为0的数组中查找非零最小值C++
- 使用数组将最后一个最大值更改为第一个最小值
- 以 C/C++ 为单位的数组中最小值的地址
- 如何在给定数组的任何子数组(任何大小)中找到最大值(或最小值)?
- 有没有办法在递归中使用指针来查找数组的最小值?
- 构造大小为 N 的数组 A 和大小为 1 的数组 A,使得所有 A[i]*A[j] 的总和为最小值和正数。1 <= i < j <= N
- C++数组的最大值、最小值、平均值函数
- 数组中最小值的总和
- C 递归找到数组的最小值
- 从二维数组中查找最小值和最大值
- 使用函数从数组中索引最小值的问题
- 查找最小字典数组