在查找数组中的最大值和最小值时。我们初始化max =0
或max=temp[0];
但是如果是最小值,我们不需要初始化min =0
或min=temp[0]
...为什么?
答案 0 :(得分:1)
首先,在任何情况下都不应该使用max
初始化0
(例如,如果使用{{1初始化max
,找到包含所有负值的数组的最大值时}},结果将始终为0
)。
由于要查找最大值(和最小值),您需要将变量0
(或max
)与其他值进行比较,因此在任何情况下都需要初始化为min
以避免比较具有未初始化变量的数组元素。
我在另一条评论中找到了您的代码部分:
temp[0]
有些事情不起作用:
#include<stdio.h>
int main() {
int arr[3];
int i,max,min; max=min=0;
printf("Enter the value in Array \n");
for(i=1;i<=3;i++) {
scanf("%d",&arr[i]);
}
printf("\n Value of array \n");
for(i=1;i<=3;i++) { printf("%d \n",arr[i]); }
printf("\n Finding Maximum and minimum value \n");
for(i=1;i<=3;i++) {
if(arr[i]>max) max=arr[i];
if(arr[i]<min) min=arr[i];
}
printf("Max = %d \n Min = %d \n ",max,min);
getch();
}
在C中,索引从0开始,因此有效数组元素为for(i=1;i<=3;i++)
,arr[0]
和arr[1]
,因此for循环应为
arr[2]
好的,现在想象一下你的数组元素是10,5和7。
您将最小值设置为0:
for(i = 0; i < 3; i++)
现在你正在迭代这个循环:
max=min=0;
for(i=0;i<3;i++) {
//...
if(arr[i]<min) min=arr[i];
}
?不,不是。
10 < 0
?不,不是。
5 < 0
?不,不是。
所以你看,min永远不会改变。
要避免这种情况,只需将其设置为读取数组后的第一个元素:
7 < 0
现在,让我们重复我们的循环:
for(i= 0;i < 3;i++) {
scanf("%d",&arr[i]);
}
min = max = arr[0];
for(i=0;i<3;i++) {
//...
if(arr[i]<min) min=arr[i];
}
?不,不是。
10 < 10
?是的!将min设置为5
5 < 10
?不,不是。
现在7 < 5
是5。
您在现有代码中遇到的问题与max相同。想象一下,您为元素输入min
,-4
和-55
- -20
始终保持max
。
答案 1 :(得分:1)
您始终需要在访问C之前初始化C中的变量;这是未定义的行为,不是。最好的办法是,检查数组长度不为零,是将min
/ max
初始化为第零个元素。然后从第一个元素循环。
答案 2 :(得分:1)
max = temp[0]
充当参考点。您开始将每个元素与此进行比较,如果任何元素大于此值,max
值将更新为该值。同样min = temp[0]
也是有效的,但现在算法将被更改,如果有人小于此值,则需要比较每个元素,如果是,则min
将更新为该值。