我是C的新手,正在编写一段从整数数组中打印最大值和最小值的代码。例如:输入为1 2 3 4 5,则输出将为min=1+2+3+4=10,max=2+3+4+5=14。我的代码给出的输出是0 0,而不是10 14。我就是不明白为什么。
#include <stdio.h>
int main()
{
int len;
int max=0,min=0;
scanf("%d", &len);
int arr[len];
for(int i=0;i<len;i++)
{
scanf("%d", &arr[i]);
}
int cpy;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
cpy = arr[i+1];
arr[i+1]=arr[i];
arr[i]=cpy;
}
}
}
for(int i=0;i<len-1;i++)
{
min = min + arr[i];
max = max + arr[i+1];
}
printf("%d %d", min, max);
}
在本部分中:
if(arr[i]>arr[j])
{
cpy = arr[i+1];
arr[i+1]=arr[i];
arr[i]=cpy;
}
比较i和j索引,但交换i和i+1索引。在您的情况下:
- 5 1 2 3 4 5给出14 10
- 5 5 4 3 2 1给出13 10
您还应该循环i<len-1。即使它的工作原理是j循环不会在i=len-1时运行,也最好避免不必要的循环,因为这可能会导致未定义的行为。
你可能对arr的声明有问题(我有错误,但这可能取决于编译器(。尝试分配:
#include <stdlib.h>
…..
int *arr = calloc(len, sizeof (*arr));