大神们帮我看看这个到底怎么了呢。。。求帮助。。。谢谢。。。。
#include<stdio.h>
int main(void)
{
int a[10];
int i;
int k;
int t;
printf("please input scores\n");
for(i=0; i<=9; i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0; i<=9; i++)
printf("第%d个成绩是%d\n", i+1, a[i]);
for(k=0; k<10; k++)
for(i=0; i<=9-k; i++)
if(a[i]<a[i+1])
{
t=a[i+1];
a[i+1]=a[i];
a[i]=t;
}
printf("成绩最好到最差排列:");
for(i=0; i<=9; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
我想把我输入到数组的数组从大到小的排序,但是在会结果会出现垃圾数字不知道为什么,还有显示不完。。。倒序过后的数字就最后一个显示不了,第一个是个垃圾数字,这个是为什么呢。。。。
在xp和win7都试过了,用的编译器是vc++6.0的,求帮助,是我的代码的问题吗?
[解决办法]
if(a[i]<a[i+1])
你看循环里的这个表达式
当第一层循环k=0是
如果i=9-k的话 那么i=9-0=9
if(a[i]<a[i+1]) a[i+1]就是a[10]了,数组访问就越界了
或者你想一想,如果n个数,相邻两两比较,比较的次数是n-1,而不是n次
第一次的时候 是全部的10个数子都要比较 也就是比较9次 i=0~8,一共9次,所以是i=9-k-1.
[解决办法]
a[i+1]当i=9时越界了(俗话说是超出范围了)所以你所有的都是垃圾值。