主题:[讨论]C语言冒泡法
751536189
[专家分:0] 发布于 2010-07-07 18:03:00
本人是一位初学者
下面有一题,是书本上的,运行是运行了,但,我在输入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个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-07-07 23:00:00
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
};
去掉大括号后面那个分号试试
板凳
alweeq86 [专家分:1170] 发布于 2010-07-07 23:03:00
[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 楼
雪光风剑 [专家分:27190] 发布于 2010-07-08 09:44:00
[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 楼
751536189 [专家分:0] 发布于 2010-07-08 10:03:00
那该怎么处理啊!!!帮帮忙~~~
5 楼
土豆土豆 [专家分:70] 发布于 2010-07-08 11:56:00
将for(j=0;j<9-i;j++)改成for(j=0;j<9-i-1;j++)
再把多余的分号去掉就可以了
6 楼
土豆土豆 [专家分:70] 发布于 2010-07-08 12:46:00
错了,应该是改成for(j=0;j<=9-i-1;j++)
至于分号为什么要去掉,因为分号是一条语句结束后加的,在花括号前面已经有了一个分号,那一句已经结束了,如果再加一个,相当于加了一条空语句,虽然不会错,但没有意义,而且最后的输出语句中应该每输出一次加一个间隔符号,否则都连到一块了,如果那个输出回车是为了达到这个效果,那应该加一对花括号
7 楼
alweeq86 [专家分:1170] 发布于 2010-07-08 18:52:00
for(j=0;j<9-i;j++)//j=9-i;i=0时下标越界
不是给你改了么 我把你的=号改成<号了
我来回复