这个c程序中m怎么等于0,n怎么等于2啊

#include <stdio.h>
main()
{
int a,b,c,d,m,n;
a=5,b=7,c=3,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("a=%d,b=%d,c=%d,d=%d,m=%d,n=%d",a,b,c,d,m,n);
getch();

}

关键是这句:(m=a>b)&&(n=c>d);
这本身是个逻辑表达式,所以先计算左边括号中的表达式的值,即m = a > b。
因为逻辑运算符>的优先级高于赋值运算符=,所以先求a > b的值。
而a = 5, b = 7,所以a > b不成立,逻辑运算结果为0,再把0赋值给m。
所以m的值会是零,而且整个表达式(m = a > b)的值也是0。
这时候计算机会发现后面的运算是个与运算,而0与上任何值都是0。不需要再去求后面括号中表达式的值,所以后一个表达式中给n赋值的操作并不会得到执行,所以n的值还是保持初始化时的2不变。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-07
(m=a>b)&&(n=c>d);
当前面条件(m=a>b) 为 0 ,&& 结果必为0,所以程序 不去处理 后面的 n=c>d。

如果改成 (m=a<b)&&(n=c>d); 前面条件 为 1, 就会处理 后面的 n=c>d。
第2个回答  2011-04-07
这个题设置了一个很大的陷阱
(m=a>b)&&(n=c>d);最开始是执行m=a>b然后它的优先级 应该是先执行a>b 显然是不成立的
在c语言中0代表假 所以 m的值变为0 然后对于 && 运算 来说 是必须都为真 才为真 在这之前 遇到 一个为假 后面就不会执行 所以 n=c>d 这个表达式不会执行
第3个回答  2011-04-07
首先,关系运算优先于赋值运算,且关系运算的结果为0
然后,因为&&左至右判断,如果(m=a>b)为真后,就不执行(n=c>d),所以执行语句后,m=0,n=2.
第4个回答  2011-04-07
m=a>b
a是5,b是7所以a>b结结果是0.所以m=0
由于前面一个表达式是0故后面一个表达式将不执行运算.
所以n仍旧是2
第5个回答  2011-04-08
,b,c);
else if(disc=0) jie=jie2(a,b,c);
else jie=jie3(a,b,c)
判断相等是2个等号,else if(disc=0)要该成else if(disc==0)。一个=是赋值所以会继续想下执行到else里面的 jie=jie3(a,b,c)

这个c程序中m怎么等于0,n怎么等于2啊
关键是这句:(m=a>b)&&(n=c>d);这本身是个逻辑表达式,所以先计算左边括号中的表达式的值,即m = a > b。因为逻辑运算符>的优先级高于赋值运算符=,所以先求a > b的值。而a = 5, b = 7,所以a > b不成立,逻辑运算结果为0,再把0赋值给m。所以m的值会是零,而且整个表达式(m ...

c语言 为什么n等于2??那m等于几? 最后输出的是0 解释下
a&&b,只有当a为真时才执行b 因此m=0;n保持原值2 && 两边都真,结果才为真,故最后输出为0

c语言(m=a>b)&&(n=c>d),a=5,b=6,c=7,d=8,m=2,n=2,运算后m= ,n=...
a>b = 0, 后面是与运算,到此程序应该结束,表达式为0。最后结果:m=0, n=2

if(b==0)m=1;n=2;在C语言中怎么错?
if(b==0){ m=1;n=2;} 就是当b等于0时 执行对m赋值1和对n赋值2的语句 if(b==0){ m=1;} n=2;就是当b等于0时 执行对m赋值1的操作,b不等于0时不执行对m的赋值操作,而是直接执行下一个对n赋值的操作

m=2, n=2时,怎么实现?
a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d),后n的值等于2。先判断优先级,从左向右运算 m=a>b >的优先级比=高 算a>b a=5,b=6 ab为假,得0 再赋值给m,m=0 又因为&&前面为0就不执行后面 所以不执行n=c>d 所以最后结果是 m=0,n=2。

if(b==0) m=1;n=2;这个为什么不能看成c语言的语句?什么样的才能算一...
这个两个语句。if(b==0) m=1; \/\/第一个 n=2; \/\/第二个 改成下面这样,就是一个语句了。if(b==0) {m=1;n=2;} \/\/加上了一对{}。

在C语言中,m!=0这个m!代表的是什么啊?
不是(m!) = 0 而是 m (!=) 0 != 就是”不等于” 判断 判断m是不是 不等于 0

C语言中m=3,n=2,m--=,n++=?
这个表达式中,变量 m 被减 1,变量 n 被加 1,并且在这两个变量前面有一个后置递增和递减运算符。根据 C 语言中运算符的优先级,递增和递减运算符的优先级是高于赋值运算符的,因此表达式的值是变量 m 的初始值 3 和变量 n 的初始值 2,也就是表达式的值为 2。具体的过程是:表达式先求出 ...

C语言中,m=0 A=(++m)+(++m); 此时,A=?,m?
这个和编译器自身处理过程有关系,不同的编译器,结果不尽相同,不必过于纠结。比如 A = (++a) + (++a) + (++a);有些编译器会先计算右边,最后赋值给A:++a;++a;++a;A=a+a+a;有些编译器实际的过程变成:A=++a; A=A+(++a);A=A+(++a);有些编译器实际的过程变成:A=(++a)+(...

在C语言中,运行main(){int a=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a+b...
逻辑或跟与||,&&有部完全运算的,比如在左边的表达式可以决定怎么个式子的值时,右边一个表达式讲不在执行。例如(表达式1)||(表达式2),当表达式1等于1时,就不在计算表达式二,会警告。(表达式)&&(表达式2)当表达式1等于0是,表达式二也不在执行,会警告 ...

相似回答
大家正在搜