首页 > 试题广场 >

以下程序运行后的输出结果是( ...

[单选题]
以下程序运行后的输出结果是()
int main(){
    int a=1,b=2,m=0,n=0,k;
    k=(n=b<a)&&(m=a) ;
    printf("%d,%d\n",k,m);
    return 0;
}

  • 0,0
  • 0,1
  • 1,0
  • 1,1
我们来看表达式——
k=(n=b<a)&&(m=a) ;
这部分的执行顺序如下:
先执行 n=b<a部分,其中,关系运算符优先级高于赋值运算符,所以先算b<a,得到false,C++中,false和0可以相互转换,所以n=b<a的结果是n=0;
然后,赋值运算的结果将作为括号内表达式的结果,即(n=b<a)&&(m=a)转换成(0)&&(m=a),而0又相当于false,使&&后面的括号“短路”,(m=a)不运算,m值还是0
最后,&&的结果是false,即k=0;

发表于 2019-08-15 20:54:47 回复(4)
&&具有短路特性,当前面的条件为false(0)时,后面的括号“短路”不判断,则m=a不执行。
发表于 2019-09-09 21:39:35 回复(0)
忘了逻辑运算中的短路了。。。。。
发表于 2019-08-15 21:49:16 回复(0)

这题考察的是c的吧。短路。

发表于 2019-08-19 15:16:40 回复(0)
主要是前面, n=b
发表于 2024-09-12 10:11:20 回复(0)
n=b<a为false,导致运算符与后面的式子短路,不需要计算,所以m还是等于0
发表于 2023-07-19 21:25:06 回复(0)
并短路
发表于 2025-03-07 23:14:41 回复(0)
需要注意的是,赋值运算符呀大哥们,不是比较!!!
发表于 2024-09-17 17:57:52 回复(0)
考点:运算符的优先级、结合律以及&&的短路特性。
&&结合律从左到右,所以先算表达式n=b<a;优先级:<大于=,所以先算b<a--> 0.得到n=0。
又由于&&的短路特性:(0)&&(m=a),m=a不会执行。
所以最后得到:k=0,m=0
编辑于 2024-02-05 12:52:46 回复(0)
本体考查了C语言的惰性运算,前面  k = (n =b < a) 中  b是2 明显大于 1 ,所以 n = 0 ,因为是&& ,所以不管后面的表达式是0还是1都不重要了,这个是C语言编译器的设定.m 的值不会去做改变了.
发表于 2022-10-17 19:43:51 回复(0)
一个个vv
发表于 2022-10-12 14:22:34 回复(0)
逻辑与运算的短路运算规则,使得后续的m=a没有被执行
发表于 2022-06-28 14:08:53 回复(0)
k=(n=b<a)&&(m=a);该语句中因关系运算符优先级高于赋值运算符,故先算b<a,得n=0,又因&&的短路性,故m=a;语句并不执行

发表于 2022-04-03 14:21:04 回复(0)
可以的,短路
发表于 2022-03-17 19:54:21 回复(0)
算数 > 关系 > 赋值
发表于 2022-03-14 05:06:25 回复(0)
&&会造成短路
发表于 2022-02-23 15:39:10 回复(0)
关系运算符优先级高于辅助运算符!
C++中,false和0可以互相转换。
发表于 2021-12-01 14:51:14 回复(0)
&&短路
发表于 2021-08-20 18:51:10 回复(0)
要注意逻辑运算符的短路效应
发表于 2021-03-05 13:52:05 回复(0)
表达式1&&表达式2 当表达式1为false时,表达式2不执行,返回0 当表达式1为trrue时,表达式2执行,其中表达式2为true时返回true,否则返回false
发表于 2020-11-05 23:44:35 回复(0)