-3

如果在数组中查找最大值和最小值。我们初始化max =0ormax=temp[0]; 但是在最小值的情况下我们不需要初始化min =0or min=temp[0]... 为什么?

4

3 回答 3

1

max = temp[0]作为参考点。您开始将每个元素与 this 进行比较,如果任何元素大于此,max则 value 将更新为该元素。同样min = temp[0]也是有效的,但是现在算法将被更改,如果有人小于这个,你需要比较每个元素,如果是,那么min将更新为那个。

于 2013-09-23T11:05:02.967 回答
1

首先,在任何情况下都不应该max用初始化0(例如,如果用 初始化,找到包含所有负值的数组的最大值时max0结果将始终为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

于 2013-09-23T11:01:27.167 回答
1

在访问变量之前,您总是需要在 C 中初始化变量;这是未定义的行为。最好的办法是,在检查数组长度不为零后,将min/初始化max为第零个元素。然后从第一个元素循环。

于 2013-09-23T11:01:37.430 回答