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
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可...