[课业] 请教中华电信 程式设计概论题目

楼主: shinenic (shinenic)   2017-07-28 10:24:45
大家好
小弟想请教100年的中华电信 程式设计与数据库里面的题目
其中程式码如下
int a=5, b=0, c=6;
a = (a = b)&&(c = b);
问最后abc值为何
最后得结果为a=0 b=0 c=6
找到的解答理由是第二行的后面并不会真正改变a和c的值
然后第二行后面两个等号看做比较的意思
所以a=false && false => 0
但后来小弟做了两个测试
就跑出了新的疑问
希望有前辈能指引
1.
int x=2,y=4,z=6;
x= (y=z);
为何最后x y z皆为6
是否跟题目的状况有什么不同呢
2.
若把题目改成
int a=5, b=1, c=6;
a = (a = b)&&(c = b);
为何最后输出结果却是a=1 b=1 c=1呢
似乎跟前面查到的解就有所不同
不好意思问题有点多
作者: yugichen95 (dora)   2017-07-28 11:40:00
这应该是考布林值短路运算,&&左边括号只要是0(false)右括号就不会再run因为确定整个为false;反之左边为1(true)就会需要run右边,另外你第一点跟这个无关。
作者: Hsiner (Hsiner)   2017-07-28 11:41:00
跟上一篇问的捷径运算一样的意思。&&前如果是0,&&后面不会执行。&&前是1, 后面会执行
作者: pt7441 (批踢)   2017-07-28 12:29:00
捷径运算 T|| 跟 F&& assign右边做完才给左边值我想你第一个问题大概是不知道怎么算a吧 右边算完F=0 T=1
作者: ym7834 (zero0)   2017-07-28 12:52:00
判断式为false所以是a=false=> a=0
作者: pts411 (pts)   2017-07-28 14:14:00
上述关点可朝 捷近条件 与 指派的非零则真(C语言) Google查询。
作者: pime (JayCheng)   2017-07-28 14:22:00
借问一下 那为什么第二题前面a=(a=b)是f后面还会继续执行呢?
作者: uni1021 (小李)   2017-07-28 14:27:00
a=(a=b)是true 所以继续判断右边
作者: pime (JayCheng)   2017-07-28 14:30:00
刚刚用程式跑了一下 发现b只要不是代0,a就会是1就是t是这个意思吗
作者: jachin (火腿哥)   2017-07-28 14:52:00
请先看前一篇的推文已经说明很清楚。另外捷径运算是用在and 和or的比较,你自己题目的"="是asige的功能,不是比较,不会进入捷径运算。

Links booklink

Contact Us: admin [ a t ] ucptt.com