二级。。。C语言。。。求大神

b最后输出为什么等于4啊。。。想不通。。。求大神。。明天二级考试了。。。急。。。图片

关键在于这个条件表达式:(++a < 0) && !(b-- <=0)
++a,++在a前,那么(++a < 0)a自增1后在于 0比较大小,结果是0 < 0 = false。
这样上面表达式左侧为false,无论右侧是什么结果都不会影响整个表达式的结果,这种情况右侧就不会被执行,所以b还是最初赋的值4。

看到&&了吧 两边的条件先看左边的条件 a变成0
0 < 0 不成立 所以右边条件无论真假都不执行
因此b一直没变 这种处理方式还是很好的 减少了不必要的判断 如果你想问为什么系统(程序)这么判断 我只能说 我猜是语言设计的时候 运用编译原理的自动机的设计就是这么写的吧 当然 我可能是瞎猜的,,,

因为是b--啊,程序是按步骤来的,在那一行代码中,b的值是不变的,然后就被输出了
但是++a是要变值的

因为&&前面的条件为false
后面的b--没有执行。

4没错,判断左边为真,才判断右边的,如果左边为假,那么右边的程序不会去判断!

短路运算符,&&,若左边为假,则右边不执行

由于a=-1,++a<0,执行之后a = 0,所以表达式为false,则&&直接返回false,不会再继续检测后面的表达式,所以b没有机会执行b--

菜单交回厨房,点餐排队,用手机叫好,请问排队叫号怎么实现?

菜单交回厨房,点餐排队,用手机叫好,请问排队叫号怎么实现?

()里的只算是判定条件,并不是赋值

菜单交回厨房,点餐排队,用手机叫好,请问排队叫号怎么实现?

先进行比较运算,然后进行了下一步,--没有被执行

这个涉及到一个短路算法

你得搞清楚每一步是否跳过,是否执行,及其优先顺序,另外二级是调程序的,你可以多试验几种可能,还是能调出来的

你只进行了判定条件,没有赋值的语句