IMAX鱼油 发表于 2018-6-23 18:46:13

课后作业21 动动手第0题答案不对啊

动动手 第0 题的答案有问题啊
#include <stdio.h>

int main()
{
      int a, b, c;
      int *d, *e, *f, *g;

      printf("请输入三个数:");
      scanf("%d%d%d", &a, &b, &c);

      d = &a;
      e = &b;
      f = &c;

      if (a > b)
      {
                g = d;
                d = e;
                e = g;
      }

      if (a > c)
      {
                g = d;
                d = f;
                f = g;
      }

      if (b > c)
      {
                g = e;
                e = f;
                f = g;
      }

      printf("%d <= %d <= %d\n", *d, *e, *f);

      return 0;
}
输入a=5,b=3,c=4,打印出来结果是4<=5<=3,但是其他5种情况都可以正确输出(3个数排序总共6种组合)
我写的答案是:
#include <stdio.h>

int main()
{
      int a, b, c;
      int *d, *e, *f, *g;

      printf("请输入三个数:");
      scanf("%d%d%d", &a, &b, &c);

      d = &a;
      e = &b;
      f = &c;

      if (a > b)
      {
                g = d;
                d = e;
                e = g;
      }

      if (a > c)
      {
                g = e;
                e = f;
                f = g;
      }

      if( (a>b||a>c)&&b > c) //如果不加控制条件,对三个数排序(6种组合),a=3,b=5,c=4时输出结果为5<=3<=4,6种情况中只有b>c>a和a<b<c(这种情况直接输出结果了),b>c>a
      {                                   //这种情况没有经过上面两个if的判断,直接判断第三个if,所以对第三个if 加了判断条件,但是我还是不太懂。
                g = d;
                d = e;
                e = g;
      }
        else if (a<b&&a<c&&b>c)//最后一个if 是对b>c>a这种情况的补充,此时d指向a,e指向b,f指向c,直接调换e和f所指向的值。
        {
                g=e;
                e=f;
                f=g;
        }
      printf("%d <= %d <= %d\n", *d, *e, *f);

      return 0;
}

IMAX鱼油 发表于 2018-6-23 19:01:08

这是题目

IMAX鱼油 发表于 2018-6-23 19:02:20

这个是答案,有一组数有问题呢

IMAX鱼油 发表于 2018-6-23 19:03:41

我写的这个试了一下没问题,但是后面加了个if
页: [1]
查看完整版本: 课后作业21 动动手第0题答案不对啊