1203081549 发表于 2022-11-12 23:11:29

求大佬传授一下思路

#include <stdio.h>
//#include <math.h>
//#include <stalib.h>

void main()
{
    int a=3,b=4,c=5;
   a++>=--b&&b>c--&&++c;
   printf("%d,%d,%d",a,b,c);
   
    //printf("%d",c);
   
    }

答案是4.3.4
这个题b,c不应该是根据逻辑运算符来解的吗为什么是3 4

gandixiwang 发表于 2022-11-12 23:31:43

本帖最后由 gandixiwang 于 2022-11-12 23:37 编辑

我记得c语言是不能连续判断的
a++>=--b&&b>c--&&++c;
的结果只会是相当于
a++>=--b&&b>c--;
如果a++>=--b为false的话,那他连
b>c--;
都不会执行

jackz007 发表于 2022-11-12 23:37:40

本帖最后由 jackz007 于 2022-11-12 23:55 编辑

a ++ >= --b && b > c -- && ++ c ;
      这是通过两个 && 连接的具有 3 个子表达式的逻辑与表达式,根据规则,以从左到右的顺序测试各个子表达式的值,直到整个表达式的值能被确定为止。在 3 个子表达式的值都是 true 或者,其中有任何一个子表达式的值是 false 的情况下,整个表达式的值才能确定。
      先测试 a ++ >= --b
a = 3,表达式 a ++ = 3,b = 4,表达式 -- b = 3,所以,a ++ >= -- b 的值是 true,在比较操作的同时,a = a + 1 = 4,b = b - 1 = 3
      由于 a ++ >= --b 的值是 true,所以,需要继续测试下一个子表达式 b > c -- 的值
b = 3,c = 5,表达式 c -- = 5,所以,b > c -- 的值是 false,在比较操作的同时, c = c - 1 = 4。
      由于 b > c -- 的值是 false,所以,整个表达式的值已经确定为 false,这个时候,a = 4,b = 3,c = 4

临时号 发表于 2022-11-13 00:02:50

这个是因为C语言的短路现象
&&和||都是C语言中的短路运算符
短路就是仅计算逻辑表达式中的一部分便能确定结果,那就不对整个表达式进行计算
举个例子,在1+1==3&&2+2==4这个式子中,仅判断1+1==3这个式子就能得出该式子的结果为0,所以就不用再判断2+2==4了
短路的好处就是可以提高程序的运行效率,毕竟少执行个式子嘛
但如果是这样的代码
// 这里只给出main函数中的内容
int a=0;
int b=1;
a&&b++;
这里a的结果就是0,所以可以确定式子的值为0,就不会去执行b++了,所以b=1
懂了这些,你就知道你的代码结果为什么是4,3,4了
页: [1]
查看完整版本: 求大佬传授一下思路