wsb1991abc 发表于 2023-2-24 21:57:54

C语言的条件判断问题


#include<stdio.h>
int main()
{
int a,b,c,t;
printf("输入三个数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{
   b=a;
   t=b;
   a=t;
}
if(a>c)
{
   c=a;
   t=c;
   a=t;
}
if(b>c)
{
   c=b;
   t=c;
   b=t;
}\\比较三个数的大小
printf("%d,%d,%d\n",a,b,c);\\由小到大输出
return 0;
}
这个我输入5,3,2后显示5,5,5错在哪里,是不是比较两个数大小的赋值顺序不对

isdkz 发表于 2023-2-24 22:01:32

本帖最后由 isdkz 于 2023-2-24 22:21 编辑

t= 这一句要放到最上面,你要交换两个杯子的水肯定是把其中一个杯子的水倒到一个临时的杯子里,这是第一步,

把那三个 if 语句的 t= 移到最上面

修改后的代码:
#include<stdio.h>
int main()
{
int a,b,c,t;
printf("输入三个数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{
   t=b;                                    // 注意这里
   b=a;
   a=t;
}
if(a>c)
{
   t=c;                                     // 注意这里
   c=a;
   a=t;
}
if(b>c)
{
   t=c;                                     // 注意这里
   c=b;
   b=t;
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}

jackz007 发表于 2023-2-24 22:39:14

本帖最后由 jackz007 于 2023-2-24 23:15 编辑

#include<stdio.h>
int main()
{
      int a , b , c , t             ;
      printf("输入三个数:")         ;
      scanf("%d,%d,%d",&a,&b,&c)    ;

/* 下面的代码确保 a < b */
      if(a > b) {
                t = a               ; // 在覆盖变量 a 之前,要先将其值交给临时变量 t
                a = b               ; // 先用变量 b 的值覆盖变量 a
                b = t               ; // 再用之前变量 a 的值覆盖变量 b,达到a、b值互换的目的
      }

/* 下面的代码确保 a < c */
      if(a > c) {
                t = a               ; // 在覆盖变量 a 之前,要先将其值交给临时变量 t
                a = c               ; // 先用变量 c 的值覆盖变量 a
                c = t               ; // 再用之前变量 a 的值覆盖变量 c,达到a、c值互换的目的
      }
/* 上面的代码已经确定 a 在 a、b、c 中最小 */

/* 下面的代码只需要确保 b 比 c 小即可   */
      if(b > c) {
                t = b               ; // 在覆盖变量 b 之前,要先把 b 的值交给临时变量 t   
                b = c               ; // 先用变量 c 的值覆盖变量 b
                c = t               ; // 再用之前变量 b 的值覆盖变量 c,达到b、c值互换的目的
      }
      printf("%d,%d,%d\n",a,b,c)    ; //由小到大输出
}
      下面是我利用三目运算符结合指针简化的代码,谨供楼主参考
#include<stdio.h>
int main(void)
{
      int a , b , c , * p1 , * p2 , * p3                                     ;
      printf("输入三个数 : ")                                                ;
      scanf("%d,%d,%d", & a , & b , & c)                                     ;
      p1 = (a < b && a < c) ? & a : (b < a && b < c) ? & b : & c             ;
      p3 = (a > b && a > c) ? & a : (b > a && b > c) ? & b : & c             ;
      p2 = (a > * p1 && a < * p3) ? & a : (b > * p1 && b < * p3) ? & b : & c ;
      printf("%d,%d,%d\n" , * p1 , * p2 , * p3)                              ; // 由小到大输出
}

wsb1991abc 发表于 2023-2-25 19:10:39

谢谢大神们的解答,如梦初醒
页: [1]
查看完整版本: C语言的条件判断问题