杭电c入门简单问题 求指导一下

题目如下
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

Sample Input
3 3 -4 2
4 0 1 2 -3
0

Sample Output
-4 3 2
-3 2 1 0

Author
lcy

Source

我编的代码如下

**#include

int main()

{

int n;

int a[1000];

int b[1000];

int c[1000];

int i;

int h;

int q;

int k;

while(scanf("%d",&n)!=EOF)

{

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

{

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

}

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

{

if(a[i]<0)

{

b[i]=-1*a[i];

}

else

{

b[i]=a[i];

}

}

h=0;

q=0;

for(k=1;k<=n;k++)

{

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

{

if(b[h]<b[i])

{

h=i;

}

}

c[q]=b[h];

if(c[q]==a[h])

{

if(q!=n)

{

printf("%d ",c[q]);

}

if(q==(n-1))

{

printf("%d\n",c[q]);

}

}

if(c[q]!=a[h])

{

c[q]=-1*c[q];

if(q!=n)

{

printf("%d ",c[q]);

}

if(q==(n-1))

{

printf("%d\n",c[q]);

}

}

b[h]=0;

h=0;

q=q+1;

}

}

return 0;

}**

问题是我最后输出的时候老是多输出最后一个数字,如我输入3 -4 5 1 输出的应该是5 -4 1但是我的是5 -4 1 1 不太明白最后的1 在哪里输出的求大神帮忙看看那里的问题应该如何解决谢谢了

下面这两个判断有重复的地方,当q=n-1的时候两个都会满足

 if(q!=n)
                {
                    printf("%d ",c[q]);
                }
                if(q==(n-1))
                {
                    printf("%d\n",c[q]);
                }

应该改为

 if(q!=n-1)
                {
                    printf("%d ",c[q]);
                }
                if(q==(n-1))
                {
                    printf("%d\n",c[q]);
                }

谢谢您的回答 谢谢了