以下代码中的错误是什么?

-3 c arrays

在运行时,max从数字列表中给出所需的最大数量,但是min没有给出它应该给出的最小数量.例如:

如果输入是:

5
45 7 2 1 4

以下代码的输出是:

最大数量是45

最小数量为0

为什么?

#include <stdio.h>
#include <limits.h>
#define MX 1000000

int max=INT_MIN;
int min=INT_MAX;

int findmax(int a[],int n)
{
    if(n<0)
        return max;
    if(a[n]>max)
    {
        max=a[n];
    }
    return findmax(a,n-1);
}

int findmin(int a[],int n)
{
    if(n<0)
        return min;
    if(a[n]<min)
    {
        min=a[n];
    }
    return findmin(a,n-1);
}

int main(void) {
    int a[MX],n,i;
    printf("Enter the number of elements:\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("Maximum number is %d\n",findmax(a,n));
    printf("Minimum number is %d\n",findmin(a,n));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

在您的代码中,您正在初始化索引0的值n-1,但是在findmax()和之内findmin(),您正在使用索引n.该值未初始化为任何值(a自动局部变量,记住吗?),以及该指数(内容)中的值是不确定的.

因此,使用该索引访问实际上是尝试读取调用未定义行为的单元化变量 .

作为第二个参数调用findmax()findmin()使用n-1.