搜索
查看: 1789|回复: 1
打印 上一主题 下一主题

第三章第七节三个数排序算法一出错

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-26 01:00:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚下了最新版啊哈C编程入门书。读完第三章第六节,不禁对该节算法的修正叫好!然而紧跟着的第七节排序算法一却又犯了老错误:若输入的三个数全相等,则将输出六次排序后的结果;若三个数中有两个相等,则将输出两次。不得不说是一大遗憾啊。我写了段代码,将修正前后的算法针对七种相等情况做对比验证,证明修正后的算法输出正常,即均只有一次。希望下个版本能改进
代码如下:
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         int a,b,c;
  5.         int i=1;

  6.         while (i<8)
  7.         {
  8.                 printf("\n第 %d 次。请输入三个整数,以逗号分隔:\n",i++);
  9.                 scanf("%d,%d,%d",&a,&b,&c);

  10.                 printf("书上的算法:\n");
  11.                 if (a>=b && b>=c) printf("a,b,c\t%d\t%d\t%d\n",a,b,c);
  12.                 if (a>=c && c>=b) printf("a,c,b\t%d\t%d\t%d\n",a,c,b);
  13.                 if (b>=a && a>=c) printf("b,a,c\t%d\t%d\t%d\n",b,a,c);
  14.                 if (b>=c && c>=a) printf("b,c,a\t%d\t%d\t%d\n",b,c,a);
  15.                 if (c>=a && a>=b) printf("c,a,b\t%d\t%d\t%d\n",c,a,b);
  16.                 if (c>=b && b>=a) printf("c,b,a\t%d\t%d\t%d\n",c,b,a);
  17.        
  18.                 printf("\n改进后的算法:\n");
  19.                 if (a>=b && b>=c) printf("a,b,c\t%d\t%d\t%d\n",a,b,c);
  20.                 if (a>=c && c>b) printf("a,c,b\t%d\t%d\t%d\n",a,c,b);
  21.                 if (b>a && a>=c) printf("b,a,c\t%d\t%d\t%d\n",b,a,c);
  22.                 if (b>=c && c>a) printf("b,c,a\t%d\t%d\t%d\n",b,c,a);
  23.                 if (c>a && a>=b) printf("c,a,b\t%d\t%d\t%d\n",c,a,b);
  24.                 if (c>b && b>a) printf("c,b,a\t%d\t%d\t%d\n",c,b,a);
  25.         }

  26.         return 0;
  27. }
复制代码

评分

参与人数 1啊哈币 +10 收起 理由
啊哈磊 + 10 很给力!

查看全部评分

沙发
发表于 2013-3-26 10:29:21 | 只看该作者
感谢你的回馈 送你一个小礼物,我已经私信你。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表