請教中華電信 程式設計概論題目 - 考試

Table of Contents



大家好

小弟想請教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呢

似乎跟前面查到的解就有所不同


不好意思問題有點多


--

All Comments

Ivy avatarIvy2017-08-02
這應該是考布林值短路運算,&&左邊括號只要是0(false)
右括號就不會再run因為確定整個為false;反之左邊為1(t
rue)就會需要run右邊,另外你第一點跟這個無關。
Linda avatarLinda2017-08-05
跟上一篇問的捷徑運算一樣的意思。&&前如果是0,&&後面不
會執行。&&前是1, 後面會執行
Susan avatarSusan2017-08-06
捷徑運算 T|| 跟 F&& assign右邊做完才給左邊值
Rae avatarRae2017-08-07
我想你第一個問題大概是不知道怎麼算a吧 右邊算完F=0 T=1
Iris avatarIris2017-08-12
判斷式為false
所以是a=false
=> a=0
Damian avatarDamian2017-08-15
上述關點可朝 捷近條件 與 指派的非零則真(C語言) Google
查詢。
Yedda avatarYedda2017-08-20
借問一下 那為什麼第二題前面a=(a=b)是f後面還會繼續執行呢
Sierra Rose avatarSierra Rose2017-08-21
a=(a=b)是true 所以繼續判斷右邊
Hazel avatarHazel2017-08-23
剛剛用程式跑了一下 發現b只要不是代0,a就會是1就是t是這
個意思嗎
Cara avatarCara2017-08-24
請先看前一篇的推文已經說明很清楚。另外捷徑運算是用在an
d 和or的比較,你自己題目的"="是asige的功能,不是比較,
不會進入捷徑運算。