这个程序为什么错了?

来源:百度知道 编辑:UC知道 时间:2024/05/26 01:48:24
①题目说明:输入N个数到数组中,选出其中最大的数和最小的数,并分别将它们与最前面和最后面得数互换。
②程序代码:
#include<stdio.h>
void main()
{
int a[10],i,t1,t2,max,min;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
{
if(max<a[i])
max=a[i];
else continue;
}
t1=max;
max=a[0];
a[0]=t1;
min=a[9];
for(i=8;i>0;i--)
{
if(min>a[i])
min=a[i];
else continue;
}
t2=min;
min=a[9];
a[9]=t2;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
我运行了下,输入1 2 3 4 5 6 7 8 9 0 其他的都对,只是第九位数成了9,不是1啊?这是为什么呢?

你的交换换的是max、min和对应的a[i]的值,而原来最大值最小值并没有改变。应该用max、min记录所对应数组的序号,这样就是换的对应的值。代码如下,注意两者的不同:
#include<stdio.h>
void main()
{
int a[10],i,t1,t2,max,min;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=0;//修改1
for(i=1;i<10;i++)
{
if(a[max]<a[i])//修改2
max=i;//修改3
else continue;
}
t1=a[max];//修改4
a[max]=a[0];//修改5
a[0]=t1;
min=9;//最小值同理
for(i=8;i>0;i--)
{
if(a[min]>a[i])
min=i;
else continue;
}
t2=a[min];
a[min]=a[9];
a[9]=t2;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}