帮我看看这个c语言程序哪里错了,我是初学者。输出的是一连串0

#include <stdio.h>
main()
{
float a[11];
int i,j;
float t;
printf("Please input 10 students'scores:\n");
for (i=0;i<10;i++)
scanf("%f",&a[i]);
printf("\n");
for (j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]<a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
printf("The sorted scores:\n");
for (i=0;i<10;i++)
printf("%f\t",a[i]);
printf("\n");

printf("Please input the last number:");
scanf("%f",&a[10]);
for (j=0;j<10;j++)
for(i=0;i<10-j;i++)
if(a[i]<a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
printf("The new sorted scores:\n");
for (i=0;i<11;i++)
printf("%f\t",a[i]);
printf("\n");

for (j=0;j<10;j++)
for(i=0;i<10-j;i++)
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
printf("The new sorted scores are arrayed from small to big as follows:\n");
for (i=0;i<11;i++)
printf("%f\t",a[i]);
printf("\n");

return 0;
}

没问题啊 就是方向反了吧
从大到小而已

if(a[i]<a[i+1]) 就去交换 就是把大的换到前面嘛

后面0是多了点
printf("%f\t",a[i]); 可以改成printf("%0.1f\t",a[i]); 小数点后一位小数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
你的排序算法有问题,问题出在循环上面,冒泡排序的标准循环方法如下(升序):
for (i = 0; i < 9; i++)
{
for (j = i + 1; j < 10; j++)
{
if (a[i] > a[j]) //要降序排的话改成 a[i] < a[j]就行了
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
第2个回答  2011-07-01
话说你这个是排序吧 可以正常排呀 不想要后面的0 就把输出格式改改
相似回答