版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
國家二級C語言(編譯預(yù)處理和指針)
機(jī)試模擬試卷第1套
一、選擇題(本題共26題,每題1.0分,共26分。)
1、以下關(guān)于宏的敘述中正確的是
A、宏定義必須位于源程序中所有語句之前
B、宏名必須用大寫字母表示
C、宏調(diào)用比函數(shù)調(diào)用耗費時間
D、宏替換沒有數(shù)據(jù)類型限制
標(biāo)準(zhǔn)答案:D
知識點解析:本題考查宏替換的規(guī)則。宏替換分為簡單的寧符替換和帶參數(shù)的宏替
換兩類。使用宏時應(yīng)注意幾點:①宏定義僅僅是符號替換,不是賦值語句,因此
不做語法檢查;②為了區(qū)別程序中其他的標(biāo)識符,宏名的定義通常用大寫字母,
但不是必須用大寫;③雙引號中出現(xiàn)的宏名不替換;④使用宏定義可以嵌套,即
后定義的宏中可以使用先定義的宏。
2、有以下程序,程序運行后的輸出結(jié)果是#山機(jī)也〈51€12.11>#€1?1加5皿(編g)-
(a)main(){inta=2,b=3?C=5,d;d=SUB(a+b)*c:printf("%d\n",d);}
A、-12
B、0
C、10
D、-20
標(biāo)準(zhǔn)答案:D
知識點解析:本題主要考查的是宏替換,在程序中執(zhí)行d=sub(a+b)*c這條語句
時,首先要進(jìn)行宏替換,依據(jù)宏sUB(a)的定義可知,上面這條語句替換為d=(a+b)?
(a+b)*c,因為乘法的優(yōu)先級比減法的優(yōu)先級高,所以先進(jìn)行乘法運算,即d=5-
5*5=20。
3、以下敘述中錯誤的是
A、預(yù)處理命令行的最后不能以分號表示結(jié)束
B、C程序?qū)︻A(yù)處理命令行的處理是在程序執(zhí)行的過程中進(jìn)行的
C、#defineMAX是合法的宏定義命令行
D、在程序中凡是以開始的語句行都是預(yù)處理命令行
標(biāo)準(zhǔn)答案:B
知識點解析:預(yù)處理命令行是以“#”開始的語句,預(yù)處理命令行的最后不能以分號
表示結(jié)束,預(yù)處理命令行。其中宏定義的字符替換的定義格式為:#define標(biāo)識符
字符串,預(yù)處理命令行是在系統(tǒng)對源程序進(jìn)行編譯之前進(jìn)行處理的,不是在程序執(zhí)
行的過程中。
4、有以下程序,程序運行后的輸出結(jié)果是#include<stdio_h>#defincN2#dcfine
MN+l#defineNUM(M-1)*M/2main(){orintfC%d\nu,NUM1);}
A、4
B、8
C、9
D、6
標(biāo)準(zhǔn)答案:B
知識點解析:宏展開以后NUM為(2+l+l)*2+l/2,計算以后值為8。注意在進(jìn)行
宏展開的時候,千萬不要試圖計算,展開以后再進(jìn)行計算。
5、有以下程序,程序的輸出結(jié)果是#includeVstdic.h>#defineSQR(X)X*X
main(){inta=10?k=2,m=l;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}
A、0
B、1
C、9
D、10
標(biāo)準(zhǔn)答案:B
知識點解析:SQR(k+m)宏展開以后為k+m*k+m,值為5,表達(dá)式a/=SQR(k+m)
/SQR(k+m)為a=a/(5+5),表達(dá)式值為1。
6、有以下程序,程序運行后的輸出結(jié)果是#inchideVstdio.h>#inchideVstdlib-h
>main(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=l:*b=2,*c=3;
a=b;printf(H%d,%d,%d\n",*a,*b,*c);)
A、2,2,3
B、3,3,3
C、1,2,3
D、1,1,3
標(biāo)準(zhǔn)答案:B
知識點解析:a=b=c=(int*)malloc(sizeof(int)):含義為申請了一個整型的存儲空間,
讓指針a,b,c分別指向它,*a=l;*b=2;*c=3;語句的含義為所申請的整型存儲
空間的內(nèi)容,*c=3最后執(zhí)行導(dǎo)致存儲空間的內(nèi)容為3。a=b的含義讓指針a也指向
指針b所指向的存儲空間,a,b,c都指向整型的存儲空間,里邊的內(nèi)容為3。
7、有以下程序,程序的輸出結(jié)果是voidfun(double*pl,double*p2,double*s)
{s=(double*)calloc(1,sizeof(double));*s=4Pl+*(p2+l);)main(){double
a[2]=(l.1,2.2),b[2]={10.0,20.0),*s=a;fun(a,b,s);printf(n%5.2f
\n",*s);(
A、1.10
B、11.10
C、12.10
D、21.10
標(biāo)準(zhǔn)答案:A
知識點解析:.ANSIC標(biāo)準(zhǔn)規(guī)定calloc函數(shù)返回值的類型為void,具體使用格式
為:calloc(n,size)。該函數(shù)用來給n個同一類型的數(shù)據(jù)項分配連續(xù)的存儲空間,
每個數(shù)據(jù)項的長度為size個字節(jié)。若分配成功,函數(shù)返回存儲空間的首地址;否
則返回空。通過調(diào)用calloc函數(shù)所分配的存儲單元,系統(tǒng)自動置初值0。主函數(shù)中
定義數(shù)組a,b,以及指針s指向數(shù)組a,調(diào)用fun函數(shù),實參a和b,以及s的值傳
遞給相對應(yīng)形參pl,p2,以及s,在fun函數(shù)中更改s的指向,以及指向的數(shù)據(jù),
但是函數(shù)調(diào)用結(jié)束以后,形參空間撤銷,這項改變對于實參沒有影響。因此實參s
指向值不變,仍然為1.1。
8、以下敘述中正確的是
A、指針變量只能通過求地址運算符(&)來獲得地址值
B、語句“p=NULL:”與"p=\0;”是等價的語句
C、“int*Pl;int**p2;int*p3;”都是合法的定義指針變量的語句
D、語句尸NULL;執(zhí)行后,指針P指向地址為0的存儲單元
標(biāo)準(zhǔn)答案:C
知識點解析:指針變量定義形式為:類型*指針變量名;其中”號的個數(shù)決定了幾
級指針,指針變量賦地址值的方式有3種方式:①通過求地址運算符(&)獲得地址
值;②通過指針變量獲得地址值;③通過標(biāo)準(zhǔn)函數(shù)獲得地址值。另外NULL是
在stdio.h頭文件中定義的預(yù)定義符。NULL的代碼值為0。可以給指針變量賦
NULL{go例如p=NULL;賦值語句,稱p為空指針。這條語句等價于p=,\(T;
或p=0;這時,指針p并不是指向地址為0的存儲單元,而是具有一個確定的值-
__
9、設(shè)有定義:intx=0,*p;緊接著的賦值語句正確的是
A、*p=NULT.:
B、p=NULL;
C、p=x;
D、*p=x;
標(biāo)準(zhǔn)答案:B
知識點解析:定義指針變量時,必須將指針變量初始化為NULL(為空),否則,如
果不賦給它地址,系統(tǒng)會隨機(jī)給它分配一個地址。
10、有以下程序,程序運行后的輸出結(jié)果是main()[intm=l,n=2,*p=&m,
*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,
*q);)
A、1,2,1,2
B、1,2,2,1
C、2,1,2,1
D、2,1,1,2
標(biāo)準(zhǔn)答案:B
知識點解析:在主函數(shù)定義了3個整數(shù)指針變量p,q,r,并且使p指向m,q指
向n,再執(zhí)行“r=p;p=q:q=r;”這三條語句,使q指向m,p指向n,再輸出變量
“m,n,*p,*q"時,它們值分別為1,2,2,1。
11、有以下程序,執(zhí)行后的輸出結(jié)果是main(){inta=l,b=3,c=5;int*pl=&a,
*p2=&b,**p=&c;*p=*pl*(*p2);printf("%d\n",c):}
A、2
B、3
C、1
D、4
標(biāo)準(zhǔn)答案:B
知識點解析:程序使整型指針pl、p2、p3指向a、b、c值所存放的地址空間。然
后再將指針變量*pl、*p2中的值的乘積賦給指針變量*p,即賦給變量c,輸出c的
值3。
12、有以下程序main(){inta[5]={2,4,6,8,10}.*p>**k;p=a:k=&p;
printf("%d”,*(p++));printf(H%d\n%**k);}程序運行后的輸出結(jié)果是
A、44
B、24
C、22
D、46
標(biāo)準(zhǔn)答案:B
知識點解析:主函數(shù)中有針變量p指向數(shù)組a中下標(biāo)為。的元素,k指向p,那么
*(p++)的值為2,p指向數(shù)組中下標(biāo)為1的元素,k指向p,所以*k的值為4。
13、設(shè)有定義:char*c:以下選項中能夠使c正確指向一個字符串的是
A、charstr[]=Hstring";c=str;
B、scanf("%s",c);
C、c=getchar();
D、*c="stringu;
標(biāo)準(zhǔn)答案:A
知識點解析:在題目的題干中定義了字符指針變量c,在選項A)中,首先定義字符
數(shù)組str,然后再把字符數(shù)組str的酋地址賦給字符指針變量c。所以選項A)是正確
的。在選項D)中,如果在定義字符指針c時,同時給c賦初值時,這樣的表達(dá)式
是正確的。而本題不是在定義指針c時,同時給c賦初值。
14、若有以下定義intx[10],小pt=x;則對x數(shù)組元素的正確引用是
A、*(x+3)
B、*&x[10]
C、*(pt+10)
D、pt+3
標(biāo)準(zhǔn)答案:A
知識點解析:本題考查指針的調(diào)用。x代表x[10]數(shù)組的首地址指針,pt是指向
x[10]數(shù)組的首地址的指針,即兩者指向同一內(nèi)存單元。+(x+3)等同于x[3]。
15、有以卜程序voidfun(intn,int*s){intf;if(n=l)*s=n+l;else{fun(n-l,&f);
*s=f;}}main(){intx=0:fun(4,&x);printf(n%d\n",x);}程序運行后的輸出
結(jié)果是
A、1
B、3
C、4
D、2
標(biāo)準(zhǔn)答案:D
知識點解析:函數(shù)fun為遞歸調(diào)用函數(shù),如果n的值為1,那么后面形參指向的空
間存放n+1,否則繼續(xù)計算fun(n?l)的值。調(diào)用分析過程:fun(4,&x)-fun(3,
&x)Tfun(2,&x)->fun(l,&x)在回歸的過程中,對于x內(nèi)的數(shù)據(jù)并沒有改動。
16>有下列程序:voidf(int*q)main(){inti=0;{inta[5]={1?2,3,4,5),i;
for(;i<5;i++)(*q)++;)f(a);for(i=0;i<5;i++)printf(n%d,",a[i]);}程序運
行后的輸出結(jié)果是
A、2,2,3,4,5,
B、6,2,3,4,5,
C、1,2,3,4,5>
D、2,3,4,5,6,
標(biāo)準(zhǔn)答案:B
知識點解析:voidf(intxq)函數(shù)的功能是對(*q)的值連續(xù)5次自加1。在main。函數(shù)
中f(a)語句把一維數(shù)組a[5]的首地址作為實參,傳遞給函數(shù)f(int.q)的形參q,然
后在函數(shù)f(int*q)內(nèi),a[0]連續(xù)5次自加1后,a⑼的值就變成6,所以輸出為6,
2,3.4*5c
17、有以下程序:#include<stdio.h>voidmain()voidfun(char*c){chars[81];
{while(*c)gets(s);fun(s);puts(s);{if(*c>=,a,&&*c<=,z,)*c=*c-(,a,-,A,);}
C++:))當(dāng)執(zhí)行程序時從鍵盤上輸入HelloBeijingV回車》,則程序的輸出結(jié)果是
A、HELLOBEIJING
B、HelloBeijing
C^helloBeijing
D、hELLOBeijing
標(biāo)準(zhǔn)答案:A
知識點解析:子函數(shù)fun的功能是把小寫字母轉(zhuǎn)換成大寫字母,所以程序的輸出結(jié)
果為選項A)o
18、有下列程序:voidf(intb|]){intI:for(i=2;i<6;i++)b[i]=2;}main(){int
a[10]={l,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0:i<10,
i++)printf("%d,",a[i]);}程序運行后的輸出結(jié)果是
A、1,2,3,4,5,6,7,8,9,10,
B、1,2,3,4,10,12,14,16,9,10,
C、1,2,6,8,10,12,7,8,9,10,
D、1,2,6,8,10,12,14,16,9,10,
標(biāo)準(zhǔn)答案:C
知識點解析:函數(shù)voidf(intb[])的功能是對數(shù)組b[]中第2個到第5個元素的值逐
個擴(kuò)大2倍。所以在main。函數(shù)中,f(a)語句的作用是對數(shù)組a[10]中從a⑵到。5]
的各個數(shù)字乘以2,因而數(shù)組a[10]的元素就變成了{1,2,6,8,10,12,7,8,
9,10)o
19、若有以下程序#inchideVstdio.h>intk=7;voidf(int**s){int*t=&k;*s=t;
printf(n%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p:
f(r);prinlf("%d,%d,%d\n",i,*p,**r);}則程序的輸出結(jié)果是
A、3,7,7,7,7,7
B、7,7,7,3,3,3
C、3,3,3,7,7,7
D、7,7,7,3,7,7
標(biāo)準(zhǔn)答案:D
知識點解析:本題考查了二級指針,二級指針可以保存一級指針的地址。主函數(shù)中
P指向i,r指向p。函數(shù)調(diào)用后s指向p,在f函數(shù)中I指向全局變量k=7,s指向
t,同時s保存了實參p的地址,此時p也指向3輸出三個7,流程轉(zhuǎn)到主函數(shù),i
的值為3,p以及r的值為7。
20、若有以下程序#includeVstdio.h>intk=7,m=5;voidf(int**s){int*t=&k;
s=&t:printf("%d.%d,%d."?k,*t,**s):)main(){inti=3.
*p=&i,**r=&p;f(r);printf("%d,%d,%d\n”,*p,**r);}則程序的輸出
結(jié)果是
A、7,5,7,3,3,3,
B、7,5,7,3,5,7,
C>7,5,5,3,3,3,
D、7,7,5,3,3,3,
標(biāo)準(zhǔn)答案:C
知識點解析:本題考查二級指針作為函數(shù)的參數(shù),可以通過函數(shù)調(diào)用來改變主函數(shù)
中一級指針的指向。主函數(shù)中指針變量p指向i,r指向p,調(diào)用f函數(shù),形參指針
s指向p,流程轉(zhuǎn)到f函數(shù)執(zhí)行,指針變量t指向k,s指向I,此時更改了s的指
向,s指向了3更改了s指向的地址空間內(nèi)容為m的地址,同時I也指向變量m,
因此**s的值為m的值,%為m的值,k為7。流程返回到主函數(shù),沒有對主函數(shù)
空間的數(shù)據(jù)和指向作出更改,因此全部為3。
21、有以下程序vo序fun(inlx,inty,int*c>int*d){*c=x+y;*d=x-y;)main(){int
a=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf(H%d%d\n",c,d);}程序的
輸出結(jié)果是
A、43
B、34
C、71
D、00
標(biāo)準(zhǔn)答案:C
知識點解析:函數(shù)fun有四個形參,功能是利用參數(shù)的地址傳遞來計算前兩個參數(shù)
的和與差。主函數(shù)中調(diào)用fun函數(shù)c計算針3,d計算4-3值為1。
22>有以下程序voidswap(char*x,char*y)main(){chart;{chadsl="abc",
*S2=n123";t=*x;*x=*y;*y=t;sw叩(si,s2);pfintf("%s,%s\n",si,
s2);}}程序執(zhí)行后的輸出結(jié)果是
A、abc,123
B、123,abc
C、321,cba
D、Ibc,a23
標(biāo)準(zhǔn)答案:D
知識點解析:函數(shù)voidswap(char*x,char*y)的功能是交換兩個字符*x和*y中的內(nèi)
容。在主函數(shù)中字符指針si指向字符串匕be,,s2指向字符串T23L所以函數(shù)
swap(sl,s2)的執(zhí)行結(jié)果就是字符言和T相互交換.
23、有以下程序(說明:字*A的ASCII碼值是65)void
fun(char*s){while(*s){if(*s%2)printf(u%c",*s);s++;))main(){char
a[]二"BYTE”;fun(a);printf(”\n”);}程序運行后的輸出結(jié)果是
A、BT
R、YE
C、YT
D、BY
標(biāo)準(zhǔn)答案:B
知識點解析:程序只輸出字母ASCII值為奇數(shù)的字母,根據(jù)字母B,Y,T,E的
ASCH值的奇偶性相應(yīng)輸出。
24、有以下程序#includeVstdio.h>main。voidfun(char*a,char*b)
{char*s="****a*b****H,t[80];{while(*a=,*,)a++;fun(s,t);puts(t);
while(*b=*a){b4-+;a++;}}}程序的運行結(jié)果是
A^a*b
B、*****a*b
C、a*b****
D、ab
標(biāo)準(zhǔn)答案:C
知識點解析:主函數(shù)mare()定義了指向字符串的指針和一個字符數(shù)組,接著調(diào)用
fun(s,。函數(shù),進(jìn)行實參向形參傳遞。函數(shù)fun()第一個while語句判斷*a中的值為
“十”時繼續(xù)掃描,當(dāng)遇到不是“*”時結(jié)束,接著第二個while循環(huán)語句,將*a中從“a”
開始的后續(xù)所有字符都賦予*b,也就是U80]中的內(nèi)容為"a*b****”。
25、有以下程序#includeVstdio.h>main()voidfun(char*t,charts){char
ss[10]="acc,',aa[1O]="bbxxyy";{while(*t!=O)t++;fun(ss,aa):printf("%s,%s\
n",ss,aa);while((*t++=*s++)!=0);)}程序的運行結(jié)果是
A、acc,bbxxyy
accxxyy,bbxxyy
C、accbbxxyy,bbxxyy
D^accxyy,bbxxyy
標(biāo)準(zhǔn)答案:C
知識點解析:fun函數(shù)中,第1個while循環(huán)語句使指針I(yè)指向字符串的末尾,第2
個while循環(huán)語句實現(xiàn)了字符串t和s的連接。主函數(shù)中語句fun(ss,aa)的功能是
將字符串a(chǎn)a連接到字符串ss的末尾。
26、有以下程序#includeVstdio.h>#include<string.h>voidfun(int*pl,
int*p2,int*s){s=(int*)calloc(l,sizeof(int));*s=*pl+*p2:flee(s);}main(){int
a[2]={1,2),b|2]={40.50},*q=a;fun(a,b,q);printf("%d\nM,*q);}程序
運行后的輸出結(jié)果是
A、41
B、42
C、0
D、1
標(biāo)準(zhǔn)答案:A
知識點解析:主函數(shù)定義數(shù)組a,b,q指向數(shù)組a,調(diào)用fun函數(shù)以后形參接收實
參的數(shù)據(jù).pl和p2指向數(shù)組a和h.同時*指向數(shù)組a.在fun函數(shù)中改變了*的
指向和賦值,但是在程序調(diào)用結(jié)束之間形參空間全部釋放,因此對于s的指向改動
不會對主函數(shù)參數(shù)構(gòu)成影響。因此主函數(shù)中數(shù)去*q的值仍然為lo
國家二級C語言(編譯預(yù)處理和指針)
機(jī)試模擬試卷第2套
一、選擇題(本題共26題,每題1.0分,共26分。)
1、以下敘述中正確的是
A、在C語言中,預(yù)處理命令行都以開頭
B、預(yù)處理命令行必須位于C源程序的起始位置
C、include必須放在C程序的開頭
D、C語言的預(yù)處理不能實現(xiàn)宏定義和條件編譯的功能
標(biāo)準(zhǔn)答案:A
知識點解析:在C語言中,凡是以號開頭的行,都稱為“編譯預(yù)處理”命令行。
預(yù)處理命令可以放在程序中的任何位置,其有效范圍是從定義開始到文件結(jié)束。預(yù)
處理命令有宏定義、文件包含和條件編譯三類。#include<stdio.h>命令行表示程
序中要引用C標(biāo)準(zhǔn)函數(shù)庫中的標(biāo)準(zhǔn)輸入輸出函數(shù)。
2、有以下程序,程序運行后的輸出結(jié)果是#include<stdio.h>#detine
S(x)4*(x)*x4+1voidmain(){intk=5,j=2;printf("%d\n",S(k+j));}
A、197
B、143
C、33
D、28
標(biāo)準(zhǔn)答案:B
知識點解析:這道題涉及到帶參數(shù)的宏的定義和替換這個知識點。在程序中定義了
帶參數(shù)的宏S(x),當(dāng)在主函數(shù)中用參數(shù)k—+j調(diào)用宏S時,根據(jù)宏替換的原則,則
S(k+j)=S(5+2)=4*7*5+2+1=143。
3、有以下程序,程序運行后的輸出結(jié)果是#includeVstdio.h>#definefix)x*x*x
main(){inta=3,s,t:s=f(a+l);t=f((a+l));printf(n%d,%d\n”,s,t);)
A、10,10
B、10,64
C、64,10
D、64,64
標(biāo)準(zhǔn)答案:B
知識點解析:根據(jù)題目中宏f(x)的定義.運算過程應(yīng)為:
s=f(a+1)=a+1*a+1*a+1=a+a+a+1=10,因此最后s的結(jié)果為10,而
t=f((a+1))=(a+1)*(a+1)*(a+1)=4*4*4=64的結(jié)果為64。
4、若程序中有宏定義行:#defineN100則以下敘述中正確的是
A、宏定義行中定義了標(biāo)識符N的值為整數(shù)100
B、上述宏定義行實現(xiàn)將100賦給標(biāo)示符N
C、在運行時用100替換標(biāo)識符N
D、在編譯程序?qū)源程序進(jìn)行預(yù)處理時用100替換標(biāo)識符N
標(biāo)準(zhǔn)答案:D
知識點解析:在C語言中,凡是以飛”號開頭的行,都稱為“編譯預(yù)處理”。其含義
是在c編譯程序?qū)源程序進(jìn)行編譯前,山編譯預(yù)處理程序?qū)@些編譯預(yù)處理命令
進(jìn)行處理的過程。由#define定義的宏就是編譯預(yù)處理命令。C程序在進(jìn)行編譯之
前,都要先對程序中所有出現(xiàn)的“宏名”,都用宏定義中的替換文木進(jìn)行替換。
5、有以下程序,程序運行后的輸出結(jié)果是#include〈stdio.h>#defineSUB(X,
Y)(X+1)*Ymain(){inta=3,b=4;printf(M%d\n",SUB(a++,b++));}
A、20
B、12
C、16
D、25
標(biāo)準(zhǔn)答案:C
知識點解析:宏展開的結(jié)果(a+++l)*b++,后綴自加表達(dá)式參加運算,先用a和b
的初值得到表達(dá)式的值,進(jìn)行計算,然后a和b在芻加。因此計算結(jié)果為16。
6、以下敘述中正確的是
A、在包含文件中,不得再包含其他文件
B、include命令行不能出現(xiàn)在程序文件的中間
C、在一個程序中,允許使用任意數(shù)量的include命令行
D、雖然包含文件被修改了,包含該文件的源程序也可以不重新進(jìn)行編譯和連接
標(biāo)準(zhǔn)答案:C
知識點解析:include文件包含命令,使用時應(yīng)注意以下5個規(guī)則:①包含文件
的#吊0期。命令行通常應(yīng)書寫在所用源程序文件的開頭,故有時也把包含文件禰作
“頭文件頭文件名可以由用戶指定,其后綴不一定用h[②包含文件中,
般包含有一些公用的#define命令行、外部說明或?qū)?庫)函數(shù)的原型說明;③當(dāng)包
含文件修改后,對包含該文件的源程序必須重新進(jìn)行編譯連接:④在一個程序
中,允許有任意多j#include命令行;⑤在包含文件中還可以包含其他文件。
7、有以下程序,程序運行后的輸出結(jié)果是voidfun(int*pLint*p2,int*s)
{s=(int*)malloc(sizeof(int));*s=*pl+*(p2++);}main(){inta[2]={1,2),
b[21={10,20},*s=a:fun(a,b,s);printf("%d\n",*s);)
A、10
R、\1
C、2
D、I
標(biāo)準(zhǔn)答案:D
知識點解析:主函數(shù)中定義指針s指向數(shù)組a,調(diào)用fun函數(shù),首先是實參傳給形
參,因此pl指向a,p2指向b,s指向a,即*s的值為1。流程到調(diào)用函數(shù)fun執(zhí)
行,首先更改s的指向為新分空間的首地址,表達(dá)式!s=*pl+*(p2++),取p!指向數(shù)
據(jù)位1,加上p2指向數(shù)據(jù)10,p2后移,存放到s指向的空間中11.流程結(jié)束,形
參s和pl,p2撤銷,存入s指向空間的數(shù)據(jù)丟失,主函數(shù)輸出s指向數(shù)據(jù)仍然是
lo
8、設(shè)有以下函數(shù):voidfun(intn,char*s){.......}則下面對函數(shù)指針的定義和賦值均
正確的是
A、void*pf();pf=fun;
B、void(*pf)(int,char*);pf=fun;
C、void*pf();*pf=fun;
D^void(*pf)(int,char);pf=&fun;
標(biāo)準(zhǔn)答案:B
知識點解析:函數(shù)指針的定義形式是:數(shù)據(jù)類型標(biāo)識符(*指針變量名)():
void(*pf)()定義了一個沒有返回值的函數(shù)指針pf,在給函數(shù)指針變量賦值時,只需
給出函數(shù)名而不必給出參數(shù)。所以給pf給賦值時,把函數(shù)名fun賦給pf即可。
9、以下敘述中正確的是
A、函數(shù)的類型不能是指針類型
B、函數(shù)的形參類型不能是指針類型
C、基類型不同的指針變量可以相互混用
D、設(shè)有指針變量為“double*p",則“p+1”將指針P移動8個字節(jié)
標(biāo)準(zhǔn)答案:D
知識點解析:在對指針進(jìn)行加、減算術(shù)運算時,數(shù)字1表示1個存儲單元的長度,
而double類型數(shù)據(jù)在內(nèi)存中占8個字節(jié),因此移動一次移動8個字節(jié)。其他三個
都不正確,
10、以下敘述中錯誤的是
A、函數(shù)可以返回地址值
B、改變函數(shù)形參的值,不會改變對應(yīng)實參的值
C、當(dāng)在程序的開頭包含頭文件stdio.h時,可以給指針變量賦NULL
D、可以給指針變量賦一個整數(shù)作為地址值
標(biāo)準(zhǔn)答案:D
知識點解析:指針變量的值只能是存儲單元地址,而不能是一個整數(shù),選項D)的
描述是錯誤,為待選答案。函數(shù)可以返回內(nèi)存空間的地址,同時函數(shù)形參和實參分
別占用不同的內(nèi)存單元,改變形參的值不會改變對應(yīng)實參的值,在頭文件stdio.h
中,NULL被定義為void型的指針。
11、下面選項中的程序段,沒有編譯錯誤的是
A^char*sp,s[10];sp="Hcllo";
B、char*sp,s[10];s="Hello";
C、charstrl[10]="computer",str2[10];str2=strl;
D、charmark[l];mark二"PROGRAM”;
標(biāo)準(zhǔn)答案:A
知識點解析:選項B)中數(shù)組名為常量,不能賦值,選項C)字符數(shù)組之間無法完成
賦值操作,選項D)和選項B)相同,無法對數(shù)組進(jìn)行賦值。
12、若有定義語句:inia[2][3],仙3];則以下語句中正確的是
A、p[0]=&a[l][2];
B、p[0]=a;
C、p=a;
D、p[l]=&a;
標(biāo)準(zhǔn)答案:A
知識點解析:定義語句“inta[2][3],*p[3];”定義了整型二維數(shù)組a[2][3]和指針數(shù)
組p[3]。在C語言中,二維數(shù)組名也是一個存放地址常量的指針,其值為二維數(shù)
組中第一行的地址。所以選項A)中,把整型數(shù)組a[0]的指針賦給p[0]。
13、以下敘述中正確的是
A、如果p是指針變量,則*p表示變量P的地址值
B、如果p是指針變量,則&p是不合法的表達(dá)式
C、在對指針進(jìn)行加、減算術(shù)運算時,數(shù)字1表示1個存儲單元的長度
D、如果p是指針變量,則舉p+1和叫p+1)的效果是一樣的
標(biāo)準(zhǔn)答案:c
知識點詞析:移動指針是對指針變量加上或減去一個整數(shù).或通過賦值運算,使指
針變量指向相鄰的存儲單元。因此,只有當(dāng)指針指向一串連續(xù)的存儲單元時,指針
的移動才有意義。當(dāng)指針指向一串連續(xù)的存儲單元時,可以對指針變量進(jìn)行加上或
減去一個整數(shù)的運算,也可以對指向同一串連續(xù)存儲單元的兩個指針進(jìn)行相減的運
算。除此之外。不可以對指針進(jìn)行任何其他的算術(shù)運算。C語言提供了一個間接訪
問運算符(*),又稱間址運算符,它是一個單目運算符,優(yōu)先級比較高,高于普通
的算*運算符,但是低于()運算符,因此*P+1和9(p+l)的含義是不一樣。當(dāng)指針變
量中存放了一個確切的地址值時,就可以用“間接訪問運算符''通過指針來引用該地
址的存儲單元。
14^有以下程序#includeVstdio.h>main(){intn,*p=NULL:*p=&n;
printf("Inputn:");scanf("%d",&p);printf("outputn:");printf("%d\n",p);)
該程序試圖通過指針p為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯誤,以下語句正
確的是
A、intn,*p=NULL:
B、*p=&n;
「、scanf("%d".&p)
D、printf("%d\n",p);
標(biāo)準(zhǔn)答案:A
知識點解析:選項A)表示在程序中,聲明定義變量語句“intn,*p=NULL;”定義
了整型變量n和指針變量p,并旦指針變量p初始化為空。其他的語句都是錯誤
的。其中選項B),&n的地址應(yīng)存放到指針變量p中,而選項C)中數(shù)據(jù)輸入項錯
誤,選項D)輸出地址信息。
15、有以下程序intfun1(doublea){returna*=a;)intfun2(doublex,doubley)
{doublea=0,b=0;a=funl(x);b=funl(y);return(int)(a+b);)main(){doublew;
w=fun2(l.1,2.0);……}程序執(zhí)行后輸出結(jié)果是
A、5.00
B、5
C>5.21
D、0.0
標(biāo)準(zhǔn)答案:A
知識點解析:子函數(shù)fun(doubka)的功能是返回a的平方值的整數(shù)部分。子函數(shù)
fun2(doubkx,doublev)的功能是返回x的平方值的整數(shù)部分與y的平方值的整數(shù)
部分的和。又因為題中變量w的定義為double型,函數(shù)fun(2)的定義為im型,按
照各類數(shù)值型數(shù)據(jù)間的混合運算,整型數(shù)據(jù)被轉(zhuǎn)換為實型數(shù)據(jù)。所以雙精度型變量
w的值為5.00o
16、有以卜.程序#include<sidio.h>intfun(char*s){char*p=s;while(*p!=0)p++;
return(p-s);)main(){pnntf(H%d\n",fun("goodbey!"));}程序的輸出結(jié)果是
A、6
B、8
C、0
D、7
標(biāo)準(zhǔn)答案:B
知識點解析:函數(shù)fun的主要功能是計算字符串中實際字符的個數(shù),因此
“goodbey!”含有字符為8,返回值為8。
17、有以卜.程序#include〈sidio.h>main()voidfun(char*c,intd}{charb=,a\
a="A':{*c=*c+l:d=d+1;fun(&b,a);printf("%c,%c\n”,b,a);printf。'%
c,%c,",*c,d);}}程序運行后的輸出結(jié)果是
A、b,B,b,A
B、b,B,B,A
C>a,B,B,a
D、a,B,a,B
標(biāo)準(zhǔn)答案:A
知識點解析:本題中fun函數(shù)的參數(shù)傳遞方式,形參c是傳地址,形參d是傳值,
所以在主函數(shù)中,執(zhí)行fun時,把變量b的地址傳給了c,把a(bǔ)的值傳遞給了d,
經(jīng)過運算.輸出的值為Rc在主函數(shù)的輸出語句中,輸出變量h的值為h,變
量a的值為A。
18、有以下程序#includeVsldio.h>voidf(int*p,int*q)voidf(int*p,int*q);
{main()p=p+l;*q=*q+l;{intm=l,n=2,*r=&nu}f(r,&n);printf(H%d,%
d",m,n);}程序運行后的輸出結(jié)果是
A、2,3
B、1,3
C、I,4
D、1,2
標(biāo)準(zhǔn)答案:B
知識點解析:本題考查函數(shù)的調(diào)用與指針。fun()函數(shù)的作用是:使指針p指向原來
所指變量的下一個變量,使q指針指向的值加1。主函數(shù)中,指針r指向m,調(diào)用
fun()函數(shù)的結(jié)果是,使r指向地址位于m后面的變量,使位于n的地址上的變量
(就是n)的值加1,因此,結(jié)果為1,3。
19、有以下程序程ncludeVsidio.h>intfun(charsQ)main(){intn=0;{char
s[10]={,6,,"','4','9','O','*'}:while(*sV='9'&&*s>
=,O,)printf(',%d\n",fun(s));{n=10*n+*s-,0,;s++;)(rcturn(n);}程序的運行
結(jié)果是
A、61490
B、61
C、9
D、5
標(biāo)準(zhǔn)答案:B
知識點解析:在fun函數(shù)中,wbile循環(huán)的功能是逐個取字符數(shù)組s的字符判斷其
是否是數(shù)字。若是則將這些數(shù)字組成一個數(shù)保存到變量n中。并返回變量n的值。
所以在主函數(shù)中調(diào)用fun(s)時,將把字符數(shù)組s中的數(shù)字組成一個數(shù)輸出。因為當(dāng)
指針s指向數(shù)組的第3位時,即字符,",循環(huán)條件不成立,循環(huán)結(jié)束,返回n的
值。所以輸出n的值為61。
20、若有以下程序#includcVstdio.h>int*f(int*s,int*t){int*k;if(*s<*t){k=s;
s=t;t=k;}returns;)main(){inli=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);
printf(H%d,%d,%d,%d,%d\n”,i,j9*p,*q,*r):}則程序的輸出結(jié)果是
A、3,5,5?3,5
B、5,3,5,3,5
C^5,3,3,5,5
D、3,5,3,5,5
標(biāo)準(zhǔn)答案:D
知識點解析:本題考查了返回值為指針的函數(shù),函數(shù)f的主要功能為第一個參數(shù)小
于第二個參數(shù),那么交疾指針的指向,這對于實參指向的數(shù)據(jù)時沒有影響的。最后
返回比較大的元素的地址。主函數(shù)中p指向i,q指向j,調(diào)用r=f(p,q)。返回q的
地址,因此*p=3,*q=5,*r=5o
21、若有以下程序#includcVstdio.h>int*t){intk;if(*s<*t){k=*s;
*s=*t;*t=k;)returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);
printf(H%d,%d,%d,%d,%d\n",i,J,*p,*q,*r);}則程序的輸出結(jié)果是
A、3,5,5,3,5
B、3,5,3,5,5
C、5,3,5,3,5
D、5,3,3,5,5
標(biāo)準(zhǔn)答案:C
知識點解析:函數(shù)f為返回值為指針的函數(shù),主要功能是返回s和t指向空間值大
的數(shù)據(jù)的地址,同時如何s指向空間數(shù)據(jù)大于t指向空間的數(shù)據(jù),那么交換。主函
數(shù)p和q指向i和j,值為3和5,j的值大于i的值,因此調(diào)用函數(shù)f以后,返回i
的地址,「指向j,同時i和i的值交換,i=5,i=3,p和q的指向不變,p指向i,q
指向j。
22、有以卜程序voidfun(inl*p,int*q){intt;t=*p;*p二*q;幸q=l;*q=*p;}
main(){inta=0,b=9;fun(&a,&b);printf("%d%d\n'\a,b);}程序的輸出結(jié)
果是
A、00
B、99
C、90
D、09
標(biāo)準(zhǔn)答案:B
知識點解析:函數(shù)。fun的主要功能是交換p和q指向的地址空間的數(shù)據(jù),然后更
改p的指向的地址空間數(shù)據(jù),使之和q指向的數(shù)據(jù)相同。主函數(shù)調(diào)用fun后,p指
向a,q指向b,因此a和b的數(shù)據(jù)全部為9。
23、有以下函數(shù)intfun(char*x,char*y){intn=0;while((*x:=*y)&&*x!='\
0"){x++;y++;n++;}returnn;}函數(shù)的功能是
A、查找x和y所指字符串中是否有、(T
B、統(tǒng)計x和y所指字符串中最前面連續(xù)相同的字符個數(shù)
C、將y所指字符串賦給x所指存儲空間
D、統(tǒng)計x和y所指字符串中相同的字符個數(shù)
標(biāo)準(zhǔn)答案:B
知識點解析:在while循環(huán)中的判斷表達(dá)式為(**=*丫)&&*乂!=,\(T,所以只要字
符串x與y的當(dāng)前字符不相等時,循環(huán)就結(jié)束。
24、有以下程序#includcVstdio.h>voidfun(char**p){++p;printf("%sha"?
*p);}main(){char*a[]=(HMorning","Afternoon","Evening","Night");fun(a);
程序的運行結(jié)果是
A、ftcmoon
B、Morning
C、orning
D^Afternoon
標(biāo)準(zhǔn)答案:D
知識點解析:在程序中,指針的指針變量a和p都是指向字符串的指針。執(zhí)行
fun(a)語句時,p指向的是字符串?dāng)?shù)組a的第一個字符串“Morning”,p自加1之
后,*p指向了字符串?dāng)?shù)組a的第2個字符串“Afternoon”。
25、下列函數(shù)的功能是voidfun(char*a,char*b){while((*b=*a)!=,\0'){3++;
b++;))
A、使指針b指向a所指字符串
B、將a所指字符串和b所指字符串進(jìn)行比較
C、將a所指字符串賦給b所指空間
D、檢杳a和b所指字符串中是否有、(T
標(biāo)準(zhǔn)答案:C
知識點解析:在while語句的條件中是把字符*a的值賦給字符*b,然后再判斷字符
*b的值是否等于字符串的結(jié)束字符(,\0)當(dāng)不等于結(jié)束字符C\(T)時,把字符指
針變量a,b分別加1,指它們的下一個字符,直到字符串a(chǎn)的結(jié)束。這樣程序執(zhí)
行的結(jié)果就是把字符串a(chǎn)賦給了b所指的存儲空間。
26、有以下程序#inckide〈stdio.h>#include<string.h>voidfun(char*w,intm)
{chars,*pl,*p2;pl=w;p2=w+m-1;while(pl<p2)(s=*pl;*pl=*p2;*p2=s;
pl++;p2-:})main()(chara|]=M123456";fun(a,strlen(a));puts(a);}
A、116611
13、161616
C、654321
D、123456
標(biāo)準(zhǔn)答案:C
知識點解析:函數(shù)fun的功能是將字符串w中的元素從大到小進(jìn)行排列,所以在主
函數(shù)中調(diào)用函數(shù)fun后,字符串a(chǎn)的元素從大到小進(jìn)行了排列。
國家二級C語言(編譯預(yù)處理和指針)
機(jī)試模擬試卷第3套
一、選擇題(本題共26題,每題1.0分,共26分。)
1、設(shè)有定義:intx=0,*p;緊接著的賦值語句正確的是
A、*p=NULL;
B、p二NULL;
C、p=x;
D、*p=x;
標(biāo)準(zhǔn)答案:A
知識點解析:定義指針變量時,必須將指針變量初始化為NULL(為空),否則,
如果不賦給它地址,系統(tǒng)會隨機(jī)給它分配一個地址。
2、以下敘述中錯誤的是
A、函數(shù)可以返回地址值
B、改變函數(shù)形參的值,不會改變對應(yīng)實參的值
C、當(dāng)在程序的開頭包含頭文件sidio.h時,可以給指針變量賦NULL
D、可以給指針變量賦一個整數(shù)作為地址值
標(biāo)準(zhǔn)答案:D
知識點解析:指針變量的值只能是存儲單元地址,而不能是一個整數(shù),選項D的
描述是錯誤,為待選答案。函數(shù)可以返回內(nèi)存空間的地址,同時函數(shù)形參和實參分
別占用不同的內(nèi)存單元,改變形參的值不會改變對應(yīng)實參的值,在頭文件Sldio.h
中,NULL被定義為void型的指針。
3、設(shè)已有定義:floatx;則以下對指針變量p進(jìn)行定義且賦初值的語句中正確的是
A、int*p=(float)x;
B、float*p=&x;
C、floatp=&x;
D、float*p=1024;
標(biāo)準(zhǔn)答案:B
知識點解析:定義指針變量的一般形式為:類型名半指針變量名1,行旨針變量名
2,……;o對一個指針變量賦值要通過求地址運算符(&)獲得變量的地址值,然后
把此地址值賦給指針變量。因而在選項A的表達(dá)式中,賦值號的左邊表示定義了
指針變量P,而右邊表示求變量x的地址值。
4、有以下程序main(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;
printf("%d,%d,%d,%d\nM,m,n,*p,*q);)程序運行后的輸出結(jié)果是
A、1,2,1,2
B、1,2,21
C、2,1,2,1
D、2』,1,2
標(biāo)準(zhǔn)答案:B
知識點解析:在主函數(shù)定義了3個整數(shù)指針變量p,q,r,并且使p指向m,q指向
n,再執(zhí)行r=p;p=q;q=r;這三條語句,使q指向m,p指向n,再輸出變量m,n,*p,*q
時,它們值分別為122,1。
5、下面選項中的程序段,沒有編譯錯誤的是
A、char*sp,s[10];sp='Hello";
B、char*sp,s[10];s="Hello";
C、charstrl[10]="computer",str2[10];str2=strl;
D、charmark[];mark="PROGRAM";
標(biāo)準(zhǔn)答案:A
知識點解析:選項B中數(shù)組名為常量,不能賦值,選項C字符數(shù)組之間無法完成
賦值操作,選項D和選項B相同,無法對數(shù)組進(jìn)行賦值。
6、設(shè)有定義doublea[10],*s=a;以下能夠代表數(shù)組元素a[3]的是
A、(*s)[3]
B、*s[3]
C、*s+3
D、*(s+3)
標(biāo)準(zhǔn)答案:D
知識點解析:語句*s=a,使用指針變量s指向一維數(shù)組a的首地址,所以*(s+3)表
示的是引用數(shù)組a[3]。
7、有以下程序main(){inta=l,b=3,c=5;int*pl=&a,*p2=&b,*p=&c;*p
=*pl*(*p2);printf(',%d\n';c);}執(zhí)行后的輸出結(jié)果是
A、2
B、3
C、1
D、4
標(biāo)準(zhǔn)答案:B
知識點解析:程序使整型指針pl、p2、p3指向a、b、c值所存放的地址空間。然
后再將指針變量*pl、加2中的值的乘積賦給指針變量*p,即賦給變量c,輸出c的
值3。
8、若有定義語句:inta⑵[3],*p[3];則以下語句中正確的是
A、p[0]=&a[l][2];
B、p|O]=a;
C^p=a;
D^p[I]=&a;
標(biāo)準(zhǔn)答案:A
知識點解析:定義語句inta⑵[3],*p[北定義了整型二維數(shù)組a⑵⑶和指針數(shù)組
p[3]o在C語言中,二維數(shù)組名也是一個存放地址常量的指tI,其值為二維數(shù)組中
第一行的地址。所以選預(yù)A中,把整型數(shù)組a[0]的指針賦給p[0]。
9、若有定義語句:intyear=2009,*p=&year;以下不能使變量year中的值增至2010
的語句是
A、(*p)++;
B、++(*p);
C、*p++;
D、*p+=l;
標(biāo)準(zhǔn)答案:C
知識點解析:由于自加運算符++的運算級高于間接運算*的運算級,所以選項A)的
表達(dá)式*P++不能使變量year中的值增至2010。
10、有以下程序main(){inta[5]=(2,4,6,8,10),*p,**k;p=a;k=&p;printf("%d",
*(p++));printf(n%d\nn,**k);}程序運行后的輸出結(jié)果是
A、44
B、24
C、22
D、46
標(biāo)準(zhǔn)答案:B
知識點解析:主函數(shù)中指針變量p指向數(shù)組a中下標(biāo)為0的元素,k指向p,那么*
(P++)的值為2,p指句數(shù)組中下標(biāo)為1的元素,k指向p,所以**k的值為4。
11、以下敘述中正確的是
A、如果p是指針變量,則*p表示變量p的地址值
B、如果p是指針變量,則&p是不合法的表達(dá)式
C、在對指針進(jìn)行加、減算術(shù)運算時,數(shù)字1表示I個存儲單元的長度
D、如果p是指針變量,則*p+l和*(p+l)的效果是一樣的
標(biāo)準(zhǔn)答案:C
知識點解析:移動指針是對指針變量加上或減去一個整數(shù),或通過賦值運算,使指
針變量指向相鄰的存儲單元。因此,只有當(dāng)指針指向一串連續(xù)的存儲單元時,指針
的移動才有意義。當(dāng)指針指向一串連續(xù)的存儲單元時,可以對指針變量進(jìn)行加上或
減去一個整數(shù)的運算,也可以對指向同一串連續(xù)存儲單元的兩個指針進(jìn)行相減的運
算。除此之外,不可以對指針進(jìn)行任何其他的算術(shù)運算。C語言提供了一個間接訪
問運算符(*),又稱間址運算符,它是一個單目運算符,優(yōu)先級比較高,高于普
通的算術(shù)運算符,但是低于()運算符,因此*p+1和*(p+1)的含義是不一樣。
當(dāng)指針變量中
12、有以下程序(注:字符2的人541碼值為97)111疝11(){m比*$={]血”};此
{printf(”%d”,*s%10);++s;}while(*s);}程序運行后的輸出結(jié)果是
A、abc
B、7890
C^979899
D、789
標(biāo)準(zhǔn)答案:D
知識點解析:因為小寫字符a,b,c的ASCII的值分別為97,98,99,而在dowhile
循環(huán)語句中,每次對字符的ASCII的值取余數(shù)并輸出,第一次循環(huán)輸出7,第二次
循環(huán)輸出8,第三次循環(huán)輸出9。
13、設(shè)有定義:char*c;以下選項中能夠使c正確指向一個字符串的是
A、charstr[]="stringu;c=str;
R、scanf("%s",c);
C、c=getchar();
D、*c="string";
標(biāo)準(zhǔn)答案:A
知識點解析:在題目的題干中定義了字符指針變量c,在選項A中,首先定義字符
數(shù)組str,然后再把字符數(shù)組str的首地址賦給字符指針變量c。所以選項A是正確
的。在選項D中,如果在定義字符指針c時,同時給c賦初值時,這樣的表達(dá)式是
正確的。而本題不是在定義指針c時,同時給c賦初值。
14、有以下程序#inckide<stdio.h>main(){intn,*p=NULL;*p=&n;printf("Input
n:");scanf("%d",&p);printf(noutputn:");printf("%d\nM,p);}該程序試囪通過指露p
為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯誤,以下語句正確的是
A、intn,*p=NULL;
*p=&n;
C、scanf("%d”,&p)
D、printf("%d\n",p);
標(biāo)準(zhǔn)答案:A
知識點解析:選項A表示在程序中,聲明定義變量語句“intn,*p=NULL;”定義了整
型變量n和指針變量p,并且指針變量p初始化為空。其他的語句都是錯誤的。其
中選項B,&n的地址應(yīng)存放到指針變量p中,而選項C中數(shù)據(jù)輸入項錯誤,選項
D輸出地址信息。
15、若有定義語句:doublea,*p=&a;以下敘述中錯誤的是
A、定義語句中的*號是一個說明符
13、定義語句中的p只能存放double類型變量的地址
C、定義語句中*p=&a把變量a的地址作為初值賦給指針變量p
D、定義語句中的*號是一個間址運算符
標(biāo)準(zhǔn)答案:D
知識點解析:在指針定義語句doublea,*p=&a中,指針變量p前面的頭號,只是一
個說明符,說明變量p是指針類型的變量。
16、若有以下定義intx|10],*pt=x;則對x數(shù)組元素的正確引用是
A、*(x+3)
B、*&x[10]
C^*(pt+10)
D、pt+3
標(biāo)準(zhǔn)答案:A
知識點解析:本題考查指針的調(diào)用。x代表x[10]數(shù)組的首地址指針,pt是指向
x[10]數(shù)組的首地址的指針,即兩者指向同一內(nèi)存單元。*(x+3)等同于x[3]。
17、有以下程序intfun1(doublea){returna*=a;}intfun2(doublex,doubley){double
a=0,b=0;a=fun1(x);b=fun1(y);return(int)(a+b);}main(){double
w;w=fun2(l.l,2.0);.......)程序執(zhí)行片輸出結(jié)果是
A、5.00
B、5
C、5.21
D、0.0
標(biāo)準(zhǔn)答案:A
知識點解析:子函數(shù)funl(doublea)的功能是返回a的平方值的整數(shù)部分。子函數(shù)
fun2(doublex,doubley)的功能是返回x的平方值的整數(shù)部分與y的平方值的整數(shù)部
分的和。又因為題中變量w的定義為double型,函數(shù)fun(2)的定義為int型,按照
各類數(shù)值型數(shù)據(jù)間的混合運算,整型數(shù)據(jù)被轉(zhuǎn)換為實型數(shù)據(jù)。所以雙精度型變量w
的值為5.00。
18、有以下程序voidfun(char*s){chara[10];strcpy(a,"STRING");s=a;}main()
{char*p=MPROGRAM";fun(p);printf(H%s\n",p);)程序運行后的輸出結(jié)果是(此處
□代表空格)
A、STRING□□口口
B、PROGRAM
C、STRINGDDD
D、STRING
標(biāo)準(zhǔn)答案:A
知識點解析:函數(shù)fun的主要功能是把字符串“STRING",存放到字符數(shù)組a中,s
指向該字符串,函數(shù)調(diào)用結(jié)束以后,釋放s和a指向的空間。主函數(shù)調(diào)用「un
(p),并不能更改p的值,因此p的指向沒有改變。
19、有以下程序voidtun(?ntn,int*s)(intf;it(n==l)*s=n+1;else{tun(n-1,
&f);*s=f;}}main(){intx=0;fun(4,&x);printf("%d\n'\x);}程序運行后的輸出結(jié)
果是
A、1
B、3
C、4
D、2
標(biāo)準(zhǔn)答案:D
知識點解析:函數(shù)fun為遞歸調(diào)用函數(shù),如果n的值為1,那么后面形參指向的空
間存放n+l,否則繼續(xù)計算fun(n-1)的值。調(diào)用分析過程如下:fun
(4,&x)-?fun(3,&x)-?fun(2,&x)-?fun(1,&x)在回歸的過程中,對于x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 墓地租賃合同范本
- 產(chǎn)品分銷激勵合同范本
- 房地產(chǎn)銷售合同風(fēng)險條款解析
- 微倉貨物保險合同協(xié)議
- 工地合同變更協(xié)議
- 賣產(chǎn)品合同范本
- 天貓客服合同范本
- 機(jī)關(guān)招合同工協(xié)議
- 機(jī)房維護(hù)合同范本
- 雜志宣傳合同范本
- 阿特拉斯空壓機(jī)-培訓(xùn)資料
- 2024年江蘇省海洋知識競賽備考試題庫(含答案)
- 高一語文經(jīng)典古代詩詞賞析
- 協(xié)助扣劃存款通知書
- 自動控制原理課程設(shè)計報告恒溫箱
- 江西d照駕駛員理論考試
- GB/T 30340-2013機(jī)動車駕駛員培訓(xùn)機(jī)構(gòu)資格條件
- GB/T 19215.1-2003電氣安裝用電纜槽管系統(tǒng)第1部分:通用要求
- GB/T 13298-2015金屬顯微組織檢驗方法
- 滴滴打車用戶出行習(xí)慣報告
- 保密管理-保密教育培訓(xùn)簽到簿
評論
0/150
提交評論