迷惑中,请各位指教

greyfox520 2006-05-01 05:30:17
冒泡排序 算法如下
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的内存错误..请问是何解啊?
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanxuaiztt 2006-05-02
  • 打赏
  • 举报
回复
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();
}
zy52620 2006-05-02
  • 打赏
  • 举报
回复
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();


}
tiancaidahai 2006-05-02
  • 打赏
  • 举报
回复
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]显然不对.
greyfox520 2006-05-01
  • 打赏
  • 举报
回复
哦 谢谢了~!!知道了 呵呵
roli1982 2006-05-01
  • 打赏
  • 举报
回复
你的代码
首先第一行
for(k=0;k<=9;k++)scanf("%d",&a[i]);/* &a[i]错了*/

循环体中逻辑错误
外层循环体控制循环的次数,也就是还没排列好的元素
也就是说第一次要把最大的放在最后,也就是a[9]
第二次把前9项中最大的放在a[8]

内层循环控制比较,交换

greyfox520 2006-05-01
  • 打赏
  • 举报
回复
qinshenghai(声哥) 谢谢你 辛苦了~!
greyfox520 2006-05-01
  • 打赏
  • 举报
回复
roli1982(roli) 兄 你的代码对了 能和我讲解下么
貌似我的循环结构也没错 我们两的代码实现的功能一样啊 为什么我的就不行呢?
qinshenghai 2006-05-01
  • 打赏
  • 举报
回复
#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();
}
qinshenghai 2006-05-01
  • 打赏
  • 举报
回复
第一个循环也越界了.
应该是for(i=0;i<9;++i)
如果等于九的话.就循环了十次了.因为我们比较数的时候只用九次就行了
roli1982 2006-05-01
  • 打赏
  • 举报
回复
#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();
}
greyfox520 2006-05-01
  • 打赏
  • 举报
回复
各位 高手帮忙啊 谢谢了 ~!!!
greyfox520 2006-05-01
  • 打赏
  • 举报
回复
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();


}改成这样 也是错的..
gracejp 2006-05-01
  • 打赏
  • 举报
回复
第二冲循环的数组越界了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧