看板 TransCSI 關於我們 聯絡資訊
※ 引述《forris (喬巴)》之銘言: : 1. #define DOUBLE(x) 2*x : #define PRINT(int) printf("int=%d\n",int) : #include <stdio.h> : main() : { : int m1=1,m2=2; : m1=DOUBLE(m1+m2); : PRINT(m1); : } : 問程式輸出為何? : (a) m1=5 (b) m1=8 (c) int=5 (d)int=8 : 為什麼是 c 而不是 d? 巨集是用copy程式碼的方式去執行 所以double(m1+m2)的結果是 2*m1+m2 如果想達到你的結果 程式碼最好這樣寫:m1=DOUBle((m1+m2)) 這樣的結果才是 2*(m1+m2) : 2. #include <stdio.h> : main() : { : int m1=123,m2=5; : do {m1%=m2;} while(m2--); : printf("%d\n",m1); : } : 問程式輸出為何? : (a)0 (b)1 : (c)本程式編譯時,complier 發出錯誤訊息,不能執行而無輸出結果產生 : (d)本程式執行時,發生錯誤,故無輸出結果產生 因為m2會出現0的情形 因此m1%m2就會出現除於0的情形 除於0就會出現執行錯誤 : 為什麼是 d ? 難道是 while 的敘述要是 boolean type? 我也是考四等資訊處理的考生 -- 衝個人氣吧 http://www.wretch.cc/album/steter2002 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.170.237 ※ 編輯: steter 來自: 218.167.170.237 (12/26 22:49) ※ 編輯: steter 來自: 218.167.170.237 (12/26 22:55)