版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)家二級(jí)C語(yǔ)言機(jī)試(編譯預(yù)處理和指
針)模擬試卷第1套
一、選擇題(本題共41題,每題1.0分,共41分。)
1有以下程序#definePT3.5;#defineS(x)PT*x*x;main(){inta=l,b=2;
printf(,,%4.S(a+b));}程序運(yùn)行后的輸出結(jié)果是
A、31.5
7.5
C、程序有錯(cuò)無(wú)輸出結(jié)果
D、14
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:本題考查宏定義。預(yù)處理語(yǔ)句后面不能加分號(hào),因此程序有錯(cuò)工如果
沒(méi)力口分號(hào)的話S(a+b)=PT*a+b*a+b=3.5*1+2*1+2=7.5.
2、有以下程序#includc<stdio.h>#defineS(x)4*(x)*x+1yoidmain(){intk=5,j=2:
printf(,,%d\n,\S(k+j));}程序運(yùn)行后的輸出結(jié)果是
A、197
B、143
C、33
D、28
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:這道題涉及到帶參數(shù)的宏的定義和替換這個(gè)知識(shí)點(diǎn)。在程序中定義了
帶參數(shù)的宏S(x),當(dāng)在主函數(shù)中用參數(shù)k+j調(diào)用宏s時(shí),根據(jù)宏替換的原則,則
S(k+j)=S(5+2)=4*7*5+2+1=143。
3、有以下程序#includeVstdio.h>#defineSUB(a)(a)-(a)main(){inta=2,b=3,
c=5,d;d=SUB(a+b)*c:printf「%dl\n",d);)程序運(yùn)行后的輸出結(jié)果是
A、-12
B、0
C、10
D、-20
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:本題主要考查的是宏替換,在程序中執(zhí)行d=sub(a+b)+c這條語(yǔ)句
時(shí),首先要進(jìn)行宏替換,依據(jù)宏suB(a)的定義可知,上面這條語(yǔ)句替換為
d=(a+b).(a+b)+c,因?yàn)槌朔ǖ膬?yōu)先級(jí)比減法的優(yōu)先級(jí)高,所以先進(jìn)行乘法運(yùn)算,
即d=5.5*5=20。
4、有下列程序:#include<stdio_h>#deftneN5#defineMN+l#definefix)(x*M)
main(){intil,i2:il=f(2);i2=f(l+l);printff'%d%d\n'',il,i2);}程序的運(yùn)
行結(jié)果是
A、127
B、1212
C、1111
D、117
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:在本題中,定義了3個(gè)宏定義語(yǔ)句,分別是:#dcfincN5>
#defineMN+5和#<1?同?心)^*乂),所以根據(jù)C語(yǔ)言的宏替換規(guī)則,我們可知,
f(2)=2*N+l=2*5+l=l1,f(l+l)=l+l*N+l:1+1*5+1=7。
5、若程序中有宏定義行:#dcfincNIOO則以下敘述中正確的是
A、宏定義行中定義了標(biāo)識(shí)符N的值為整數(shù)100
B、上述宏定義行實(shí)現(xiàn)將100賦給標(biāo)示符N
C、在運(yùn)行時(shí)用100替換標(biāo)識(shí)符N
D、在編譯程序?qū)源程序進(jìn)行預(yù)處理時(shí)用100替換標(biāo)識(shí)符N
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:在C語(yǔ)言中,凡是以印'、號(hào)開(kāi)頭的行,都稱為''編譯預(yù)處理工其含義
是在c編譯程序?qū)源程序進(jìn)行編譯前,由編譯預(yù)處理程序?qū)@些編譯預(yù)處理命令
進(jìn)行處理的過(guò)程。由#€16自加定義的宏就是編譯預(yù)處理命令。C程序在進(jìn)行編譯之
前,都要先對(duì)程序中所有出現(xiàn)的“宏名”,都用宏定義中的替換文本進(jìn)行替換。
6、有以下程序#include〈sldio.h>#deflneN2#defineMN+l
#defineNUM(M+l)*M/2main(){printf(,,%d\n,,?NUM);)程序運(yùn)行后的輸出結(jié)果
是
A、4
R、8
C、9
D、6
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:宏展開(kāi)以后NuM為(2+1+1)*2+1/2,計(jì)算以后值為8。注意在進(jìn)行宏
展開(kāi)的時(shí)候,千萬(wàn)不要試圖計(jì)算,展開(kāi)以后再進(jìn)行計(jì)算。
7、下面選項(xiàng)中關(guān)于編譯預(yù)處理的敘述正確的是
A、凡是以#}號(hào)開(kāi)頭的行,都被稱為編譯預(yù)處理命令行
B、預(yù)處理命令行必須使用分號(hào)結(jié)尾
C、預(yù)處理命令行不能出現(xiàn)在程序的最后一行
D、預(yù)處理命令行的作用域是到最近的函數(shù)結(jié)束處
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:在C語(yǔ)言中,凡是以號(hào)開(kāi)頭的行,都稱為編譯預(yù)處理命令行。這
些預(yù)處理命令組成的預(yù)處理命令行必須在一行的開(kāi)頭以“#”號(hào)開(kāi)始,每行的末尾不
能用“;”號(hào)結(jié)束,以區(qū)別于C語(yǔ)句、定義和說(shuō)明語(yǔ)句。根據(jù)需要,命令行可以出現(xiàn)
在程序的任何一行的開(kāi)始部位,其作用一直持續(xù)到源文件的末尾。
8、以下敘述中正確的是
A、在包含文件中,不得再包含其他文件
B、include命令行不能出現(xiàn)在程序文件的中間
C、在一個(gè)程序中,允許使用任意數(shù)量的#include命令行
D、雖然包含文件被修改了,包含該文件的源程序也可以不重新進(jìn)行編譯和連接
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:熱ncludc文件包含命令,使用時(shí)應(yīng)注意以下5個(gè)規(guī)則:①包含文件
的用加111<1。命令行通常應(yīng)書(shū)寫(xiě)在所用源程序文件的開(kāi)頭,故有時(shí)也把包含文件稱
作“頭文件”。頭文件名可以由用戶指定,其后綴不一定用“.h”。②包含文件中,
一般包含有一些公用的#加行起命令行、外部說(shuō)明或?qū)?庫(kù))函數(shù)的原型說(shuō)明。③當(dāng)
包含文件修改后,對(duì)包含該文件的源程序必須重新進(jìn)行編譯連接。④在一個(gè)程序
中,允許有任意多j#include命令行。⑤在包含文件中還可以包含其他文件。
9、有以下程序#includeVstdio.h>#include<stdio.h>intfun(intn){int*p;
p=(int*)malloc(sizeof(int));*p=n;relurn*p;}main(){inta;a=fun(10);
printfr%d\n”.a+fun(10));)程序的運(yùn)行結(jié)果是
A、10
B、20
C、0
D、出錯(cuò)
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(shù)fun(intn)的功能是在內(nèi)存中每次動(dòng)態(tài)的申請(qǐng)一個(gè)整型變量的存儲(chǔ)
空間,把整型變量n的值存入這個(gè)存儲(chǔ)空間中。所以當(dāng)在主函數(shù)中執(zhí)行輸出語(yǔ)句
時(shí),a+fun(10)的值等于20。
10>有以下程序yoidfun(int*pl,int*p2,int*S){s=(int*)malloc(sizeof(int));
*S=*pl+*(p2++);)main(){inta[2]={1,2},b[2]={10,20),*s=a;fun(a,b,S);
printf("%dhaL*S);}程序運(yùn)行后的輸出結(jié)果是
A、10
B、11
C、2
D、1
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:主函數(shù)中定義指針s指向數(shù)組a,調(diào)用fun函數(shù),首先是實(shí)參傳給形
參,因此pl指向a,p2指向b,s指向a,即*§的值為1。流程到調(diào)用函數(shù)fun執(zhí)
行,首先更改s的指向?yàn)樾路挚臻g的首地址,表達(dá)式*s=*pl+*(p2++),取pl指向數(shù)
據(jù)位1,加上p2指向數(shù)據(jù)10,p2后移,存放到s指向的空間中11.流程結(jié)束,形
參s和pl,p2撤銷,存入s指向空間的數(shù)據(jù)丟失,主函數(shù)輸出s指向數(shù)據(jù)仍然是
lo
14、設(shè)有某函數(shù)的說(shuō)明為inl*func(inta[10],intn);則下列敘述中,正確的是
A、說(shuō)明中的a[10]寫(xiě)成a[]或*a效果完全一樣
B、形參a對(duì)應(yīng)的實(shí)參只能是數(shù)組名
C、func的函數(shù)體中不能對(duì)a進(jìn)行移動(dòng)指針(如a++)的操作
D、只有指向10個(gè)整數(shù)內(nèi)存單元的指針,才能作為實(shí)參傳給a
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:函數(shù)func為返同值為指針的函數(shù),有兩個(gè)形參,形參數(shù)組a為指針
變量,保存實(shí)參數(shù)組的首地址,其元素個(gè)數(shù)由實(shí)參數(shù)組決定,因此說(shuō)明中的a[10]
寫(xiě)成叫或*a效果完全一樣。
15、設(shè)有定義:imx=0,*p;緊接著的賦值語(yǔ)句正確的是
A、*p=NULL;
B、p=NULL;
C、p=x;
D^*p=x;
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:定義指針變量時(shí),必須將指針變量初始化為NULL(為空),否則,如
果不賦給它地址,系統(tǒng)會(huì)隨機(jī)給它分配一個(gè)地址。
16、設(shè)已有定義:floatx;則以下對(duì)指針變量P進(jìn)行定義且賦初值的語(yǔ)句中正確的
是
A、int*p=(float)x;
B、float*p=&x;
C、floatp=&x;
D、float*p=1024:
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:定義指針變量的一般形式為:類型名*指針變量名1,*指針變量名
2............?對(duì)一個(gè)指針變量賦值要通過(guò)求地址運(yùn)算符(&)獲得變量的地址值.然
后把此地址值賦給指針變量。因而在選項(xiàng)A的表達(dá)式中,賦值號(hào)的左邊表示定義
了指針變量P,而右邊表示求變量x的地址值。
17、下面選項(xiàng)中的程序段,沒(méi)有編譯錯(cuò)誤的是
A、char*sp?s[10|;sp=''Hel1o'';
B、char*sp,s[10];S=''Helk)'';
C^charstH[10]=''computer'',str2[10];str2=strl:
D、charmark|];mark=''PROGRAM”;
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:選項(xiàng)B中數(shù)組名為常量,不能賦值,選項(xiàng)C字符數(shù)組之間無(wú)法完成
賦值操作,選項(xiàng)D和選項(xiàng)B相同,無(wú)法對(duì)數(shù)組進(jìn)行賦值。
18、有以下程序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
知識(shí)點(diǎn)解析:程序使整型指針pl、p2、p3指向a、b、c值所存放的地址空間。然
后再將指針變量*pl、*p2中的值的乘積賦給指針變量*p,即賦給變量c,輸出c的
值3。
19、若有定義語(yǔ)句:intycar=2009,"p=&year;以下不能使變量year中的值增至
2010的語(yǔ)句是
A、(*p)++;
B、++(*p);
C、*p++;
D^*p+=l;
標(biāo)準(zhǔn)答案:c
知識(shí)點(diǎn)解析:由于自加運(yùn)算符++的運(yùn)算級(jí)高于間接運(yùn)算*的運(yùn)算級(jí),所以選項(xiàng)A的
表達(dá)式*p++不能使變量:year中的值增至2010。
20、以下敘述中正確的是
A、如果P是指針變量,則*p表示變量p的地址值
B、如果p是指針變量,則&p是不合法的表達(dá)式
C、在對(duì)指針進(jìn)行加、減算*運(yùn)算時(shí),數(shù)字1表示1個(gè)存儲(chǔ)單元的長(zhǎng)度
D、如果P是指針變量,則*p+1和*(p+l)的效果是一樣的
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:移動(dòng)指針是對(duì)指針變量加上或減去一個(gè)整數(shù),或通過(guò)賦值運(yùn)算,使指
針變量指向相鄰的存儲(chǔ)單元。因此,只有當(dāng)指針指向一串連續(xù)的存儲(chǔ)單元時(shí),指針
的移動(dòng)才有意義°當(dāng)指引指向一串連續(xù)的存儲(chǔ)單元時(shí),可以對(duì)指針變量進(jìn)行加卜或
減去一個(gè)整數(shù)的運(yùn)算,也可以對(duì)指向同一串連續(xù)存儲(chǔ)單元的兩個(gè)指針進(jìn)行相減的運(yùn)
算。除此之外,不可以對(duì)指針進(jìn)行任何其他的算*運(yùn)算。C語(yǔ)言提供了一個(gè)間接訪
問(wèn)運(yùn)算符(*),乂稱間址運(yùn)算符,它是一個(gè)單日運(yùn)算符,優(yōu)先級(jí)比較高,高于普通
的算*運(yùn)算符,但是低于()運(yùn)算符,因此*p+l和*(p+l)的含義是不一樣。當(dāng)指針變
量中存放了一個(gè)確切的地址值時(shí),就可以用“簡(jiǎn)接訪問(wèn)運(yùn)算符”通過(guò)指針來(lái)引用該地
址的存儲(chǔ)單元。
21、設(shè)有定義:char*c:以下選項(xiàng)中能夠使C正確指向一個(gè)字符串的是
A、charstr[]=,,string,\c=str:
scanR"%s,',c);
C、c=getchar();
D、*c=''string'';
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:在題目的題干中定義了字符指針變量c,在選項(xiàng)A中,首先定義字符
數(shù)組str,然后再把字符數(shù)組str的首地址賦給字符指針變量c。所以選項(xiàng)A是正確
的。在選項(xiàng)D中,如果在定義字符指針c時(shí),同時(shí)給c賦初值時(shí),這樣的表達(dá)式是
正確的。而本題不是在定義指針c時(shí),同時(shí)給c賦初值。
22、有以下程序#includeVstdio.h>main(){intn,*p=NULL;*p=&n;
print^^Inputn:'');scanf(''%d'',&p);printf(''outputn;'');printff'%
d\n-,p);}該程序試圖通過(guò)指針P為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯(cuò)誤,
以下語(yǔ)句正確的是
A、intn,*p=NULL;
B、*p=&n;
C、scanfT'%d'',&p)
D、printf(,,%d\n,,?p);
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:選項(xiàng)A表示在程序中,聲明定義變量語(yǔ)句“intn,+p=NuLL;”定義了
整型變量n和指針變量p,并且指針變量p初始化為空。其他的語(yǔ)句都是錯(cuò)誤的。
其中選項(xiàng)B,&n的地址應(yīng)存放到指針變量p中,而選項(xiàng)C中數(shù)據(jù)輸入項(xiàng)錯(cuò)誤,選
項(xiàng)D輸出地址信息。
23、若有以下定義定*pt=x;則對(duì)x數(shù)組元素的正確引用是
A、*(x+3)
B、*&x[10]
C、*(pt+10)
D、pt+3
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:本題考查韋針的調(diào)用。x代表x[10]數(shù)組的首地址指針,pt是指向
x[10]數(shù)組的首地址的指針,即兩者指向同一內(nèi)存單元。*(x+3)等同于x[3]。
24、有以下程序yoidfun(char*S){chara[l0];strcpy(a,''STRING'');S=a;}
main(){char*p=''PROGRAM,';fun(P);printf("%s\nLp);)程序運(yùn)行后的輸出
結(jié)果是(此處□代表空格)
A^STRNG□□口口
B、PROGRAM
C、STRING□□口
D、STRING
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是把字符串-STRINGS存放到字符數(shù)組a中,
s指向該字符串,函數(shù)調(diào)用結(jié)束以后,釋放s和a指向的空間。主函數(shù)調(diào)用
fun(p),并不能更改p的值,因此p的指向沒(méi)有改變。
25、有以下程序#includeVsldio.h>intfun(char*Si{char*p=s;while(*P!=0)p++;
retum(p-s);}main(){printf(,,%dkn,\fun(''goodbey!''));)程序的輸出結(jié)果是
A、6
B、8
C、0
D、7
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是計(jì)算字符串中實(shí)際字符的個(gè)數(shù),因此
“goodbey!”含有字符為8,返回值為8。
26、有下列程序:yoidflint*q)finti=O:for(;iV5;i++)(*q)++;}main()
{inta[5J={l,2,3,4,5J,i;f(a);for(i=0;i<5;i++)pnntf(''%d,",a[ij);)
程序運(yùn)行后的輸出結(jié)果是
A、2,2,3,4,5,
B、6,2,3,4,5,
C、I,2,3,4,5,
D^2,3,4,5,6
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:voidf(int*q)函數(shù)的功能是對(duì)(*4)的值連續(xù)5次自加1。在main()函數(shù)
中f(a)語(yǔ)句把一維數(shù)組a[5]的首地址作為實(shí)參,傳遞給函數(shù)f(int*q)的形參q,然后
存函數(shù)f(ini?q)內(nèi),a[0]連續(xù)5次自加1后,a|0|的值就變成6。所以輸出為6,2,3,
4,5o
27、以下函數(shù)按每行8個(gè)輸出數(shù)組中的數(shù)據(jù):yoidfun(int*w,intn){inti:for(i=0;
,,,,,,,
i<n;i++){printf(%d\w[i]);}printf(\n);}下劃線處應(yīng)填入的語(yǔ)
句是
,,,,
A、if(i%8=0)printf(\n):
B、if(i/8=0)continuc;
C、if(i/8=0)printf(''\n'');
D、if(i%8=0)continue:
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:本題考查判斷語(yǔ)句與循環(huán)語(yǔ)句。欲使每行輸出8個(gè)數(shù)據(jù),則必然使用
取余運(yùn)算,當(dāng)i%8=0時(shí)先輸出一個(gè)換行符冉輸出字符。選項(xiàng)D中,continue語(yǔ)句
的作用是停止執(zhí)行本次循環(huán)位于continue后面的語(yǔ)句,而進(jìn)入下一次循環(huán)。
28、有以卜程序#inckide〈stdioh>yoidflint*p,int*q);main(){intm=l,n=2,*r=
&m;f(r,&n);printf(''%d,%d'',m,n);}yoidflint*p,int*q){P=p+1:
*q=*q+l;)程序運(yùn)行后的輸出結(jié)果是
A、2,3
B、1,3
C、I,4
D、1,2
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:小題考查函數(shù)的調(diào)用與指針。[un()函數(shù)的作廠乃是:使指針p指向
原來(lái)所指變量的下一個(gè)變量,使q指針指向的值加1。主函數(shù)中,指針r指向
調(diào)用fun()函數(shù)的結(jié)果是,使r指向地址位于m后面的變量,使位于n的地址上的
變量(就是n)的值加1,因此,結(jié)果為1,3。
29、有下列程序:yoidflintb[]){inti;for(i=2;i<6;i++)b[i]*=2;}main()
{inta[10]={l,2,3,4,5,6,7,8,9,10),i;tla):for(i=0:i<10,
i++)printf「%d,",a[i]);}程序運(yùn)行后的輸出結(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í)點(diǎn)解析:函數(shù)voidf(inlb|])的功能是對(duì)數(shù)組b[]中第2個(gè)到第5個(gè)元素的值逐個(gè)
擴(kuò)大2倍。所以在main()函數(shù)中,f(a)語(yǔ)句的作用是對(duì)數(shù)組a[10]中從a⑵到a[5]的
各個(gè)數(shù)字乘以2,因而數(shù)組a[10]的元素就變成了{(lán)1,2,6,8,10,12,7,89
10}o
30,若有以下程序#inckideVstdio.h>yoidsp(int*a)(intb=2:a=&b:*a=*a^2:
printf(''%d,,',*a);}main(){intk=3,*P=&k;sp(p);printf(''%d,%d\n'',
k,*p);)則程序的輸出結(jié)果是
A、4,3,4
B、4,3,3
C、6,3,6
D>6,6?6
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:土函數(shù)中定義指針變量p指向k,調(diào)用函數(shù)sp(p),將k的地址傳遞給
形參指針a.函數(shù)轉(zhuǎn)到sp運(yùn)行,a指向b的地址,表達(dá)式*a=*a*2.相當(dāng)于h=b*2,
得到*a的數(shù)據(jù)4輸出。函數(shù)調(diào)用結(jié)束,此時(shí)a和b的空間撤銷,而對(duì)實(shí)參k和p的
值并沒(méi)有改變,仍舊是3。
31、若有以下程序#includeVstdio.h>int*f(int*s,int*t){int*k;if(*S<*t){k=s;
s=t;t=k;)returns;)main(){inti=3,3=5,*p=&i,*q=&j,*r;r=f(p,q);
printfr%d,%d,%d,%d,%d\n”,i,j,*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í)點(diǎn)解析:本題考查了返回值為指針的函數(shù),函數(shù)f的土要功能為第一個(gè)參數(shù)小
于第二個(gè)參數(shù),那么交疾指針的指向,這對(duì)于實(shí)參指向的數(shù)據(jù)時(shí)沒(méi)有影響的。最后
返回比較大的元素的地址。主函數(shù)中p指向i,q指向j,調(diào)用尸f(p,q),返同q的
地址,因此*p=3,*q=5,*r=5o
32、若有以下程序#includeVstdio.h>intk=7,m=5:yoidflint**S){int*t=&k:
s=&t;*s=&m;printff'%d,%d,%d,k,*t,**s);}main(){inti=3,*p=
&i,**r=&p;fir);printf(''%d,%d,%d\n”,i.*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í)點(diǎn)解析:本題考查二級(jí)指針作為函數(shù)的參數(shù),可以通過(guò)函數(shù)調(diào)用來(lái)改變主函數(shù)
中一級(jí)指針的指向。主函數(shù)中指針變量p指向i,r指向p,調(diào)用f函數(shù),形參指針
s指向p,流程轉(zhuǎn)到f函數(shù)執(zhí)行,指針變量指向k,s指向3此時(shí)更改了s的指i,
uj,s相向了3更改了s指向的地址空間內(nèi)容為m的地址,同時(shí)t也指向變量m,
因此**s的值為m的值,*1為m的值,k為7。流程返回到主函數(shù),沒(méi)有對(duì)主函數(shù)
空間的數(shù)據(jù)和指向作出更改,因此全部為3。
33、有以卜程序#include<stdiO-h>intfuna(inta,intb){retuma+b;)intfunb(inta,
intb){returna-b;)intSSS(int(*t)O,intx,intY){retum((*t)(x,y));}main(){intx;
x=sss(funa,9,3):x+=sss(funb,8,3);printfi["%dkn'',x);)程序運(yùn)行后的輸出
結(jié)果是
A、17
B、23
C、24
D、22
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:函數(shù)funa的功能計(jì)算兩個(gè)數(shù)據(jù)的和,funb的功能計(jì)算兩個(gè)數(shù)據(jù)的
差,函數(shù)sss中利用指向函數(shù)的指針作為函數(shù)的參數(shù),可以往調(diào)用的時(shí)候,根據(jù)接
收的函數(shù)地址來(lái)決定調(diào)用那一個(gè)函數(shù)。土函數(shù)中調(diào)用x=sss(funa,9,3),將funa
函數(shù)的地址傳遞給3因此sss函數(shù)成為求兩個(gè)數(shù)據(jù)的和12,繼續(xù)將funb函數(shù)地址
傳給I,求兩個(gè)數(shù)據(jù)差為5,和s累加后結(jié)果為17。
34、有以下程序yoidfun(int**P,int*q){intt;t=*p;*P=*q;*q=t;*q=*p;)
main(){inta=O,b=9;fun(&a,&b);printf("%d%d'n",a,b);}程序的輸出結(jié)
果是
A、00
B、99
C、90
D、9
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(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。
35、有以卜.程序yoidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;)main()
{char*sl=,,abc'\*s2=''l23";swap(sl,s2);printf(''%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í)點(diǎn)解析:函數(shù)voidswap(char*x,char*y)的功能是交換兩個(gè)字符*x和*y中的內(nèi)
容。在主函數(shù)中字符指針S1指向字符串-b(f,s2指向字符串”23、所以函數(shù)
swap(sl,s2)的執(zhí)行結(jié)果就是字符句和”相互交換。
36、有以下函數(shù)函tfun(char*s){char*t=s;while(*t++);retum(t—s);)該函數(shù)的力能
是
A、比較兩個(gè)字符串的大小
B、計(jì)算S所指字符串的長(zhǎng)度
C、計(jì)算S所指字符串占用內(nèi)存字節(jié)的個(gè)數(shù)
D、將S所指字符串復(fù)制到字符串t中
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:在函數(shù)fun(char*s)中,首先用字符指針變量[指向s,而循環(huán)語(yǔ)句
while(*t++):的功能是使指針變量t指向字符串變量s的末尾,這時(shí)退出循環(huán),因
而語(yǔ)句retum(t-s);返回的就是字符串s所指字符串的長(zhǎng)度。
37、有以下程序#includeVstdio.h>yoidfun(char**p){++p;printR''%sha'',
*p);}main(){char*a[]=(''Moming",''Anemooif'JEyening",''Night'');fun(a);}
程序的運(yùn)行結(jié)果是
A、ffemoon
Morning
C、oming
D、Afternoon
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:在程序中,指針的指針變量a和p都是指向字符串的指針。執(zhí)行
fun(a)語(yǔ)句時(shí),p指向的是字符串?dāng)?shù)組a的第一個(gè)字符串“Moming”,p自加1之
后,加指向了字符串?dāng)?shù)組a的第2個(gè)字符串“Aftemoon”。
38、有以卜.程序#includeVsldio.h>voidfun(char*a,char%){while(*a='*')a++;
while(*b=*a){b++;a++:)}main(){char*s=',*****a*b****'',t[80];fun(s,t);
puts(t);)程序的運(yùn)行結(jié)果是
A、a*b
B、*****a*b
c、a%****
D、ab
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:主函數(shù)main。定義了指向字符串的指針和一個(gè)字符數(shù)組,接著調(diào)用
fun(s,t)函數(shù),進(jìn)行實(shí)參向形參傳遞,函數(shù)fun()第一個(gè)while語(yǔ)句判斷電中的值為
“*、’時(shí)繼續(xù)掃描,當(dāng)遇到不是“”時(shí)結(jié)束,接著第二個(gè)while循環(huán)語(yǔ)句,將*a中從“a”
開(kāi)始的后續(xù)所有字符都賦予*b,也就是t[80]中的內(nèi)容為"a*b*****。
39、有以下程序#includeVstdio.h>#include<string.h>voidfun(charS[][10],
intn){chart;inti,j;for(i=O;i<n-l;i++)for(j=i+l.j<nO++)if(s[i][O]>
s[j][O]){t=s[i][O];s[i][O]=s[j][O];sD][O]=t;))main()
{charss[5][10]={>,bcc,,,,,bbcc,\''xy",''aaaacc'',''aabcc'');fun(ss,5);printR"%
s,%s\ll",ss[O],ss[4]);}程序的運(yùn)行結(jié)果是
A、aaaacc,xy
B、bcc,aabcc
C>xy,aaaacc
D、aabcc,bcc
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:函數(shù)fun(chars口[10],intn)通過(guò)兩重for循環(huán)語(yǔ)句,比較二維字符數(shù)組
的每個(gè)字符串的首字符大小,如果前一個(gè)字符串首字符大于后一個(gè)字符串的
首字符,則交換這兩個(gè)字符串的首字符。在主函數(shù)中,語(yǔ)句fun(ss,5)的作用是對(duì)
二維字符數(shù)組ss[5][10]的5個(gè)字符串的首字符進(jìn)行從小到人的排序,不影響各個(gè)字
符串另外的字符。所以排序結(jié)束后,5個(gè)字符串的第一個(gè)字符依次變?yōu)閍、a、b、b
和x;最后輸出第1個(gè)和第4個(gè)字符串。
40、有以下程序#inchideV*tdio.h>#inchide<string_h>voidfun(char*W.intm)
{chars,*pl,*p2;pl=w;p2=w+m-l;while(pl<p2){s=*pl;*pl=*p2;*p2=
s;pl++;p2-;}}main(){lchara[]=<c1234564<;fun(a,strlen(a));puts(a);}
A、116611
B、161616
C、654321
D、123456
標(biāo)準(zhǔn)答案:c
知識(shí)點(diǎn)睛析:函數(shù)fun的功能是將字符串w中的元素從大到小進(jìn)行排列,所以在主
函數(shù)中調(diào)用函數(shù)fun后,字符串a(chǎn)的元素從大到小進(jìn)行了排列。
41、有以下程序#includeVstdio.h>#include<sting-h>voidfun(int*pl,int*p2,
int*s){s=(int*)calloc(l,sizeof(int));*s=*pl+*p2;free(s);)
main(){inta[21={l,2),b[2]={40?50),*q=a;fun(a,b,q);printf("%d\n”,
*q);)程序運(yùn)行后的輸出結(jié)果是
A、41
B、42
C、0
D、1
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:主函數(shù)定義數(shù)組a,b,q指向數(shù)組a,調(diào)用fun函數(shù)以后形參接收實(shí)
參的數(shù)據(jù),pl和p2指向數(shù)組a和b,同時(shí)s指向數(shù)組a,在fun函數(shù)中改變了s的
指向和賦值,但是在程序調(diào)用結(jié)束之間形參空間全部釋放,因此對(duì)于s的指向改動(dòng)
不會(huì)對(duì)主函數(shù)參數(shù)構(gòu)成影響。因此主函數(shù)中數(shù)去+q的值仍然為1。
家二級(jí)C語(yǔ)言機(jī)試(編譯預(yù)處理和指
針)模擬試卷第2套
一、選擇題(本題共39題,每題1.0分,共39分。)
1、有以下程序#definePT3.5;#defineS(x)PT*x*x;main(){inta=l,b=2;
printf(n%4.lf\nM,S(a+b));)程序運(yùn)行后的輸出結(jié)果是
A、31.5
B、7.5
C、程序有錯(cuò)無(wú)輸出結(jié)果
D、14.0
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:本題考查宏定義。預(yù)處理語(yǔ)句后面不能加分號(hào),因此程序有錯(cuò)」如果
沒(méi)力口分號(hào)的話$(a+h)?PT*a+b*a+b=3,5*1+2*1+2=7.5。
2、有以下程序#include#defineS(x)4*(x)*x+1voidmain。{intk=5,j=2;printf(H%
d\n",S(k+j));}程序運(yùn)行后的輸出結(jié)果是
A、197
B、143
C、33
D、28
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:這道題涉及到帶參數(shù)的宏的定義和替換這個(gè)知識(shí)點(diǎn)。在程序中定義了
帶參數(shù)的宏S(x),當(dāng)在主函數(shù)中用參數(shù)k+j調(diào)用宏S時(shí),根據(jù)宏替換的原則,則
S(k+j)=S(5+2)-4*7*5+2+1=143。
3、有以下程序#include#definesuB(a)(a)-(a)main(){inta=2,b=3,c=5,d;
d=SUB(a+b)*c:pfintfC%d\n",d);}程序運(yùn)行后的輸出結(jié)果是
A、-12
B、0
C、10
D、-20
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:本題主要考查的是宏替換,在程序中執(zhí)行d=sub(a+b)*c這條語(yǔ)句
時(shí),首先要進(jìn)行宏替換,依據(jù)宏SUB(a)的定義可知,上面這條語(yǔ)句替換為
d=(a+b)-(a+b)*c,因?yàn)槌朔ǖ膬?yōu)先級(jí)比減法的優(yōu)先級(jí)高,所以先進(jìn)行乘法運(yùn)算,即
(1=5-5*5=20。
4、有下列程序:#include#defineN5#defineMN+l#definef(x)(x*M)main(){int
il,i2;il=f(2);i2=f(l+l);printf(M%d%d\n",il,i2);}程序的運(yùn)行結(jié)果是
A、127
B、1212
C、1111
D、117
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:在本題中,定義了3個(gè)宏定義語(yǔ)句,分別是:#defineN5.#defineM
N十5和#加行限f(x)(x*M),所以根據(jù)C語(yǔ)言的宏替換規(guī)則,我們可知,
f(2)=2*N+l=2*5+l=ll,f(l+l)=l+l*N+l=l+l*5+l=7o
5、若程序中有宏定義行:#defineN100則以下敘述中正確的是
A、宏定義行中定義了標(biāo)識(shí)符N的值為整數(shù)100
B、上述宏定義行實(shí)現(xiàn)將100賦給標(biāo)示符N
C、在運(yùn)行時(shí)用100替換標(biāo)識(shí)符N
D、在編譯程序?qū)源程序進(jìn)行預(yù)處理時(shí)用100替換標(biāo)識(shí)符N
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:在C語(yǔ)言中.凡是以“群”號(hào)開(kāi)頭的行,都稱為“編譯預(yù)處理”.其含義
是在C編譯程序?qū)源程序進(jìn)行編譯前,由編譯預(yù)處理程序?qū)@些編譯預(yù)處理命
令進(jìn)行處理的過(guò)程。由#11?萬(wàn)優(yōu)定義的宏就是編譯預(yù)處理命令。C程序在進(jìn)行編譯
之前,都要先對(duì)程序中所有出現(xiàn)的“宏名”,都用宏定義中的替換文本進(jìn)行替換。
6、有以下程序include#defineN2#defineMN+l#defineNUM(M+1)*M/2
main(){printfC%d\n",NUM);}程序運(yùn)行后的輸出結(jié)果是
A、4
B、8
C、9
D、6
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:宏展開(kāi)以后NUM為(2+l+l)*2+l/2,計(jì)算以后值為8。注意在進(jìn)行
宏展開(kāi)的時(shí)候,千萬(wàn)不要試圖計(jì)算,展開(kāi)以后再進(jìn)行計(jì)算。
7、下面選項(xiàng)中關(guān)于編譯預(yù)處理的敘述正確的是
A、凡是以#號(hào)開(kāi)頭的行,都被稱為編譯預(yù)處理命令行
B、預(yù)處理命令行必須使用分號(hào)結(jié)尾
C、預(yù)處理命令行不能出現(xiàn)在程序的最后一行
D、預(yù)處理命令行的作用域是到最近的函數(shù)結(jié)束處
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:在C語(yǔ)言中,凡是以“#”號(hào)開(kāi)頭的行,都稱為編譯預(yù)處理命令行。這
些預(yù)處理命令組成的預(yù)處理命令行必須在一行的開(kāi)頭以“撐”號(hào)開(kāi)始,每行的末尾不
能用“;”號(hào)結(jié)束,以區(qū)別于C語(yǔ)句、定義和說(shuō)明語(yǔ)句。根據(jù)需要,命令行可以出
現(xiàn)在程序的任何一行的開(kāi)始部位,其作用一直持續(xù)到源文件的末尾。
8、以下敘述中正確的是
A、在包含文件中,不得再包含其他文件
B、#include命令行不能出現(xiàn)在程序文件的中間
C、在一個(gè)程序中,允許使用任意數(shù)量的include命令行
D、雖然包含文件被修改了,包含該文件的源程序也可以不重新進(jìn)行編譯和連接
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:include文件包含命令,使用時(shí)應(yīng)注意以下5個(gè)規(guī)則:①包含文件
的#由011加命令行通洛應(yīng)書(shū)寫(xiě)在所用源程序文件的開(kāi)頭,故有時(shí)也把包含文件稱作
“頭文件頭文件名可以由用戶指定,其后綴不一定用“.h”。②包含文件中,
般包含有一些公用的#deflne命令行、外部說(shuō)明或?qū)?庫(kù))函數(shù)的原型說(shuō)明。③當(dāng)包
含文件修改后,對(duì)包含該文件的源程序必須重新進(jìn)行編譯連接。④在一個(gè)程序
中,允許有任意多j#include命令行。⑤在包含文件中還可以包含其他文件。
9、以下程序#include#includemain。(int*a,9*c;
a=b=c=(int*)malloc(sizeof(int));*a=l;*b=2,*c=3;a=b;printf("%d,%d,%(1
\n\*a,*,*c);}程序運(yùn)行后的輸出結(jié)果是
A、2.2.3
B、3,3,3
C、1,2,3
D、1,1,3
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:a-b==c=(int*)mallet(sizeo(int));含義為申請(qǐng)了一個(gè)整型的存儲(chǔ)空間,
讓指針a,b,c分別指向它,*b=2;*c=3;語(yǔ)句的含義為所申請(qǐng)的整型存儲(chǔ)空
間的內(nèi)容,*c=3最后執(zhí)行導(dǎo)致存儲(chǔ)空間的內(nèi)容為3。a=b的含義讓指針a也指向指
針b所指向的存儲(chǔ)空間,a,b,c都指向整型的存儲(chǔ)空間,里邊的內(nèi)容為3。
10、有以下程序段int*p;p=malloc(sizeof(int));若要求使p指向一個(gè)int
型的動(dòng)態(tài)存儲(chǔ)單元,在橫線處應(yīng)填入的是
A、(int*)
int
C、int*
D、(*int)
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:ANSIC標(biāo)準(zhǔn)規(guī)定malloc函數(shù)返回值的類型為void*。使用形式為:
malloc(size),其中size的類型為unsignedintomalloc函數(shù)用來(lái)分配size個(gè)字節(jié)的
存儲(chǔ)區(qū),返回一個(gè)指向存儲(chǔ)區(qū)首地址的基類型為void的地址。若沒(méi)有足夠的內(nèi)存
單元供分配,函數(shù)返回空(NULL)??梢酝ㄟ^(guò)強(qiáng)制類型轉(zhuǎn)換將返回值轉(zhuǎn)換為需要類
型的地址。
11、設(shè)有以下函數(shù):voidfun(intn,char*s){……)則下面對(duì)函數(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í)點(diǎn)解析:函數(shù)指針的定義形式是:數(shù)據(jù)類型標(biāo)識(shí)符(*指針變量名)():
void(*pf)()定義了一個(gè)沒(méi)有返回值的函數(shù)指針pf,在給函數(shù)指針變量賦值時(shí),只需
給出函數(shù)名而不必給出參數(shù)。所以給pf給賦值時(shí),把函數(shù)名fun賦給pf即可。
12、以下敘述中正確的是
A、指針變量只能通過(guò)求地址運(yùn)算符(&)來(lái)獲得地址值
B、語(yǔ)句p=NULL;與p=\0:是等價(jià)的語(yǔ)句
C>int*pl;int**p2;int*p3;都是合法的定義指針變量的語(yǔ)句
D、語(yǔ)句p=NULL;執(zhí)行后,指針P指向地址為0的存儲(chǔ)單元
標(biāo)準(zhǔn)答案:C
知識(shí)點(diǎn)解析:指針變量定義形式為:類型*指針變量名;其中*號(hào)的個(gè)數(shù)決定了幾
級(jí)指針,指針變量賦地址值的方式有3種方式:①通過(guò)求地址運(yùn)算符(&)獲得地址
值②通過(guò)指針變量獲得地址值③通過(guò)標(biāo)準(zhǔn)函數(shù)獲得地址值另外N.ILL.是在
stdio.h頭文件中定義的預(yù)定義符。NULL的代碼值為0??梢越o指針變量賦NJLL
值。例如p=NULL;賦值語(yǔ)句,稱p為空指針。這條語(yǔ)句等價(jià)于p=,\(F;或
p=0;這時(shí),指針p并不是指向地址為0的存儲(chǔ)單元,而是具有一個(gè)確定的值-
13、設(shè)有某函數(shù)的說(shuō)明為intn);則下列敘述中,正確的是
A、說(shuō)明中的a[10]寫(xiě)成a口或*a效果完全一樣
B、形參a對(duì)應(yīng)的實(shí)參只能是數(shù)組名
C^func的函數(shù)體中不能對(duì)a進(jìn)行移動(dòng)指針(如a++)的操作
D、只有指向10個(gè)整數(shù)內(nèi)存單元的指針,才能作為實(shí)參傳給a
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:函數(shù)func為返回值為指針的函數(shù),有兩個(gè)形參,形參數(shù)組a為指針
變量,保存實(shí)參數(shù)組的首地址,其元素個(gè)數(shù)由實(shí)參數(shù)組決定,因此說(shuō)明中的a[10]
寫(xiě)成a|]或求a效果完全一樣。
14、以下.敘述中錯(cuò)誤的是
A、函數(shù)可以返回地址值
B、改變函數(shù)形參的值,不會(huì)改變對(duì)應(yīng)實(shí)參的值
C、當(dāng)在程序的開(kāi)頭包含頭文件stdio.h時(shí),可以給指針變量賦NULL
D、可以給指針變量賦一個(gè)整數(shù)作為地址值
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:指針變量的值只能是存儲(chǔ)單元地址,而不能是一個(gè)整數(shù),選項(xiàng)D)的
描述是錯(cuò)誤,為待選答案。函數(shù)可以返回內(nèi)存空間的地址,同時(shí)函數(shù)形參和實(shí)參分
別占用不同的內(nèi)存單元,改變形參的值不會(huì)改變對(duì)應(yīng)實(shí)參的值,在頭文件stdio.h
中,NULL被定義為void型的指針。
15、有以下程序main(){intm=l,n=2,*p=&m,*q=&n,*r;r=p:p=q;q=r;
printf(n%d,%d,%d,%d\n”,m,n,*p,*q);)程序運(yùn)行后的輸出結(jié)果是
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
知火點(diǎn)解析:在主函數(shù)定義了3個(gè)整數(shù)指制變量p,q,r,并旦使p指向m,q指向
n,再執(zhí)行r=p;p=q;q=r;這三條語(yǔ)句,使q指向m,p指向n,再輸出變量
m,n,*p,*q時(shí),它們值分別為1,2,21。
16、設(shè)有定義doublea[10],*s=a;以下能夠代表數(shù)組元素a[3]的是
A、(*s)[3]
B、*s[引
C、*s+3
D、*(s+3)
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:語(yǔ)句*s:a,使用指針變量s指向一維數(shù)組a的首地址,所以*(s+3)表
示的是引用數(shù)組a[3]。
17、若有定義語(yǔ)句:inta[2][3],*p[3]:則以下語(yǔ)句中正確的是
A、p[0]=&a[l][2J;
B、p[0]=a;
C、p=a;
D、p|I]=&a;
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:定義語(yǔ)句inta[2][3],*p[3];定義了整型二維數(shù)組a[2][3]和指針數(shù)組
p|3|o在C語(yǔ)言中,二維數(shù)組名也是一個(gè)存放地址常量的指針,其值為二維數(shù)組中
第一行的地址。所以選項(xiàng)A)中,把整型數(shù)組a[0]的指針賦給p[0]。
18、有以下程序main(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;
printf("%d”,*(p++));printfC%d\nn,**k);}程序運(yùn)行后的輸出結(jié)果是
A、44
B、24
C、22
D、46
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:主函數(shù)中由針變量p指向數(shù)組a中下標(biāo)為。的元素,k指向p,那么
*(p++)的值為2,p指向數(shù)組中下標(biāo)為1的元素,k指向p,所以**k的值為4。
19、有以下程序(注:字符a的ASCII碼值為97)main(){char*s={"abc”};
do{printf("%d",*s%10);++s;)while(*s);)程序運(yùn)行后的輸出結(jié)果是
A、abc
B、7890
C>979899
D、789
標(biāo)準(zhǔn)答案:D
知識(shí)點(diǎn)解析:因?yàn)樾?xiě)字符a,b,c的ASCII的值分別為97,98,99,而在dowhile
循環(huán)語(yǔ)句中,每次對(duì)字綺的ASCH的值取余數(shù)并輸出,笫一次循環(huán)輸出7,笫二次
循環(huán)輸出8,第三次循環(huán)輸出9。
20、有以下程序#includemain。{intn,*p=NULL;*p=&n;printf(nInputn:');
scanf("%d&p);printf("outputn:");printf("%d\n",p);}該程序試圖通過(guò)指針
p為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯(cuò)誤,以下語(yǔ)句正確的是
A>intn,*p=NULL:
B、*p=&n;
C、scant,(“%d",&p)
D、printf("%d\n".p):
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:選項(xiàng)A)表示在程序中,聲明定義變量語(yǔ)句“inm,*p=NULL:”定義了
整型變量n和指針變量p,并且指針變量p初始化為空。其他的語(yǔ)句都是錯(cuò)誤的。
其中選項(xiàng)B),&n的地址應(yīng)存放到指針變量p中,而選項(xiàng)C)中數(shù)據(jù)輸入項(xiàng)錯(cuò)誤,選
項(xiàng)D)輸出地址信息。
21、若有以下定義intx[10],*pt=x;則對(duì)x數(shù)組元素的正確引用是
A、*(x+3)
B、*&x[10]
C、*(pt+10)
D、pt+3
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:本題考查指針的調(diào)用。x代表x[10]數(shù)組的首地址指針,pt是指向
x[10]數(shù)組的首地址的指針,即兩者指向同一內(nèi)存單元。+(x+3)等同于x[3]。
22、有以下程序voidfun(char*s){chara|10|;strcpy(a,"STRING");s=a;)
main(){char*p=',PROGRAM";fun(P);printf(n%s\n",p);}程序運(yùn)行后的輸出
結(jié)果是(此處口代表空格)
A、STRING□□口口
B、PROGRAM
C、STRINGDDD
D、STRING
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是把字符串“STRING",存放到字符數(shù)組a中,s
指向該字符串,函數(shù)調(diào)用結(jié)束以后,釋放s和a指向的空間。主函數(shù)調(diào)用「un(p),
并不能更改p的值,因此p的指向沒(méi)有改變。
23、有以下程序#includcintfun(char*s){char*p=s;while(*P!=0)p++;rcturn(p-
s);)main(){printfC^d\n",fun("goodbey!"));}程序的輸出結(jié)果是
A^6
B、8
C、0
D、7
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是計(jì)算字符串中實(shí)際字符的個(gè)數(shù),因此
“goodbey!”含有字符為8,返回值為8。
24、有下列程序:voidflint*q){inti=0;for(;i<5;i++)(*q)++;)main()(int
a[5]={l,2,3,4,5),i;f(a);for(i=0;i<5;i++)printf("%d,",a[i]);}程序
運(yùn)行后的輸出結(jié)果是
A、2,2,3,4,5,
B、6,2,3,4,5,
C、I.2.3.4.5,
D、2,3,4,5,6,
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:voidf(intxq)函數(shù)的功能是對(duì)(*q)的值連續(xù)5次自加1。在main。函數(shù)
中f(a)語(yǔ)句把一維數(shù)組a[5】的首地址作為實(shí)參,傳遞給函數(shù)f(int*q)的形參q,然
后在函數(shù)f(int*q)內(nèi),a[0]連續(xù)5次自加1后,a[0]的值就變成6所以輸出為6,
2,3,4,5o
25、以卜,函數(shù)按每行8個(gè)輸出數(shù)組中的數(shù)據(jù):voidfun(int*w,intn){inti;
for(i=0;i<n;i++){printf("%d”,w[i]);)printf("\n");}下劃線處應(yīng)
填入的語(yǔ)句是
A>if(i%8==0)printf(,,\nM);
B、if(i/8=0)continue;
C、if(i/8==O)printfC\n");
D、if(i%8==0)continue;
標(biāo)準(zhǔn)答案:A
知識(shí)點(diǎn)解析:本題考查判斷語(yǔ)句與循環(huán)語(yǔ)句。欲使每行輸出8個(gè)數(shù)據(jù),則必然使用
取余運(yùn)算,當(dāng)i%8=0時(shí)先輸出一個(gè)換行符再輸出字符。選項(xiàng)D)中,continue語(yǔ)句
的作用是停止執(zhí)行本次循環(huán)位于conlinue后面的語(yǔ)句,而進(jìn)入下一次循環(huán)。
26、有以下程序#includevoidf(int*p,int*q);main(){intm=l,n=2,*r==&m;
f(r,&n);printf("%d,%d”,m,n);}voidf(int*p,int*q){p=p+l;*q=*q+l;)程
序運(yùn)行后的輸出結(jié)果是
A、2,3
B、1,3
C、1,4
D、1,2
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:本題考查函數(shù)的調(diào)用與指針。fun()函數(shù)的作用是:使指針p指向原來(lái)
所指變量的下一個(gè)變量,使q指針指向的值加1。主函數(shù)中,指針r指向m,調(diào)用
fun()函數(shù)的結(jié)果是,使r指向地址位于m后面的變量,使位于n的地址上的變量
(就是n)的值加1,因此,結(jié)果為】,3。
27、有下列程序: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]);}程序運(yùn)行后的輸出結(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í)點(diǎn)解析:函數(shù)voidf(intb[])的功能是對(duì)數(shù)組b[]中第2個(gè)到第5個(gè)元素的值逐
個(gè)擴(kuò)大2倍.所以在main。函數(shù)中,f(a)語(yǔ)句的作用是對(duì)數(shù)組作10]中從a[2]到a[5]
的各個(gè)數(shù)字乘以2,因而數(shù)組a[10]的元素就變成了{(lán)1,2,6,8,10,12,7,8,
9,10)o
28、若有以下程序#includeVstdio.h>voidsp(int*a){intb=2;a=&b;*a=*a*2:
printf("%d,",*a);)main(){intk=3?*p=&k;sp(p);printf(H%d,%d\n”,k,
*p);)則程序的輸出結(jié)果是
A、4,3,4
B、4,3,3
C、6,3,6
D^6,6,6
標(biāo)準(zhǔn)答案:B
知識(shí)點(diǎn)解析:主函數(shù)中定義指針變量p指向k,調(diào)用函數(shù)sp(p),將k的地址傳遞給
形參指針a,函數(shù)轉(zhuǎn)到3P運(yùn)行,a指向b的地址,表達(dá)式*a=*a*2,相當(dāng)于b=b*2,
得到*a的數(shù)據(jù)4輸出。函數(shù)調(diào)用結(jié)束,此時(shí)a和b的空間撤銷,而對(duì)實(shí)參k和p的
值并沒(méi)有改變,仍舊是3。
29>若有以下程序#includeVstdio.h>int*f(int*s,int*t){int*k;if(*s<*t){k=s;
s=t;t=k;}returns;)main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);
pfintf("%d,%d,%d,%d,%d\n”,i,j,*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í)點(diǎn)解析:本題考查了返回值為指針的函數(shù),函數(shù)f的主要功能為第一個(gè)參數(shù)小
于第二個(gè)參數(shù),那么交疾指針的指向,這對(duì)于實(shí)參指向的數(shù)據(jù)時(shí)沒(méi)有影響的。最后
返回比較大的元素的地址。主函數(shù)中p指向i,q指向j,調(diào)用r==f(p,q),返回q的
地址,因止匕*p=3,*q=5,*r=5o
30、若有以下程序#includcintk=7,m=5;voidf(int**S){int*t=&k:s=&t;
*s=&m;printf(H%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,
**r=&p;f(r);printf("%d,%d,%d\n",i,*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í)點(diǎn)解析:本題考查二級(jí)指針作為函數(shù)的參數(shù),可以通過(guò)函數(shù)調(diào)用來(lái)改變主函數(shù)
中一級(jí)指針的指向。主函數(shù)中指針變量p指向i,r指向p,調(diào)用f函數(shù),形參指針
s指向p,流程轉(zhuǎn)到f函數(shù)執(zhí)行,指針變量[指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025安徽皖新融資租賃有限公司服務(wù)人員第二批次招聘2人考試核心試題及答案解析
- 2025湖北咸寧市婦幼保健院人才引進(jìn)7人考試核心題庫(kù)及答案解析
- 2025年體育中心鋼結(jié)構(gòu)加固協(xié)議
- 2025年福建莆田市國(guó)睿產(chǎn)業(yè)園區(qū)運(yùn)營(yíng)管理有限公司企業(yè)員工招聘8人考試重點(diǎn)試題及答案解析
- 2025年陶藝體驗(yàn)合作合同協(xié)議書(shū)
- 2025海南??谑薪逃侄靖案咝C嫦?026應(yīng)屆畢業(yè)生招聘教師(第一號(hào))筆試重點(diǎn)試題及答案解析
- 2025四川大學(xué)華西公共衛(wèi)生學(xué)院華西第四醫(yī)院 臨床護(hù)士招聘6人考試重點(diǎn)題庫(kù)及答案解析
- 2025年碳中和路徑規(guī)劃協(xié)議合同
- 石棉縣人力資源和社會(huì)保障局2025年下半年面向縣內(nèi)公開(kāi)考調(diào)事業(yè)單位工作人員(7人)考試核心題庫(kù)及答案解析
- 2025年淮北市相山區(qū)公開(kāi)招考村(社區(qū))后備干部66名考試核心題庫(kù)及答案解析
- 賓館公司合同付款管理辦法
- 寢室用電安全培訓(xùn)總結(jié)課件
- 市民熱線培訓(xùn)課件下載
- 化工氫化考試題庫(kù)及答案
- 冠心病的健康宣教及飲食指導(dǎo)
- 2025年全國(guó)礦山安全生產(chǎn)事故情況
- 船舶安全獎(jiǎng)懲管理制度
- 印刷ctp制版管理制度
- 2024鄂爾多斯市東勝國(guó)有資產(chǎn)投資控股集團(tuán)有限公司招聘26人筆試參考題庫(kù)附帶答案詳解
- 外研版(三起)(2024)三年級(jí)下冊(cè)英語(yǔ)Unit 5 單元測(cè)試卷(含答案)
- 幼兒園防食物中毒安全主題
評(píng)論
0/150
提交評(píng)論