求助,C語言輸出問題

2023-01-03 19:25:53 字數 1777 閱讀 3258

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的後面用括號括起來就好了。

c語言的輸出問題,乙個C語言的輸出問題

輸入必須按語句scanf d d d x,y,z 中的 d d d 形式輸入,三個數之間沒有任何分隔符,而題目輸入時有逗號,所以輸出值不確定 看好了,程式裡面是這麼輸入的 scanf d d d x,y,z 而你執行程式的時候,輸入資料格式是 25,13,10 這裡面逗號是關鍵,如果你的輸入是 25...

C語言問題,C語言問題,求助

while語句的執行順序 1.判斷x的值 非0為真,0為假 2.執行 3.執行 裡面的 這裡是空,所以沒任何動作。所以會一直迴圈到x 0,判定為假,迴圈終止。接著執行減減,最後列印結果為 1 c語言問題,求助 這題是迷惑人用的.因為迴圈內部沒有break,所以for會一直執行下去,直到a 11,這時...

劍三萬花輸出問題,劍網三花花輸出問題

可以去貼吧萬花谷看看,有多種配裝和屬性,自己分析,並選擇對自己最合適的 另外現在都是陽明瞭。 西山居遊戲 大俠您好 現在都不用快雪流了是陽明流了 快雪已經打不高了 萬花還是會心最重要 第一段 cast buff 落鳳 玉石俱焚 use buff 焚玉 9 buff 夢歌 5 森徑寒 cast man...