求教一道C语言题目

2024-12-21 21:40:58
推荐回答(2个)
回答1:

c语言中声明数组时,一定要显式的指明数组长度,所以数组长度是个常数,int a[n]这种声明法是明显错误的。你可以看到,n最大值是10,那么直接声明一个int a[10]就可以了。

另外,你的交换算法也还有问题,修改如下,//注释并且修改:

#include
int main(void)
{
 int n,i,j,index1,index2,temp1,temp2,a[10];  //直接声明a[10]
 printf("Input n: ");
 scanf("%d",&n);
 //int a[n];
 printf("Input 5 integers: ");
 for(i=0;i  scanf("%d",&a[i]);
 index1=0;
 for(i=1;i {
  if(a[i]   index1=i;
 }
 //放这来交换同时,交换你写错了
 temp1=a[0];
 a[0]=a[index1];//a[index1]=a[0];
 a[index1]=temp1;
 index2=0;
 for(j=1;j {
  if(a[j]>a[index2])  //这儿应该是j       a[i]>a[index2]
   index2=j;//这儿应该是j  index2=i;
 }
 //
 temp2=a[n-1];
 a[n-1]=a[index2];//a[index2]=a[n-1];
 a[index2]=temp2;

 printf("After swapped:");//加一句
 for(i=0;i {
  printf("%d ",a[i]);

 }
 return 0;
}

回答2:

修正后的代码:(注意有注释的地方)
int main()

{
int n,i,j,index1,index2,temp1,temp2;

printf("Input n: ");

scanf("%d",&n);

int a[n];

printf("Input 5 integers: ");

for(i=0;i
scanf("%d",&a[i]);

index1=0;

for(i=1;i
if(a[i]
index1=i;}

temp1=a[0];

a[0]=a[index1]; // 这里有修改,你原本的代码写反了

a[index1]=temp1;

index2=0;

for(i=1;i
if(a[i]>a[index2])

index2=i;}

temp2=a[n-1];

a[n-1]=a[index2]; // 这里有修改,你原本的代码写反了

a[index2]=temp2;

for(i=0;i
printf("%d ",a[i]);

}

return 0;

}
另外,在计算出哪个元素是最小值时,就应该立刻和第一个元素进行互换,而不能在互换前去搜索最大值,因为有可能第一个元素就是最大值。