C 返回多个值的输入数组函数
创建一个实现函数的程序,该函数输入向量及其大小,通过函数的两个参数返回向量的最大值和最小值 我正在做这个程序,但我找不到错误。我走对了方向 -对不起,我的英语不好C 返回多个值的输入数组函数,c,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++)
#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);
}
#包括
int函数(int A[],int size,int*max,int*min)
{
内部温度,i,j;
对于(i=0;i在这一行中for(j=0;i您有多个错误。请阅读以下代码的注释:
#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;
}
附加说明:您可以在输入过程中计算最大值和最小值。例如:
#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;
}
#包括
int main()
{
int大小,i;
int max=int_MIN,MIN=int_max;
int*A;
printf(“输入数组的大小”);
scanf(“%d”,大小(&S);
A=(int*)malloc(size*sizeof(int));
对于(i=0;imax)
{
max=A[i];
}
if(A[i]如果只需要最大值和最小值,则无需对数组进行排序。A[size]
超出范围,因为A只有size
元素长。正如OmG所指出的,for
的第二个循环有错误的测试(它应该测试j
而不是i
)。此外,您还可以使用for(i=0;i
和for(j=i+1;j
来减少迭代次数。但它仍然是O(n^2)您不需要排序,只需在单个循环中搜索最小值和最大值。发布的代码缺少以下语句:#include
,需要公开函数的原型:malloc()
发布的代码还需要调用free()
以避免内存泄漏。调用任何堆分配函数时:malloc
calloc
realloc
1)返回的类型为void*
,因此可以分配给任何指针。强制转换只会使代码混乱,使其更难理解、调试等。2)始终选中(!=NULL)确保操作成功的返回值。该函数按降序对数组进行排序时,实际上会得到错误的最小值和最大值。但他在这里按升序对数组进行排序。我得到更正!排序例程的双重覆盖误导了我。@Ian Abbott我认为这是最严重的错误如果*min>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;
}