输入数组函数返回多个值

时间:2018-06-19 16:46:58

标签: c

“创建一个实现一个函数的程序,该函数输入向量及其大小,并通过函数的两个参数返回向量的最大值和最小值” 我正在执行此程序,但找不到错误。我朝着正确的方向前进?

-对不起,我的英语不好。

#include <stdio.h>
int function (int A[],int size,int *max, int *min)
{
    int temp,i,j;

    for(i=0;i<size;i++)
    {
        for(j=0;i<size;j++)
        {
            if(A[i] < A[j])
            {
                temp = A[i];
                A[i] = A[j];
                A[j] = temp;
            }
        }

    }

    *min = A[size]; 
    *max = A[0];

    return 0;
}



int main ()

{
    int size,i;
    int max,min;
    int *A;

    printf("Enter size of the array ");
    scanf("%d",&size);

    A = (int*)malloc(size * sizeof(int));

    for(i=0;i<size;i++)
    {
        printf("Enter value:");
        scanf("%d",&A[i]);
    }

    function(A,size,&max,&min);

    printf("The min is: %d\n",min);
    printf("The max is: %d:\n",max);

}

2 个答案:

答案 0 :(得分:1)

在这一行中,for(j=0;i<size;j++)应该是i,而不是j。另外,最好用int A[]代替int *A。最后一点是,如注释中所述,您无需对所有数组进行排序,因为其实现的计算复杂度为\Theta(n^2)。最好使用通用方法在min中找到maxO(n)

答案 1 :(得分:0)

您有多个错误。请阅读以下代码的注释:

#include <stdio.h>

void function (int A[],int size,int *max, int *min) // you're not returning any value from this function. So return type should be void
{
    int temp,i,j;

    for(i=0;i<size;i++)
    {
        for(j=0;j<size;j++)
        {
            if(A[i] < A[j])
            {
                temp = A[i];
                A[i] = A[j];
                A[j] = temp;
            }
        }

    }

    *min = A[0]; //updated
    *max = A[size-1]; //updated
       //updated,no return statement

}



int main ()

{
    int size,i;
    int max,min;
    int *A;

    printf("Enter size of the array ");
    scanf("%d",&size);

    A = (int*)malloc(size * sizeof(int));

    for(i=0;i<size;i++)
    {
        printf("Enter value:");
        scanf("%d",&A[i]);
    }

    function(A,size,&max,&min);

    printf("The min is: %d\n",min);
    printf("The max is: %d:\n",max);
    return 0;

}

注意:程序的时间复杂度很高。您可以比这更有效地计算最小值和最大值。就像以下程序的时间复杂度是O(n)

#include <stdio.h>
void function (int A[],int size,int *max, int *min)
{
    int i;
    *min=A[0];
    *max=A[0];

    for(i=1;i<size;i++)
    {

        if(*min>A[i])
        {
            *min = A[i];
        }
        if(*max<A[i])
        {
            *max=A[i];
        }

    }

}

其他说明:您可以在输入时计算最大值和最小值。喜欢:

#include <limits.h>
int main ()

{
    int size,i;
    int max=INT_MIN,min=INT_MAX;
    int *A;

    printf("Enter size of the array ");
    scanf("%d",&size);

    A = (int*)malloc(size * sizeof(int));
    for(i=0;i<size;i++)
    {
        printf("Enter value:");
        scanf("%d",&A[i]);
        if(A[i]>max)
        {
            max = A[i];
        }
        if(A[i]<min)
        {
            min = A[i];
        }
    }


    printf("The min is: %d\n",min);
    printf("The max is: %d:\n",max);
    return 0;

}