求教一道C语言题目

【问题描述】输入一个正整数n(1<n≤10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。【输入形式】从键盘输入... 【问题描述】
输入一个正整数n(1 <n≤10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。
【输入形式】
从键盘输入一个正整数n和n个整数。
【输入输出样例1】(下划线部分表示输入)
Input n:5
Input 5 integers:8 2 5 1 4
After swapped: 1 2 5 4 8 (每个输出数据间有一个空格)
我的答案:
#include<stdio.h>
int main(void)
{
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<n;i++)
scanf("%d",&a[i]);
index1=0;
for(i=1;i<n;i++){
if(a[i]<a[index1])
index1=i;}
index2=0;
for(j=1;j<n;j++){
if(a[i]>a[index2])
index2=i;}
temp1=a[0];
a[index1]=a[0];
a[index1]=temp1;
temp2=a[n-1];
a[index2]=a[n-1];
a[index2]=temp2;

for(i=0;i<n;i++){
printf("%d ",a[i]);

}
return 0;
}
求教哪里出错了?
展开
 我来答
百度网友6fe74e2
推荐于2017-09-20 · TA获得超过6591个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:216万
展开全部

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

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

#include<stdio.h>
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<n;i++)
  scanf("%d",&a[i]);
 index1=0;
 for(i=1;i<n;i++)
 {
  if(a[i]<a[index1])
   index1=i;
 }
 //放这来交换同时,交换你写错了
 temp1=a[0];
 a[0]=a[index1];//a[index1]=a[0];
 a[index1]=temp1;
 index2=0;
 for(j=1;j<n;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<n;i++)
 {
  printf("%d ",a[i]);

 }
 return 0;
}

wenqing8585
2017-09-20 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3791万
展开全部
修正后的代码:(注意有注释的地方)
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<n;i++)

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

index1=0;

for(i=1;i<n;i++){

if(a[i]<a[index1])

index1=i;}

temp1=a[0];

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

a[index1]=temp1;

index2=0;

for(i=1;i<n;i++){ // 这里有修改,你原本的代码把i写成了j

if(a[i]>a[index2])

index2=i;}

temp2=a[n-1];

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

a[index2]=temp2;

for(i=0;i<n;i++){

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

}

return 0;

}
另外,在计算出哪个元素是最小值时,就应该立刻和第一个元素进行互换,而不能在互换前去搜索最大值,因为有可能第一个元素就是最大值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式