1樓:匿名使用者
1全部#define min(x,y) (x)<(y)?(x);(y)和函式 int min(int x,int y)是不一樣的,如果做題的時候,當成函式了,必錯無疑。
10*min(10,15),程式編譯後,表示式變成下面的樣子。
10 * 10 < 15 ? 10 : 15;
結果就變成,100<15?10:15
#define min(x,y) (x)<(y)?(x);(y)的意思自是 吧主函式裡的min(x,y) 替換成(x)<(y)?(x);(y)
如果是呼叫的min函式,就會先執行min裡面的判斷,然後10*返回值。
2樓:我已經匿名了
因為巨集min的定義裡(右邊)缺少了括號,導致10*min(10,15)巨集後變成:
10*(10)<(15)?(10):(15)*優先順序比三元運算子?:
高,所以上式等價於(10*(10) < (15) ) ? (10) : (15)?
前面《號左邊先算,得100,100<15為假,故表示式的值為後一項,即15。
改正:在巨集體外加括號
#define min(x,y) ( (x)<(y)?(x):(y) )
3樓:匿名使用者
巨集替換啊
10*min(10,15)
10* (10)<(15)?(10):(15)運算子優先順序
(10* (10))<(15)?(10):(15)
4樓:匿名使用者
因為#define 是乙個巨集min(x,y) (x)<(y)?(x):(y)
所以輸出的10*min(10,15));
就變成了10* (10)<(15)?(10):(15)運算子優先順序
(10* (10))<(15)?(10):(15)100<15?10:15
100<15結果為0所以就執行輸出15ok
5樓:
在使用巨集定義的程式中
在預編譯階段會替換所有的巨集,而你那句printf會變為:
printf("%d",10*(10)>(15)?(10):(15));
而10*(10)>(15)?(10):(15)也就是100>15?10:15
這樣一看就是15了,明白了吧
6樓:一夜范特西
#define min(x,y) (x)<(y)?(x):(y) 是如果x 10*min(10,15)=10*10<15?10:15=100<15?10:15=15 7樓:匿名使用者 #define min(x,y) ((x)<(y)?(x):(y)) 這樣寫就是了! 8樓: 這是乙個巨集的問題,在巨集時只把表示式代入,而不計算出來,即在執行printf函式時成10*(10)<(15)?(10):(15),而條件運算子的優先順序比較低,所以100<15不成立,則結果為15 9樓:匿名使用者 ....define只是簡單的替代,機器把10*min(10,15)直接翻譯成10* (10)<(15)?(10):(15) 結果當然是15,這樣用要記得括號要用對了 10樓: 10*min(10,15) 轉換成 10*(10)<(15)?10:15 返回值就是15 11樓:匿名使用者 把10的後面用括號括起來就好了。 輸入必須按語句scanf d d d x,y,z 中的 d d d 形式輸入,三個數之間沒有任何分隔符,而題目輸入時有逗號,所以輸出值不確定 看好了,程式裡面是這麼輸入的 scanf d d d x,y,z 而你執行程式的時候,輸入資料格式是 25,13,10 這裡面逗號是關鍵,如果你的輸入是 25... while語句的執行順序 1.判斷x的值 非0為真,0為假 2.執行 3.執行 裡面的 這裡是空,所以沒任何動作。所以會一直迴圈到x 0,判定為假,迴圈終止。接著執行減減,最後列印結果為 1 c語言問題,求助 這題是迷惑人用的.因為迴圈內部沒有break,所以for會一直執行下去,直到a 11,這時... 可以去貼吧萬花谷看看,有多種配裝和屬性,自己分析,並選擇對自己最合適的 另外現在都是陽明瞭。 西山居遊戲 大俠您好 現在都不用快雪流了是陽明流了 快雪已經打不高了 萬花還是會心最重要 第一段 cast buff 落鳳 玉石俱焚 use buff 焚玉 9 buff 夢歌 5 森徑寒 cast man...c語言的輸出問題,乙個C語言的輸出問題
C語言問題,C語言問題,求助
劍三萬花輸出問題,劍網三花花輸出問題