“创建一个实现一个函数的程序,该函数输入向量及其大小,并通过函数的两个参数返回向量的最大值和最小值” 我正在执行此程序,但找不到错误。我朝着正确的方向前进?
-对不起,我的英语不好。
#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);
}
答案 0 :(得分:1)
在这一行中,for(j=0;i<size;j++)
应该是i
,而不是j
。另外,最好用int A[]
代替int *A
。最后一点是,如注释中所述,您无需对所有数组进行排序,因为其实现的计算复杂度为\Theta(n^2)
。最好使用通用方法在min
中找到max
和O(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;
}