CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

迷惑中,请各位指教

楼主greyfox520()2006-05-01 17:30:17 在 C/C++ / C语言 提问

冒泡排序   算法如下  
  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

相关问题

关键词

得分解答快速导航

  • 帖主:greyfox520

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo