c语言 要求由大到小排列15个数

#include<stdio.h>
void main()
{
int i,j,t,a[15];
printf("enter data:\n");
for(i=0;i<16;i++)
{printf("a[%d]=",i);
scanf("%5d",&a[i]);
}
printf("\n");
printf("the original data is:\n");
for(i=0;i<16;i++)
{printf("%5d",a[i]);}
for(i=0;i<16;i++)
{for(j=0;j<16-i;j++)
if(a[i]<a[i+1])
t=a[i+1];
a[i+1]=a[i];a[i]=t;}
printf("the sorted number is:\n");
for(i=0;i<16;i++)
printf("%5d",a[i]);
printf("\n");
}

哪里有错误啊????

#include<stdio.h>

#include<time.h>

#include<stdlib.h>
//我将你手动输入的部分改成了随机生成数字,别介意
void main()

{

  int i,j,t,a[15];

  printf("enter data:\n");

 srand((int)time(0));

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

  {

  a[i]=rand()%500;

  }

  printf("\n");

  printf("the original data is:\n");

//你所定义的数组大小为15.所以你的数组地址为0~14将16处全部改成15
   for(i=0;i<15;i++)

  {

   printf("%5d",a[i]);

  }

//冒泡排序中内侧的循环才是比较需要的。 
 for(i=0;i<15;i++)

 {

  for(j=0;j<15-i;j++)

  {

   if(a[j]<a[j+1])

   {

    t=a[j+1];

    a[j+1]=a[j];

    a[j]=t;

   }

  }

 }

 printf("the sorted number is:\n");

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

    printf("%5d",a[i]);

   printf("\n");getchar();

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-26
for(i=0;i<16;i++) 第6行,应该是for(i=0;i<15;i++) 是15,从0开始的到14一共是15个数字

数组边界越界会发生指针错误
其他的for循环也一样的错了
改过来就行
第2个回答  2013-09-26
for(i=0;i<15;i++)

{
for(j=i;j<15;j++)
{
if(a[i]<a[j])
t=a[j];
a[j]=a[i];
a[i]=t;
}
}

其他地方更改:
16都改成15
第3个回答  2013-09-26

1、数组长度。15个数字 里面的16全改15 否则越界了~~

2、调换的错误:

 for(j=0;j<15-i;j++)
 {
    if(a[i]<a[i+1])
    {
        t=a[i+1];
        a[i+1]=a[i];
        a[i]=t;
    }
 }

第4个回答  2013-09-26
把scanf("%5d",&a[i]);改成scanf("%d",&a[i]);

%5d 主要是用在显示的缩进上面,输入不用!!
还有越界的问题,a[15]是从a[0] 到a[14],

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网