首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大神们帮小弟我看看这个到底如何了呢。求帮助。多谢。

2012-06-04 
大神们帮我看看这个到底怎么了呢。。。求帮助。。。谢谢。。。。#includestdio.hint main(void){int a[10]int ii

大神们帮我看看这个到底怎么了呢。。。求帮助。。。谢谢。。。。
#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时越界了(俗话说是超出范围了)所以你所有的都是垃圾值。

热点排行