输入数组(10个元素,整型),最大的与第一个元素交换,最小的与最后一个元素交换。输出数组。纠错

输入数组(10个元素,整型),最大的与第一个元素交换,最小的与最后一个元素交换。输出数组。不知道哪里错了
#include<stdio.h>
void main()
{
int max,min,a[10],i,t;
for(i=1;i<=10;i++)
scanf("%d ",&a[i]);
max=a[1];
min=a[10];
for(i=1;i<=10;i++){
if(max<=a[i]){
max=a[i];}
t=a[1];
a[1]=a[i];
a[i]=t;}
for(i=2;i<=10;i++){
if(min>a[i]){
min=a[i];}
t=a[10];
a[10]=a[i];
a[i]=t;}
for(i=1;i<=10;i++)
printf("%d ",a[i]);
}

第1个回答  推荐于2016-02-15
错误点:
1.申明数组a[10],则元素有 a[0]~a[9],而不是a[1]~a[10],所以需要修改i的范围;
2.单独进行scanf输入时不需要加上后面的空格,否则输入满10个数据不会跳出循环;
3.定义max min的初值,应改为 max=a[0];min=a[9];
4.判断最大最小值时不能遇到大的数就交换,这样会改变整个数组的顺序,应该用一个变量记录下最大小最小值的位置,等循环完毕之后再进行交换。

程序修应如下,测试通过:
#include<stdio.h>
void main()
{
int max,min,a[10],i,t,p=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);

max=a[0];
min=a[9];

for(i=0;i<10;i++)
{
if(max<=a[i])
{
max=a[i];
p=i;
}
}

t=a[0];
a[0]=a[p];
a[p]=t;

p=9;
for(i=2;i<10;i++)
{
if(min>a[i])
{
min=a[i];
p=i;
}
}
t=a[9];
a[9]=a[p];
a[p]=t;

for(i=0;i<=9;i++)
printf("%d ",a[i]);
}本回答被提问者采纳