如果在数组中查找最大值和最小值。我们初始化max =0
ormax=temp[0];
但是在最小值的情况下我们不需要初始化min =0
or min=temp[0]
... 为什么?
3 回答
max = temp[0]
作为参考点。您开始将每个元素与 this 进行比较,如果任何元素大于此,max
则 value 将更新为该元素。同样min = temp[0]
也是有效的,但是现在算法将被更改,如果有人小于这个,你需要比较每个元素,如果是,那么min
将更新为那个。
首先,在任何情况下都不应该max
用初始化0
(例如,如果用 初始化,找到包含所有负值的数组的最大值时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();
}
有几件事情是行不通的:
for(i=1;i<=3;i++)
在 C 中,索引从 0 开始,所以有效的数组元素是arr[0]
,arr[1]
和arr[2]
,所以 for 循环应该是
for(i = 0; i < 3; i++)
好的,现在假设您的数组元素中有 10、5 和 7。
您将最小值设置为 0:
max=min=0;
现在你正在迭代这个循环:
for(i=0;i<3;i++) {
//...
if(arr[i]<min) min=arr[i];
}
是10 < 0
吗?不,这不对。
是5 < 0
吗?不,这不对。
是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
吗?不,这不对。
是5 < 10
吗?是的!将最小值设置为 5
是7 < 5
吗?不,这不对。
现在min
是5。
您在现有代码中遇到的相同问题,max. 想象一下,你进入-4
,-55
并且-20
对于元素——max
会一直停留0
。
在访问变量之前,您总是需要在 C 中初始化变量;这是未定义的行为。最好的办法是,在检查数组长度不为零后,将min
/初始化max
为第零个元素。然后从第一个元素循环。