C语言问题6

来源:百度知道 编辑:UC知道 时间:2024/06/17 07:08:44
#include "stdio.h"
main()
{int i,j,p,s,q,a[10];
for (i=0;i<10;i++)
{printf("Input the %dth number:",i+1);
scanf("%d",&a[i]);}
for (i=0;i<10;i++)
{p=i;q=a[i];
for (j=1;j<10;j++)
if (q<a[j])
{p=j;q=a[j];}
if (i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s;}
printf("%d\t",a[i]);
}
}
输入10个数,然后按顺序输出这10个数,但都错!错在哪里?我头都大了,求高手帮帮忙!谢谢!

你想得太复杂了,没必要去比较i与j,实际上只要把大个的往后排就可以了。而且,你不能在还没调整完顺序,就输出结果,否则现实的当然不是正确的答案。
以下是我测试的代码:

#include <stdio.h>

void main()
{
int i,j,s,a[10];
for (i=0;i<10;i++)/*输入数据*/
{
printf("Input the %dth number:",i+1);
scanf("%d",&a[i]);
}
for (i=0;i<10;i++)
for (j=0;j<10;j++)
if (a[j]>a[i])
{
s=a[i];
a[i]=a[j];
a[j]=s;
}
for (i=0;i<10;i++)/*显示新数组*/
printf("%d ",a[i]);
printf("\n");
}
最后提个意见,以后发代码时,请采用缩进格式,这样代码的可读性就更好些,而且也好找错。

这是干吗用的要说明啊,否则看起来很累。
难道是为了输入10个数又把它输出来,我想不会吧!