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
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;
}
修正后的代码:(注意有注释的地方)
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;
}
另外,在计算出哪个元素是最小值时,就应该立刻和第一个元素进行互换,而不能在互换前去搜索最大值,因为有可能第一个元素就是最大值。