我决定在C ++中练习CodeAbbey练习。我正在研究问题#15(最大值或数组),它告诉我:在数组(大小为300)上创建线性搜索,找到列表中的最大值和最小值,然后打印出最大值和最小值
似乎我得到了一切但是显示了分钟,我想知道你们是否能指出我正确的方向。
到目前为止,这是我的代码:
#include <iostream>
using std::cout;
using std::cin;
int main() {
int arrayLength[300];
cout << "Please enter the numbers you would like to perform a linear search in: \n";
for(int i=0; i<=300; i++) {
cin >> arrayLength[i];
}
//Store the current maximum in a separate variable
int max=arrayLength[0];
int min=arrayLength[0];
for(int i=0; i<=300; i++) {
if(arrayLength[i] > max) {
max = arrayLength[i];
} else if(arrayLength[i] < min) {
min = arrayLength[i];
}
}
cout << "\n" << max;
cout << "\n" << min;
return 0;
}
现在,当我运行它时,代码会执行并打印最大数字而不是最小数字。我该如何解决这个问题?
答案 0 :(得分:1)
行for(int i=0; i<=300; i++)
看起来不正确。您的数组int arrayLength[300]
包含300个整数。如果您从1到300计数有300个数字,但您的循环计数从0到300,这是301个数字。
长度n
数组的最高索引实际上是n-1
,因为第一个数组索引是0。
int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4; // arr holds 3 ints not 4!
此外,打印值的代码可能与您期望的完全不同。
cout << "\n" << max;
cout << "\n" << min;
如果我们绘制\n
以显示我们新线的位置
\n
MAX\n
MINotherstuffblahblah
将代码更改为
cout << max << "\n";
cout << min << "\n";
结果
MAX\n
MIN\n
otherstuffblahblah
让您更容易看到最低价值。
答案 1 :(得分:1)
将<=
更改为<
。大小为300的数组的数组索引从0到299运行。当我运行它时,min是正确的,但最大值是错误的。当您索引越界时,结果是不可预测的。 &#34;未定义的行为&#34;它被称为。