C查找最大值和最小值?

时间:2013-09-23 10:58:59

标签: c arrays

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

3 个答案:

答案 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将更新为该值。