鱼C论坛

 找回密码
 立即注册
查看: 2604|回复: 3

C语言的条件判断问题

[复制链接]
发表于 2023-2-24 21:57:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#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错在哪里,是不是比较两个数大小的赋值顺序不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-24 22:01:32 | 显示全部楼层
本帖最后由 isdkz 于 2023-2-24 22:21 编辑

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

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

修改后的代码:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.   int a,b,c,t;
  5.   printf("输入三个数:");
  6.   scanf("%d,%d,%d",&a,&b,&c);
  7.   if(a>b)
  8.   {
  9.      t=b;                                    // 注意这里
  10.      b=a;
  11.      a=t;
  12.   }
  13.   if(a>c)
  14.   {
  15.      t=c;                                     // 注意这里
  16.      c=a;
  17.      a=t;
  18.   }
  19.   if(b>c)
  20.   {
  21.      t=c;                                     // 注意这里
  22.      c=b;
  23.      b=t;
  24.   }
  25.   printf("%d,%d,%d\n",a,b,c);
  26.   return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2023-2-24 22:39:14 | 显示全部楼层
本帖最后由 jackz007 于 2023-2-24 23:15 编辑
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int a , b , c , t             ;
  5.         printf("输入三个数:")         ;
  6.         scanf("%d,%d,%d",&a,&b,&c)    ;

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

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

  20. /* 下面的代码只需要确保 b 比 c 小即可     */
  21.         if(b > c) {
  22.                 t = b                 ; // 在覆盖变量 b 之前,要先把 b 的值交给临时变量 t   
  23.                 b = c                 ; // 先用变量 c 的值覆盖变量 b
  24.                 c = t                 ; // 再用之前变量 b 的值覆盖变量 c,达到b、c值互换的目的
  25.         }
  26.         printf("%d,%d,%d\n",a,b,c)    ; //由小到大输出
  27. }
复制代码

        下面是我利用三目运算符结合指针简化的代码,谨供楼主参考
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int a , b , c , * p1 , * p2 , * p3                                     ;
  5.         printf("输入三个数 : ")                                                ;
  6.         scanf("%d,%d,%d", & a , & b , & c)                                     ;
  7.         p1 = (a < b && a < c) ? & a : (b < a && b < c) ? & b : & c             ;
  8.         p3 = (a > b && a > c) ? & a : (b > a && b > c) ? & b : & c             ;
  9.         p2 = (a > * p1 && a < * p3) ? & a : (b > * p1 && b < * p3) ? & b : & c ;
  10.         printf("%d,%d,%d\n" , * p1 , * p2 , * p3)                              ; // 由小到大输出
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-25 19:10:39 | 显示全部楼层
谢谢大神们的解答,如梦初醒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表