回 帖 发 新 帖 刷新版面

主题:[讨论]C语言冒泡法

本人是一位初学者
  下面有一题,是书本上的,运行是运行了,但,我在输入10个数的时候,就不按从小到大排列了(就只是显示我才刚输入的10个数了)
 题目:请输入10个数,从小到大排列???
#include <stdio.h>
void main()
{int i,j,t,a[10]={0,0};
printf("请输入10个数:\n");
for(i=0;i<10;i++)
   scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
   for(j=0;j=9-i;j++)
       if(a[j]>a[j+1])
       {t=a[j];
       a[j]=a[j+1];
       a[j+1]=t;
       };
printf(" 请从小到大输入");
for(i=0;i<10;i++)
    printf("%d",a[i]);
printf("\n");
}
这个是我编的,不知道是我出毛病了,还是书上的出毛病了,因为,我和书上的那个编出来的是一致,但,我在编译环境里编译出来运行就是不行了!!!

回复列表 (共7个回复)

沙发

if(a[j]>a[j+1])
       {t=a[j];
       a[j]=a[j+1];
       a[j+1]=t;
       };
去掉大括号后面那个分号试试

板凳


[code=c]
#include <stdio.h>
void main()
{int i,j,t,a[10]={0,0};
printf("请输入10个数:\n");
for(i=0;i<10;i++)
    scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
    for(j=0;j<9-i;j++)//j=9-i;i=0时下标越界
        if(a[j]>a[j+1])
        {t=a[j];
         a[j]=a[j+1];
        a[j+1]=t;
        }//原来这个地方多了个没必要的";"号
printf(" 请从小到大输出");
for(i=0;i<10;i++)
    printf("%d",a[i]);
printf("\n");
}
[/code]

3 楼

[quote]
[code=c]
#include <stdio.h>
void main()
{int i,j,t,a[10]={0,0};
printf("请输入10个数:\n");
for(i=0;i<10;i++)
    scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
    for(j=0;j<9-i;j++)//j=9-i;i=0时下标越界
        if(a[j]>a[j+1])
        {t=a[j];
         a[j]=a[j+1];
        a[j+1]=t;
        }//原来这个地方多了个没必要的";"号
printf(" 请从小到大输出");
for(i=0;i<10;i++)
    printf("%d",a[i]);
printf("\n");
}
[/code][/quote]
汗,ls说的对,下标越界是重点……

4 楼

那该怎么处理啊!!!帮帮忙~~~

5 楼

将for(j=0;j<9-i;j++)改成for(j=0;j<9-i-1;j++)
再把多余的分号去掉就可以了

6 楼

错了,应该是改成for(j=0;j<=9-i-1;j++)
至于分号为什么要去掉,因为分号是一条语句结束后加的,在花括号前面已经有了一个分号,那一句已经结束了,如果再加一个,相当于加了一条空语句,虽然不会错,但没有意义,而且最后的输出语句中应该每输出一次加一个间隔符号,否则都连到一块了,如果那个输出回车是为了达到这个效果,那应该加一对花括号

7 楼


for(j=0;j<9-i;j++)//j=9-i;i=0时下标越界
不是给你改了么 我把你的=号改成<号了

我来回复

您尚未登录,请登录后再回复。点此登录或注册