C语言数组将最小值与第一个数交换,最大值与最后一个数交换 5

大致意思是输入一个数n,然后输入n个数字组成一个数组,将最小值与第一个数交换,最大值与最后一个数交换,下面是我写的程序,请问有什么错误。#include<stdio.h>... 大致意思是输入一个数n,然后输入n个数字组成一个数组,将最小值与第一个数交换,最大值与最后一个数交换,下面是我写的程序,请问有什么错误。

#include<stdio.h>
int main(void)
{
int a[10];
int i,n,temp1,max,j,temp2;
printf("Input n:");
scanf("%d",&n);
printf("Input %d integers:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);

//*最小值与第一个数交换*//

temp1=a[0];
for(i=1;i<n;i++)
if(a[i]<a[0]){
a[0]=a[i];
a[i]=temp1;}

//*最大值与最后一个数交换*//
j=0;
temp2=a[n-1];
max=a[0];

for(i=1;i<n-1;i++)
if(a[i]>max){
max=a[i];
j=i;}

a[n-1]=a[j];
a[j]=temp2;

//*输出数组*//
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");

return 0;
}
展开
 我来答
柯南ZAJ30be65
2013-12-26 · 超过21用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:33.9万
展开全部
不对,思路似乎有些乱。
第一个for循环,写出的功能是:只要遇到比a[0]小的值例如a[i],a[0]就会被替换,而a[i]则会被a[0]覆盖。那么试问,如果数组有多个数值比a[0]小,那么那些值统统都会被赋值为a[0]的值么?
例如: 5 4 3 2 1
你的代码在最小值替换那里已经变成了: 1 5 5 5 5

在最大值与最后一个数交换那里,用变量j记录最大值的位置,这个想法就蛮好的。
不过,第二for循环那里问题是,找到一个为什么就要把值换掉呢?
不是应该是查询完整个数组后,找到最大的是哪一个值,最后再进行替换。不是应该这样么?

主要问题是:不要一找到就进行替换。先找,整个数组找完后,既for循环结束后,再进行替换。
无风无云的海角
2013-12-26
知道答主
回答量:14
采纳率:0%
帮助的人:11万
展开全部
首先是a[10],你已经限定了数组的元素为10个,所以你输入的n与数组元素个数不符!在交换最小值时,每次交换a[i]都会赋值成a[0];而在交换最大值时max=a[i]这句好像没什么用处!我的代码是这样的!
#include<stdio.h>
void out_arry(int a[],int n);
int main()
{
int a[10];
int i,k,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
k=0;
if(a[k]>a[i])
k=i;
if(k!=0)
{
t=a[0];
a[0]=a[k];
a[k]=t;
}
}
out_arry(a,10);
for(i=0;i<9;i++)
{
k=9;
if(a[k]<a[i])
k=i;
if(k!=9)
{
t=a[9];
a[9]=a[k];
a[k]=t;
}
}
out_arry(a,10);
return 0;
}
void out_arry(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
love__Byakuran
2013-12-27
知道答主
回答量:43
采纳率:0%
帮助的人:21.5万
展开全部
#include<cstdio>
#include<cstdlib>
int main()
{
int i,n;
int a[100];
int s,p;
printf("n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
s=a[0];
p=0;
for(i=1;i<n;i++)
{
if(s<a[i])
{
s=a[i];
p=i;
}
}
a[p]=a[n-1];
a[n-1]=s;
s=a[0];
p=0;
for(i=1;i<n;i++)
{
if(s>a[i])
{
s=a[i];
p=i;
}
}
a[p]=a[0];
a[0]=s;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
system("pause");
return 0;
}

【这个是我很久之前写的 不知道是不是这道题的了 假如不是我再尝试写一写吧】
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式