[問題] 2題程式不懂,是要怎麼看呢?

看板CSSE (電腦科學及軟體工程)作者 (Irene)時間10年前 (2013/07/20 19:31), 編輯推噓6(606)
留言12則, 7人參與, 最新討論串1/3 (看更多)
1.#include <stdio.h> #include <stdlib.h> int main(void) { int a=11,b=11; a+=a+=b+=b%=b<<2; printf(" %d ", a ); system("pause"); return 0; } 為甚麼答案是66? 是不是計算過程是 a=a+a=a+b=b%b<<2 然後運算順序% << + =(右到左) a=22=22=22=0 ,,a=0; 2. #include <stdio.h> #include <stdlib.h> #define M(a,b) (a)<(b)?( a ) : ( b ) int main(void) { int a=4,b=3,c=2,d=4; printf("%d\n",M(a+b,c+d)); system("pause"); return 0; } A.6 B.7 C.13 D.0 為甚麼答案是 D 作法是不是 呼叫M(a+b,c+d) 找定義define M(a,b) a是a+b b是c+d 然後 (a+b < c+d) ? (a+b,c+d) 判斷否傳回c+d == 6 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 49.217.1.224

07/20 19:32, , 1F
第一題是哪裡考的題目...爛透了
07/20 19:32, 1F

07/20 19:33, , 2F
這個式子是未定義行為 會得出什麼都有可能
07/20 19:33, 2F

07/20 19:35, , 3F
第二題我的答案跟你一樣是 6
07/20 19:35, 3F

07/21 00:36, , 4F
同樓上.
07/21 00:36, 4F

07/21 07:38, , 5F
第二題把marco打開是 printf("%d\n",(6));喔 多了兩
07/21 07:38, 5F

07/21 07:38, , 6F
個刮號
07/21 07:38, 6F
※ 編輯: irene6524 來自: 180.206.152.8 (07/22 15:09)

07/22 15:13, , 7F
第一題補上定義了,第二題是答案錯了嗎?
07/22 15:13, 7F

07/23 20:21, , 8F
第一題應該是,b=b%44(這44是從b<<2),然後b+=b,a+=b,a+=a
07/23 20:21, 8F

07/25 21:38, , 9F
第一題不管怎麼補都是未定義行為
07/25 21:38, 9F

07/25 21:45, , 10F
唔, 我好像有弄錯...來查一下標準 @@
07/25 21:45, 10F

08/16 21:20, , 11F
第一題怎麼補都是...
08/16 21:20, 11F

10/02 16:30, , 12F
第一題我解在 #2132
10/02 16:30, 12F
文章代碼(AID): #1HwdJ-v6 (CSSE)
文章代碼(AID): #1HwdJ-v6 (CSSE)