15 設(shè)有定義:int a,*pa=&a;以下scanf語句中能正確為變量a讀入數(shù)據(jù)的是
A) scanf(“%d”,pA) ; B) scanf(“%d”,A) ;
C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;
答案:a
解析: 已經(jīng)取出a并保存在指針變量pa里,所以不用加取址符&17 以下程序的輸出結(jié)果是()
#define f(x) x * x
#include
Main()
{ int a=8,b=4,c ;
c=f(a)/f(b) ;
printf(“%d\n”,c);
}
A) 4 B) 8 C) 64 D) 16
答案:c
解析:此題程序中定義了一個帶參數(shù)的宏名為f,當(dāng)程序中遇到此宏名進(jìn)行展開時,則應(yīng)使用定義時的字符串x * x進(jìn)行替換。替換的原則是:遇到形參x,則以實參a代替,其他字符不變。所以,f (x)經(jīng)宏展開后成為字符串f (x)* f (x)。整個賦值語句的形式變?yōu)閏= f(a)* f(a)/f(b)* f(b);,則c=8*8/4*4=64。
按樓上的同學(xué)所說,c= f(a)* f(a)/f(b)* f(b) 很明顯,乘除處于同一個優(yōu)先級,所以應(yīng)該從左到右依次計算。整個程序看明白了,如果就因為計算出現(xiàn)錯誤,是不是會覺得很可惜??!提醒同學(xué)們一定要更細(xì)心一些!
A) scanf(“%d”,pA) ; B) scanf(“%d”,A) ;
C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;
答案:a
解析: 已經(jīng)取出a并保存在指針變量pa里,所以不用加取址符&17 以下程序的輸出結(jié)果是()
#define f(x) x * x
#include
Main()
{ int a=8,b=4,c ;
c=f(a)/f(b) ;
printf(“%d\n”,c);
}
A) 4 B) 8 C) 64 D) 16
答案:c
解析:此題程序中定義了一個帶參數(shù)的宏名為f,當(dāng)程序中遇到此宏名進(jìn)行展開時,則應(yīng)使用定義時的字符串x * x進(jìn)行替換。替換的原則是:遇到形參x,則以實參a代替,其他字符不變。所以,f (x)經(jīng)宏展開后成為字符串f (x)* f (x)。整個賦值語句的形式變?yōu)閏= f(a)* f(a)/f(b)* f(b);,則c=8*8/4*4=64。
按樓上的同學(xué)所說,c= f(a)* f(a)/f(b)* f(b) 很明顯,乘除處于同一個優(yōu)先級,所以應(yīng)該從左到右依次計算。整個程序看明白了,如果就因為計算出現(xiàn)錯誤,是不是會覺得很可惜??!提醒同學(xué)們一定要更細(xì)心一些!

