【问题标题】:Why I am always getting 0 as the minimum of an array为什么我总是将 0 作为数组的最小值
【发布时间】:2017-10-05 13:21:39
【问题描述】:

下面是我从数组中查找最小值和最大值的代码。谁能解释为什么我得到 0 作为最小元素的输出?这可能是什么原因?

我正在根据需要获得数组元素中的最大值。

#include<stdio.h>
#define N 3

int a[N],min,max, max1,min1;
void minmax(int m,int n);

void minmax(int m, int n){
    if(m==n){
        max=min=a[m];
        return;
    }

    if(m == n-1){
        if(a[m]>a[n]){
            max= a[m];
            min = a[n];

        }
        else{
            max= a[n];
            min = a[m];
        }
    }
    else{

        int mid = (m+n)/2;

        minmax(1,mid);
        max1=max;
        min1=min;
        minmax(mid+1,n);
    }

    if(max1>max){
        max= max1;
    }

    if(min1<min){
        min=min1;
    }


}

int main(){

    int i,j,k;
    printf("Enter array\n");
    for(i=1;i<=N;i++)   //input
        scanf("%d",&a[i]);

    minmax(1,N);

    printf("%d %d",max,min);

}

【问题讨论】:

  • for(i=1;i&lt;=N;i++) --> for(i=0;i&lt;N;i++) C 是 0 来源。
  • 请正确缩进你的代码,这是无法阅读的。
  • a[3] 不存在; a[0] 尚未设置。
  • 你的递归方法坏了; minmax 是全局变量,但您可以像使用它们一样使用它们...

标签: c minimum minmax


【解决方案1】:
  • 在您的minmax 函数中,您在m==n 时从调用返回
  • 但是当它达到那个值时,你知道 m 和 n 的值吗?之一 这些值包括m=n=0

首先,您的for 循环从index=1 till N 获取一个数组。如果这样做,请确保在 minmaxfunction 中也进行必要的更改。

所以,最简单的解决方法(刚刚在 cmets 中也提到过)是:

for(i=1;i&lt;=N;i++) 更改为for(i=0;i&lt;N;i++)

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 2015-05-19
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多