执行下面的程序段后b的值为? a=5 b=7 a=a+b b=a-b a=a-b

执行下面的程序段后b的值为? a=5 b=7 a=a+b b=a-b a=a-b,第1张

你问的应该是C语言吧?是的话答案是这样的:

这个程序是一个a,b值互换的程序!最后的结果是:

a=7

b=5;

(a=a+b是对现有数a和b求和,

b=a-b是对b赋予原来的a值;为原有两数的和减去原b为原a

a=a-b是对a赋予原来的b值;为原有两数的和减去现b(原a)得原b)

要验证这类问题很简单,编个程序就行了:

#include

void

main()

{

int

a,

b,

c

a

=

b

=

c

=

1

++b

&&

++c

||

++a

printf("%d

%d

%d\n",

a,

b,

c)

}

---

结果:

1

2

2

---

为什么

a

没有改变呢?这是因为

c

语言在运行逻辑表达式的时候,采用了“短路规则”或“优化策略”。

&&

||

是逻辑运算符,c

语言的规则是算到该运算符左边的时候假如结果已经确定了,就不会继续运算右边的表达式,以节省运算时间。

++b

的结果不是

0,为逻辑“真”,所以还不知道逻辑与(&&)的结果,要看

++c

的结果。

++c

的结果也不是

0,为逻辑“真”,所以

++b

&&

++c

的结果为

1(真)。

既然逻辑或(||)的左边是“真”,整个表达式的结果必定是真,所以

++a

根本没有运行。

因此,a

没有改变,b

c

都增加了

1。

---

a值为[1],b值为[2]

,c值为[2]

int

a=5,b=6,w=1,x=2,y=3,z=4

(a=w>x)&&(b=y>z)

解释:对于前面w>x是假的,所以a被赋值为0但是对于整个逻辑式来说有一个0那么"与"的逻辑已经是0了,所以后面的表达式就不运行,所b的值还是6.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/11081550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存