C语言问题,求详细解答

来源:百度知道 编辑:UC知道 时间:2024/06/05 18:51:40
设整型变量m,n,a,b,c,d均为0,则执行“(m=a==b)||(n=c==d)”后,m,n的值是( )。
A.0,0 B.0,1 C.1,0 D.1,1

|| 判断的时候
如果左边为真
右边就不用再判断了
答案应该是C

D,==高于=,如((c=getchar()!)==EOF)

==的运算级高于=
(m=a==b)||(n=c==d)等效于
[m=(a==b)]||[n=(c==d)]
该语句的用途为:
先判断a和b是否相等,然后将其结果赋给m,判断c和d是否相等,然后将其结果赋给n,最后m和n或
因为初值变量m,n,a,b,c,d均为0
所以a=b返回结果为1,又将1复制给m,则m为1,同理n为1

正确的答案是 D
分析如下:
m=a==b
先分析表达式的优先级
=赋值运算符
==逻辑运算符
==的优先级大于=
因此m=a==b先处理a==b
a==b是一个逻辑表达式
因为a=b=0 所以a==b 就等于 0==0恒立
所以a==b的值为TRUE
然后处理m=TRUE
因为m是一个整型的数而TRUE是一个逻辑型的数据
所有必须进行强制类型转换 逻辑型的TRUE转换成整型为1而false转换成0
那么m=true就等于m=1
表达式:n=c==d同上
因此
执行后m=1 n=1
回答完毕!

选C.
因为"=="运算符优先级高于"=",所以(m=a==b)中先计算a==b得到真(即1),然后执行m=1
又因为带有"||"运算符的表达式中只要有一项为真则表达式为真,当判断前一项为真(即1)时就返回真(即1),不再计算后面的表达式,因此(n=c==d)不会被计算,从而n=0

D