我有此代码:
int main() {
int list[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int max = 0, min = 0, small, large;
for (int j = 0; j < 10; ++j) {
if(list[max] < list[j]) {
max = j;
large = list[max];
}
if(list[min] > list[j]) {
min = j;
small = list[min];
}
cout << "Maximum :" << large << endl;
cout << "Minimum :" << small << endl << endl;
}
上述代码中的small
不正确。
输出:
Maximum :-1482404720
Minimum :0
Maximum :2
Minimum :0
Maximum :3
Minimum :0
Maximum :4
Minimum :0
Maximum :5
Minimum :0
Maximum :6
Minimum :0
Maximum :7
Minimum :0
Maximum :8
Minimum :0
Maximum :9
Minimum :0
Maximum :10
Minimum :0
但是,可以使用相同的代码(省略花括号),如下所示:
if(list[max] < list[j])
max = j;
large = list[max];
if(list[min] > list[j])
min = j;
small = list[min];
上面的代码现在可以正确显示最小值和最大值。
输出:
Maximum :1
Minimum :1
Maximum :2
Minimum :1
Maximum :3
Minimum :1
Maximum :4
Minimum :1
Maximum :5
Minimum :1
Maximum :6
Minimum :1
Maximum :7
Minimum :1
Maximum :8
Minimum :1
Maximum :9
Minimum :1
Maximum :10
Minimum :1
为什么会这样?我问过我的讲师,她也不知道,所以我决定在这里问。
答案 0 :(得分:3)
声明时
int list[] = {1,2,3,4,5,6,7,8,9,10};
int max=0, min=0, small, large;
您尚未初始化small
或large
。
进入循环时,min
为零,因此if
永远不会是您的数字:
if(list[min] > list[j]) {
min = j;
small = list[min];
}
因为它们恰好在增加。
这意味着您永远不会初始化small
。
如果有
if(list[min] > list[j])
min = j;
small = list[min];
相反,这与
相同if(list[min] > list[j]) {
min = j;
}
small = list[min];
或
if(list[min] > list[j])
min = j;
}
small = list[min];
这意味着small
已初始化。
由于您的示例list
不断增加,因此您很幸运,max
的工作方式也是如此。
尝试各种输入。
并初始化您的变量。
答案 1 :(得分:0)
如果您错过了花括号,则循环/条件语句将仅应用于下一个语句。
因此,第二个语句后跟“ if(list [max] list [j])””不适用于“ large = list [max];”。和“ small = list [min];”分别。
希望这会有所帮助。
答案 2 :(得分:0)
这不是由于是否带有大括号。您的代码中有错误。它在没有括号的情况下只是偶然地工作。尝试下面的代码并对其进行改进-
int main() {
int list[] = {1,2,3,4,5,6,7,8,9,10};
int max=0, min=0, small, large;
for (int j = 0; j < 10; ++j) {
if(list[max] < list[j]) {
max = j;
}
else if(list[min] > list[j]) {
min = j;
}
}
large = list[max];
small = list[min];
cout << "Maximum :" << large << endl;
cout << "Minimum :" << small << endl;
}