[課業] 請教中華電信 程式設計概論題目

作者: 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