迷惑中,请各位指教
冒泡排序 算法如下
main()
{ int i,j,k,m,n,a[10];
for(k=0;k<=9;k++)scanf("%d",&a[i]);
for(j=0;j<=9;j++)
for(i=1;i<=10-j;i++)
{if(a[i]>a[i+1])
{m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
for(i=0;i<=9;i++)printf("%d ",a[i]);
getch();
}
在TC2.0和WIN-TC下编译 输入 10 9 8 7 6 5 4 3 2 1 后输出结果为4400 -26 292 962 1373..等结果
在VC6.0下更是奇怪COMPILE能通过,运行是弹出unhandled exception in 11111.exe:0xC0000005 access error的内存错误..请问是何解啊?
问题点数:1、回复次数:13Top
1 楼gracejp()回复于 2006-05-01 17:36:21 得分 0
第二冲循环的数组越界了Top
2 楼greyfox520()回复于 2006-05-01 17:41:20 得分 0
main()
{ int i,j,k,m,n,a[10];
for(k=0;k<=9;k++)scanf("%d",&a[i]);
for(j=0;j<=9;j++)
for(i=0;i<=8-j;i++)
{if(a[i]>a[i+1])
{m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
for(i=0;i<=9;i++)printf("%d ",a[i]);
getch();
}改成这样 也是错的..Top
3 楼greyfox520()回复于 2006-05-01 19:53:25 得分 0
各位 高手帮忙啊 谢谢了 ~!!!Top
4 楼roli1982(roli)回复于 2006-05-01 20:15:54 得分 0
#include "stdio.h"
main()
{
int i,j,k,m,n,a[10];
for(k=0;k<=9;k++)scanf("%d",&a[k]);
for(j=9;j>=0;j--)
{
for(i=0;i<=j-1;i++)
{if(a[i]>a[i+1])
{
m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
}
for(i=0;i<=9;i++)printf("%d ",a[i]);
getch();
}Top
5 楼qinshenghai(声哥)回复于 2006-05-01 20:46:11 得分 0
第一个循环也越界了.
应该是for(i=0;i<9;++i)
如果等于九的话.就循环了十次了.因为我们比较数的时候只用九次就行了Top
6 楼qinshenghai(声哥)回复于 2006-05-01 20:48:37 得分 0
#include <stdio.h>
void main(void)
{
int i,j,k,m,n,a[10];
for(k=0;k<=9;k++)scanf("%d",&a[k]);
for(j=0;j<9;j++)
{
for(i=0;i<=9-j;i++)
{if(a[i]>a[i+1])
{
m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
}
for(i=0;i<=9;i++)printf("%d ",a[i]);
getch();
}Top
7 楼greyfox520()回复于 2006-05-01 20:54:39 得分 0
roli1982(roli) 兄 你的代码对了 能和我讲解下么
貌似我的循环结构也没错 我们两的代码实现的功能一样啊 为什么我的就不行呢?Top
8 楼greyfox520()回复于 2006-05-01 20:59:55 得分 0
qinshenghai(声哥) 谢谢你 辛苦了~!Top
9 楼roli1982(roli)回复于 2006-05-01 21:06:05 得分 0
你的代码
首先第一行
for(k=0;k<=9;k++)scanf("%d",&a[i]);/* &a[i]错了*/
循环体中逻辑错误
外层循环体控制循环的次数,也就是还没排列好的元素
也就是说第一次要把最大的放在最后,也就是a[9]
第二次把前9项中最大的放在a[8]
内层循环控制比较,交换
Top
10 楼greyfox520()回复于 2006-05-01 21:09:46 得分 0
哦 谢谢了~!!知道了 呵呵Top
11 楼tiancaidahai()回复于 2006-05-02 19:23:35 得分 0
for(j=9;j>=0;j--)
{
for(i=0;i<=j-1;i++)
{if(a[i]>a[i+1])
{
m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
}
当循环到最后一次时(当j=0时),这时i的最后一次循环值就为-1.
a[-1]显然不对.Top
12 楼zy52620(xiaogang)回复于 2006-05-02 19:30:24 得分 0
main()
{ int i,j,k,m,n,a[10];
for(k=0;k<=9;k++)scanf("%d",&a[i]);
for(j=0;j<=9;j++)
for(i=j;i<=9-j;i++)
{if(a[i]>a[i+1])
{m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
}
for(i=0;i<=9;i++)printf("%d ",a[i]);
getch();
}
Top
13 楼hanxuaiztt(依旧飘流)回复于 2006-05-02 21:16:02 得分 0
main()
{ int i,j,temp,a[10];
i=0;
do { scanf("%d",&a[i]);
i++;}while(i<10);
for(j=0;j<10;j++)
for(i=0;i<10-j;i++)
if(a[i]>a[i+1])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
getch();
}Top




