若有以下巨集定義 define X 5 define Y X

2022-03-21 00:10:11 字數 3195 閱讀 8115

1樓:大雄和哆啦a夢遊戲

7、5根據巨集定義知:

x=5,

y=x+1=6,

z=y*x/2

=x+1*x/2

=7,a=y=6,

--a=5。

巨集定義在 c 語言源程式中允許用乙個識別符號來表示乙個==字串==,稱為「==巨集/巨集體==」 ,被定義為「巨集」的==識別符號==稱為「==巨集名==」。

擴充套件資料

相對於==全域性變數==兩者的區別如下:

1.巨集定義在編譯期間即會使用並替換,而全域性變數要到執行時才可以。

2.巨集定義的只是一段字元,在編譯的時候被替換到引用的位置。在執行中是沒有巨集定義的概念的。而變數在執行時要為其分配記憶體。

3.巨集定義不可以被賦值,即其值一旦定義不可修改,而變數在執行過程中可以被修改。

4.巨集定義只有在定義所在檔案,或引用所在檔案的其它檔案中使用。而全域性變數可以在工程所有檔案中使用,只要再使用前加乙個宣告就可以了。換句話說,巨集定義不需要extern。

2樓:__那個

y=x+1

那麼z=x+1*x/2

這個x+1沒有括號

z=5+1*5/2=7.5

%d是十進位制整數

最後輸出7

3樓:匿名使用者

7,5所謂巨集定義就是簡單替換。

#include #define x 5 #define y x+1 #define z y*x/2 main() { int a; a=y; printf("%d %d\n",z

4樓:匿名使用者

巨集定義只執行簡單的替換操作,就像你把x用5代替一定,y就用x+1代替就是6,z用y*x/2代替,這時候要注意了,是x+1*x/2,也就是5+1*5/2,結果z就是7,如果你#define y (x+1),這是帶了括號的,然後再去替換到z裡,又是另乙個結果,(x+1)*x/2,把5帶進去算就是15了,巨集定義中帶括號和沒帶括號差別很大的,要特別特別注意,因特他真的是很簡單很簡單的「替換」操作。

5樓:匿名使用者

printf("%d %d\n",z ,語句不全,

z = x + 1*x/2 = 5 + 1*5/2 = 5 +2 = 7;因為#define 定義的巨集只進行單純的替換,

6樓:水de幻想

如果你這是完整的話,那結果應該是7,而不是7.5

c語言 設有以下巨集定義,則執行語句x=2*(n+y(5+1));後,x(設x為整型)的值是

7樓:匿名使用者

x=2*(n+y(5+1))

=2*(3+y(5+1))

=2*(3+((3+1)*5+1) 這裡注意,n沒有被括號,所以乘法優先

=2*(3+20+1)=48

8樓:匿名使用者

就是把y(n)的值直接用那堆東西換,連括號什麼的一起

那麼x=2*(3+((3+1)*5+1))=48

9樓:漠影歌

你仔細看清楚,n = 5 + 1,並沒有括號,也就是說y(5 + 1) = ((n+1) * 5 + 1) = 21 ,再帶進去,自然就是48了

設有巨集定義:&define mul(x,y)x*y則巨集呼叫mul(2+3,5)的結果為17?

10樓:匿名使用者

是的。造成這種結果的原因,是由於巨集定義本身的特性造成的:

define僅僅是字元替換,因此在將nul(2+3,5)時,x是2+3,y是5,直接將表示式x*y替換字元後,則變成了2+3*5,其計算結果在乘法優先於加法的作用下會得到17這個數值。

為了避免這種情況,有兩種辦法解決

定義更安全的巨集定義,即使用括號將表示式括起來,避免了優先順序在替換後變化。

define mul(x,y) (x)*(y)將巨集定義改變為函式

int mul(int x,int y)

11樓:你大爺的飛機

是的mul(2+3,5)=2+3*5=17mul((2+3),5)=(2+3)*5=30#define只是字元替換而已,

#define mul(x,y) x*y只是在預編譯時將字元mul(x,y)替換為x*y,所以mul(2+3,5)就替換成了2+3*5

、設有以下巨集定義: #define n 3 #define y(n) ( (n+1)*n) 則執行語句:z=2 * (n+y(5+1));後,z的值為 d 。 a

12樓:

n沒有括起來 就是48 (n)才是54 可以自己敲一下** 試一下嘛

13樓:

答案應該是c啊

z=2*(3+((3+1)*5+1))=48

14樓:匿名使用者

y(5+1)=( (n+1)*n)=( (n+1)*(5+1))=( (3+1)*6)=24

z=2 * (n+y(5+1))=2*(3+24)=2*27=54

15樓:樂酷科技

巨集定義就是把出現的n和y(n)用後面的表示式替換掉而已所以 這裡的

z=2 * (n+y(5+1));

等價於z=2*(3+4*6)=54

所以選d

#define n 3 #define y(n) ( (n+1)*n) 則執行語句:z=2 * (n+y(5+1));後,z的值為

16樓:匿名使用者

#define n 3

#define y(n) ( (n+1)*n)z=2 * (n+y(5+1))

=2 * (n+((n+1)*5+1)) //注意由於#define y(n) ( (n+1)*n) 中n沒有用括號括上,所以這裡是*5+1,不是*(5+1)

=2 * (3+((3+1)*5+1))

=2 * (3+(4*5+1))

=2 * (3+21)

=2 * 24=48

17樓:匿名使用者

n=3;

y(n)=(3+1)*n=4n;

z=2*(3+y(6))=2*(3+4*6)=2*27=54z的值是54

若有定義「int a 51,2,3,4,5p a則以下表示式中值為3的是A a Bp 2 C p 2 D a

c.p 2 沒有乙個是指向a 2 的,但c的結果是1 2 3 若已定義 int a 5 0,1,2,3,4 p a,則以下輸出結果為3的是 選b。p 3 等同與a 3 陣列的名字a,是表示陣列首位址的位址常量。其值就是 a 0 p a 那麼p的值也是內 a 0 p和a都表示位址容,所以 就是取位址對...

若有以下陣列定義和函式呼叫,則函式fun的原型是

函式fun的原型為 void fun int p 4 或者void fun int p 4 因為,a的型別為 int 3 4 它 等價於 int 4 也等價於 int 4 設在主函式中有以下定義和函式呼叫語句,且 fun 函式為 void 型別 請寫出 fun 函式的 void fun double...

若有定義 Int a 10p a,則 p 5 表示()

選a 因為 p a,這時是把陣列a的首位址傳給了指標p,而陣列的定義是從a 0 開始的,所以p 5表示的是元素a 5 的位址,希望你現在明白了 b p 5 表示p 5這個位址指向抄單元內容,當然是int的,所以不是位址 p a 的賦值後,p存放的位址就是陣列起始位址也就是陣列元素a 0 的位址,p可...