看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) #define PLUS(a, b) a+b #define MINUS(a, b) a-b #include <stdio.h> main() { int m1 = 3, m2 = 5; m1 = PLUS(m1, m2)*MINUS(m2, m1); printf(“%d\n”, m1); } 希望得到的正確結果: 正確答案為25 自已的想法是 m1 = 8 * 2 = 16 又或 m1 = 8 * -3 = -24 在程式最後在印出m2的值一樣是5,所以真的搞不懂為什麼執行後的 答案會是25,不知道實際執行時m1這條式子是展開成什麼樣式~ 再麻煩各位指教了,感謝 開發平台: Dev-C++ -- 阿嬤說:「人生不是得到,就是學到。」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.187.52.246
magrady:PLUS(m1, m2)*MINUS(m2, m1) = m1 + (m2*m2) - m1 = m2*m2 06/17 20:11
x000032001:#define PLUS(a, b) (a+b) #define MINUS(a, b) (a-b) 06/17 20:19
loveflames:因為先*/後+- 06/17 20:22
adks3489:就想成define是直接換掉字 所以會變 m1+m2*m2-m1=3+5*5-3 06/17 20:44
saka037:感謝樓上各位前輩~~C語言幹嘛有這種亂七八遭的東西~真是.. 06/17 20:48
adks3489:他是方便使用...這並不亂七八糟不要亂用他就好... 06/17 20:53
VictorTom:置底十二誡之十; 你應該自己先搞清楚#define macro是怎 06/17 20:58
VictorTom:麼運作的然後用好它, 而不是自己不會還怪語言亂七八糟. 06/17 20:59
抱歉~~算到腦筯發燒了~~一時氣話~請勿見怪~~~ 另~再請問一題~再請指教~~ #include <stdio.h> #define MAX(a, b) (a < b ? b : a) #define PRINT1(x) printf(“%d”, x) #define PRINT3(x, y, z) PRINT1(x), PRINT1(y), PRINT1(z) main() { int m1 = 1, m2 = 3; PRINT3( MAX( m1++, --m2), m1, m2); } 解答為 1 2 1 第一個「1」是2 < 2 ? m2 : m1 所以答案是1.....是這樣沒錯吧?? 第二個「2」是因為m1++所以m1的值變為2 第三個就是問題了.....怎麼m2的值變為1了,不是才減1次嗎,難道 後面的m2也以--m2代換了 抱歉各位大大了~~小弟EQ不佳~~再請海函~~ ※ 編輯: saka037 來自: 218.187.52.246 (06/17 21:07)
loveflames:其實我想知道標題的邊際效應是指什麼 06/17 21:09
nowar100:side effect吧 通常是指非Programmer想要確發生的事情? 06/17 21:13
loveflames:這個不是叫副作用嗎 06/17 21:16
x000032001:PRINT3( (m1++ < --m2 ? --m2 : m1++), m1, m2); 06/17 21:16
x000032001:你的程式展開變這樣 --m2用了兩次 當然變1 06/17 21:16
saka037:對吼~MAX裡面的m2忘了也代進--m2了~看來我該去冷靜一下了 06/17 21:34
adks3489:所以你還是沒看置底十二誡之十.. 06/17 21:34
saka037:樓上說的是~先不做題目了~還是自新啃書吧~~感謝指教 06/17 21:36
VictorTom:抱歉小弟可能回的衝了點, 冒犯之處也請原po見諒<(_ _)> 06/17 22:45
nowar100:的確精華區置底文不爬,只是丟問題等答案,很難進步阿 QQ 06/17 22:47
curist:#define PLUS(a, b) ((a)+(b)) 這樣就可以了吧? 06/18 02:52