int a=1,b=2,c=3,d=4; if((a=2)||(b=1)) c=2; if((c==3)&&(d=-1...
发布网友
发布时间:2024-10-24 11:52
我来回答
共5个回答
热心网友
时间:2024-11-09 02:13
首先第一句,int a=1,b=2,c=3,d=4;为a,b,c,d分别赋值1,2,3,4。
然后看第二句 if((a=2)||(b=1)) c=2;这里一定要区分“=”与“==”的区别,“=”是赋值用,而“==”是判断是否相等用。因此第二句中if里的2个语句都是赋值,一定都为真。但是还需要注意的是“||”与“&&”的区别,“||”表示两个条件中有一个满足就可以,那么在第一个条件a=2返回真的前提下,编译器就不会再执行后面的判断语句,也就是说b=1没有被执行,直接执行了c=2.那么第二句执行完毕后,a,b,c,d分别为2,2,2,4
最后第三句,c==3是一个判断语句,返回假,那么对于“&&”,必须是两个条件都满足才行,在第一个条件c==3返回假的前提下,编译器也不会再执行后面的判断语句,即d=-1也不会被执行。
这样最终的答案就是2,2,2,4
热心网友
时间:2024-11-09 02:15
我觉得这个问题的关键在于短路求值。初始值a=1,b=2,c=3,d=4,在第一个判断的语句中a=1是等式,他的返回值如果是真的话,后面的b=1就不会进行赋值,同样在双与运算符中同样存在短路求值的情况。第一个语句中a=2,返回值是的2,非零的整数在判断语句中视为真,或运算符只要一个是真结果就为真,所以后面的那个b=1不进行,结果c=2,再后面执行c==3时为0,所以后面的语句都不执行。总的来说这段进行了一次a=2的赋值及判断,c=2的赋值,其它的语句要么是不满足if的条件,要么是被短路求值了。
热心网友
时间:2024-11-09 02:08
第一行赋初值
第一个if条件会执行a=2这个赋值操作,因为是||,所以b=1不会执行
if表达式为真,所以c=2执行
第二个if条件 c==3为假,因为是&& 所以d=-1赋值操作不执行
if表达式为假,所以a=5不执行
最终结果就是 2 2 2 4
热心网友
时间:2024-11-09 02:11
if((a=2)||(b=1)) c=2;
(a=2)||(b=1),||两边的表达式都是赋值语句,a=2,为真,则if为真,b=1不执行,执行c=2,此时a=2,b=2,c=2
if((c==3)&&(d=-1)) a=5;
c==3为假,if为假,不执行a=5,此时a=2,b=2,c=2,d=4
这里涉及一个原则:
在判断||,&&的表达式值时,有一个最短原则。比如:
a||b,逻辑或,若a为真,则不判断b,且表达式为真;若a为假,则判断b
a&&b,若a为假,则不判断b,且表达式为假;若a为真,则判断b
实际就是,如果通过运算符||,&&左边的表达式已经可以得出整个表达式的值,就不需再判断余下的表达式
热心网友
时间:2024-11-09 02:14
if((a=2)||(b=1)) 赋值表达式是能返回真的 a=2为真 不执行b=1 所以 a = 2 .b不变,c=2
if((c==3)&&(d=-1)) c不为3 不执行d=-1所以if失败
所以最后 a=2 b =2 c = 2 d=4