國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共107題)_第1頁(yè)
國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共107題)_第2頁(yè)
國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共107題)_第3頁(yè)
國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共107題)_第4頁(yè)
國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共107題)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷1(共4套)(共107題)國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷第1套一、選擇題(本題共26題,每題1.0分,共26分。)1、設(shè)有定義:intx=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è)地址。2、以下敘述中錯(cuò)誤的是A、函數(shù)可以返回地址值B、改變函數(shù)形參的值,不會(huì)改變對(duì)應(yīng)實(shí)參的值C、當(dāng)在程序的開(kāi)頭包含頭文件stdio.h時(shí),可以給指針變量賦NULLD、可以給指針變量賦一個(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型的指針。3、設(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的地址值。4、有以下程序,程序運(yùn)行后的輸出結(jié)果是main(){intm=1,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,2B、1,2,2,1C、2,1,2,1D、2,1,1,2標(biāo)準(zhǔn)答案:B知識(shí)點(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,2,1。5、下面選項(xiàng)中的程序段,沒(méi)有編譯錯(cuò)誤的是A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;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)行賦值。6、設(shè)有定義doublea[10],*s=a;以下能夠代表數(shù)組元素a[3]的是A、(*s)[3]B、*s[3]C、*s+3D、*(s+3)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:語(yǔ)句*s=a,使用指針變量s指向一維數(shù)組a的首地址,所以*(s+3)表示的是引用數(shù)組a[3]。7、有以下程序,執(zhí)行后的輸出結(jié)果是main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);pfintf("%dk\"9c);}A、2B、3C、1D、4標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:程序使整型指針p1、p2、p3指向a、b、c值所存放的地址空間。然后再將指針變量*p1、*p2中的值的乘積賦給指針變量*p,即賦給變量c,輸出c的值3。8、若有定義語(yǔ)句:inta[2][3],*p[3];則以下語(yǔ)句中正確的是A、p[0]=&a[1][2];B、p[0]=a;C、p=a;D、p[1]=&a;標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:定義語(yǔ)句“inta[2][3],*p[3];”定義了整型二維數(shù)組a[2][3]和指針數(shù)組p[3]。在C語(yǔ)言中,二維數(shù)組名也是一個(gè)存放地址常量的指針,其值為二維數(shù)組中第一行的地址。所以選項(xiàng)A)中,把整型數(shù)組a[0]的指針賦給p[0]。9、有定義語(yǔ)句:intyear=2009,*p=&year;以下不能使變量year中的值增至2010的語(yǔ)句是A、(*p)++;B、++(*p);C、*p++;D、*p+=1;標(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。10、有以下程序main(){inta[5]={2,4,6,8,10},*p,*k;p=a:k=&p;printf("%d",*(p++));printf("%d\n",**k);}程序運(yùn)行后的輸出結(jié)果是A、44B、24C、22D、46標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:主函數(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、在對(duì)指針進(jìn)行加、減算術(shù)運(yùn)算時(shí),數(shù)字1表示1個(gè)存儲(chǔ)單元的長(zhǎng)度D、如果p是指針變量,則*p+1和*(p+1)的效果是一樣的標(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)行任何其他的算術(shù)運(yùn)算。C語(yǔ)言提供了一個(gè)間接訪問(wèn)運(yùn)算符(*),又稱間址運(yùn)算符,它是一個(gè)單目運(yùn)算符,優(yōu)先級(jí)比較高,高于普通的算術(shù)運(yùn)算符,但是低于()運(yùn)算符,因此*p+1和*(p+1)的含義是不一樣。當(dāng)指針變量中存放了一個(gè)確切的地址值時(shí),就可以用“間接訪問(wèn)運(yùn)算符”通過(guò)指針來(lái)引用該地址的存儲(chǔ)單元。12、有以下程序(注:字符a的ASCII碼值為97)main(){char*s={"abc"};do{printf("%dt",*s%10);++s;}while(*s);}程序運(yùn)行后的輸出結(jié)果是A、abcB、7890C、979899D、789標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:因?yàn)樾懽址鸻,b,c的ASCII的值分別為97,98,99,而在dowhile循環(huán)語(yǔ)句中,每次對(duì)字符的ASCII的值取余數(shù)并輸出,第一次循環(huán)輸出7,第二次循環(huán)輸出8,第三次循環(huán)輸出9。13、設(shè)有定義:char*c;以下選項(xiàng)中能夠使c正確指向一個(gè)字符串的是A、charstr[]="string";c=str;B、scanf("%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賦初值。14、有以下程序#include<stdio.h>main(){intn,*p=NULL;*p=&n;printf("Inputn:");scanf("%d",&p);printf("outputn:");orintf("%d\n",p:}該程序、試圖通過(guò)指針p為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯(cuò)誤,以下語(yǔ)句正確的是A、intn,*p=NULL;B、*p=&n;C、scanf("%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)輸出地址信息。15、若有定義語(yǔ)句:doublea,*p=&a;以下敘述中錯(cuò)誤的是A、定義語(yǔ)句中的木號(hào)是一個(gè)說(shuō)明符B、定義語(yǔ)句中的p只能存放double類型變量的地址C、定義語(yǔ)句中*p=&a把變量a的地址作為初值賦給指針變量pD、定義語(yǔ)句中的*號(hào)是一個(gè)間址運(yùn)算符標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在指針定義語(yǔ)句“doublea,*p=&a”中,指針變量p前面的*號(hào),只是一個(gè)說(shuō)明符,說(shuō)明變量p是指針類型的變量。16、若有以下定義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]。17、有以下程序intfun1(doublea){returna*=a;}intfun2(doublex,doubley){doublea=0,b=0;a=fun1(x);b=fun1(y);return(int)(a+b);}main(){doublew;w=fun2(1.1,2.0);……}程序執(zhí)行后輸出結(jié)果是A、5.00B、5C、5.21D、0.0標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:子函數(shù)fun1(doublea)的功能是返回a的平方值的整數(shù)部分。子函數(shù)fun2(doublex,doubley)的功能是返回x的平方值的整數(shù)部分與y的平方值的整數(shù)部分的和。又因?yàn)轭}中變量w的定義為double型,函數(shù)fun(2)的定義為int型,按照各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算,整型數(shù)據(jù)被轉(zhuǎn)換為實(shí)型數(shù)據(jù)。所以雙精度型變量w的值為5.00。18、有以下程序voidfun(char*s){chara[10];strcpy(a,"STRING");s=a;}main(){char*p="PROGRAM";fun(p);printf("%s\n",p);}程序運(yùn)行后的輸出結(jié)果是(此處□代表空格)A、STRING□□□□B、PROGRAMC、STRING□□□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)用fun(p),并不能更改p的值,因此p的指向沒(méi)有改變。19、有以下程序voidfun(intn,int*s){intf;if(n==1)*s=n+1;else{fun(n-1,&f);*s=f;}}main(){intx=0;fun(4,&x);printf("%d\n,x);}程序運(yùn)行后的輸出結(jié)果是A、1B、3C、4D、2標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:函數(shù)fun為遞歸調(diào)用函數(shù),如果n的值為1,那么后面形參指向的空間存放n+1,否則繼續(xù)計(jì)算fun(n-1)的值。調(diào)用分析過(guò)程:矗m(4,&x)->fun(3,&x)->fun(2,&x)->fun(1,&x)在回歸的過(guò)程中,對(duì)于x內(nèi)的數(shù)據(jù)并沒(méi)有改動(dòng)。20、有以下程序#include<stdio.h>intfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的輸出結(jié)果是A、6B、8C、0D、7標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是計(jì)算字符串中實(shí)際字符的個(gè)數(shù),因此"goodbey!"含有字符為8,返回值為8。21、有以下程序#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i];}main(){intx[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序的運(yùn)行結(jié)果是A、1,2,3,4,B、1,4,5,9,C、1,0,7,0,D、394,8,10,標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:函數(shù)fun(inta[][N],intb[])的功能是把矩陣a[N][N]主對(duì)角線上的元素賦給一維數(shù)組b[]。在主函數(shù)中由x[][N]的初始化可知,其主對(duì)角線上的元素是1,0,7,0。所以當(dāng)執(zhí)行完函數(shù)fun(x,y)后,…維數(shù)組元素y[]中的元素值為1,0,7,0。22、有下列程序:voidf(int*q){inti=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,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、1,2,3,4,5,D、2,3,4,5,6,標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:voidf(int*q)函數(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,5。23、有以下程序#include<stdio.h>voidfun(char*c,intd){*c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf("%c,%c\n",b,a);}程序運(yùn)行后的輸出結(jié)果是A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題中funn函數(shù)的參數(shù)傳遞方式,形參c是傳地址,形參d是傳值,所以在主函數(shù)中,執(zhí)行劬時(shí),把變量b的地址傳給了c,把a(bǔ)的值傳遞給了d,經(jīng)過(guò)運(yùn)算,輸出的值為b,B。在主函數(shù)的輸出語(yǔ)句中,輸出變量b的值為b,變量a的值為A。24、以下函數(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("\n");B、if(i/8==0)continue;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)。25、有以下程序:#include<stdio.h>voidfun(char*c){while(*c){if(*c>=’a’&&*c<=’z’)*c=*c-(’a’-’A’);c++;}}voidmain(){chars[81];gets(s);fun(s);puts(s);}當(dāng)執(zhí)行程序時(shí)從鍵盤上輸入HelloBeijing<回車>,則程序的輸出結(jié)果是A、HELLOBEIJINGB、HelloBeijingC、helloBeijingD、hELLOBeijing標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:子函數(shù)fun的功能是把小寫字母轉(zhuǎn)換成大寫字母,所以程序的輸出結(jié)果為選項(xiàng)A)。26、有以下程序#include<stdio.h>voidf(int*p,int*q);main(){intm=1,n=2,*r=&m;f(r,&n);printf("%d,%d",m,n);voidf(int*p,int*q){p=p+1;*q=*q+1;}程序運(yùn)行后的輸出結(jié)果是A、2,3B、1,3C、1,4D、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é)果為1,3。國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷第2套一、選擇題(本題共29題,每題1.0分,共29分。)1、以下語(yǔ)句中存在語(yǔ)法錯(cuò)誤的是A、charss[][20]={"right?"};B、char*ss[6];ss[1]="right?";C、char*ss[]={"right?"};D、charss[6][20];ss[1]="right?";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A)中定義了二維數(shù)組ss,可以用于存儲(chǔ)字符串,但是字符串的存儲(chǔ)不能通過(guò)賦值,僅可以初始化或者輸入得到,而選項(xiàng)C)和A)不同,選項(xiàng)C)為指針數(shù)組,對(duì)于指針變量可以保存常量字符串的地址。2、下面是有關(guān)C語(yǔ)言字符數(shù)組的描述,其中錯(cuò)誤的是A、不可以用賦值語(yǔ)句給字符數(shù)組名賦字符串B、可以用輸入語(yǔ)句把字符串整體輸入給字符數(shù)組C、字符數(shù)組中的內(nèi)容不一定是字符串D、字符數(shù)組只能存放字符串標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:本題考查字符數(shù)組。選項(xiàng)A)、B)和C)都是正確的,字符數(shù)組存放其他數(shù)據(jù)。3、以下選項(xiàng)中有語(yǔ)法錯(cuò)誤的是A、charstr[3][10];str[1]="guest";B、charstr[][10]={"guest"};C、char*str[3];str[1]="guest";D、char*str[]={"guest"};標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題考查字符數(shù)組的定義和使用。選項(xiàng)A)定義了一個(gè)二維字符數(shù)組,第二句是直接給字符數(shù)組賦值錯(cuò)誤,C語(yǔ)言中不能直接給字符數(shù)組賦值;選項(xiàng)B)、C)和D)都是正確的。4、下列敘述中正確的是A、兩個(gè)連續(xù)的單引號(hào)(")是合法的字符常量B、可以對(duì)字符串進(jìn)行關(guān)系運(yùn)算C、兩個(gè)連續(xù)的雙引號(hào)("")是合法的字符串常量D、空字符串不占用內(nèi)存,其內(nèi)存空間大小是0標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:兩個(gè)連續(xù)的雙引號(hào):"",是一個(gè)字符串常量,稱為“空串”。5、以下選項(xiàng)中,能正確進(jìn)行字符串賦值的是A、chars[5]={’A’,’B’,’C’,’D’,’E’};B、char*s="ABCDE";C、chars[4][5]={"ABCDE"};D、char*s;gets(s);標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:對(duì)于選項(xiàng)A)字符串中無(wú)法存放字符串結(jié)束標(biāo)志’\0’,選項(xiàng)C)每行僅僅存放5個(gè)字符,同樣的不能存放字符串結(jié)束標(biāo)志,選項(xiàng)D)中指針變量s沒(méi)有實(shí)際的內(nèi)存空間,無(wú)法存放輸入的字符串。因此正確的選項(xiàng)為B),相當(dāng)于char*s;s="ABCDE",把字符串常量的首地址存放到指針變量中存儲(chǔ)。6、有以下程序#include<stdio.h>intfun(chars[]){char*p=s;while(*P!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序運(yùn)行后的輸出結(jié)果是A、6B、7C、1D、0標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是計(jì)算字符串中實(shí)際字符的個(gè)數(shù),因此主函數(shù)中調(diào)用fun得到結(jié)果為7。7、若有以下程序段charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正確引用字符串的選項(xiàng)是A、strpB、str[0]C、strp[3]D、*strp標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:程序段中定義指針數(shù)組*strp,含有4個(gè)元素,for循環(huán)strp分別保存了二維數(shù)組str中的4個(gè)字符串的首地址,因此strp為二級(jí)地址,不能保存字符串的首地址,*strp或者strp[0]中存放了字符串"aa"的首地址。所以不能正確引用字符串的為選項(xiàng)A)。8、以下敘述中正確的是A、下面的語(yǔ)句用賦初值方式來(lái)定義字符串,其中,“’\0’”是必須的charstr1[]=’s’,’t’,’r’,’1’,’\0’};B、有定義語(yǔ)句:charstr1[]="str1";,數(shù)組str1將包含4個(gè)元素C、字符串常量“str1”的類型是:字符串?dāng)?shù)據(jù)類型D、字符數(shù)組的每個(gè)元素可存放一個(gè)字符,并且最后一個(gè)元素必須是“’\0’”字符標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:選項(xiàng)B)中除了字符串中實(shí)際字符之外,還要存儲(chǔ)字符串結(jié)束標(biāo)志,應(yīng)為5個(gè)元素。在C語(yǔ)言中沒(méi)有字符串?dāng)?shù)據(jù)類型,因此選項(xiàng)C)不正確,選項(xiàng)D)字符數(shù)組不一定必須存放字符串,因此沒(méi)有規(guī)定最后一個(gè)元素為字符串結(jié)束標(biāo)志。9、以下敘述中正確的是A、charca[3][5]={"A","BB","CCC"};是不合語(yǔ)法的B、字符串?dāng)?shù)組,是指數(shù)組中的每個(gè)元素都是一個(gè)存放字符串的一維數(shù)組C、charca[][5]={"A","BB","CCC"};是不合語(yǔ)法的D、char*ca[3]={"A","BB","CCC"};是不合語(yǔ)法的標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:字符串?dāng)?shù)組,也就是二維字符數(shù)組,其中每個(gè)元素為一個(gè)字符串,選項(xiàng)B)的說(shuō)法正確。選項(xiàng)A)和C)對(duì)于ca的定義是正確的。選項(xiàng)D)定義一個(gè)指針數(shù)組,可以保存多個(gè)字符串的首地址。10、以下敘述中正確的是A、函數(shù)調(diào)用“strlen(s);”會(huì)返回字符串s實(shí)際占用內(nèi)存的大小(以字節(jié)為單位)B、兩個(gè)字符串可以用關(guān)系運(yùn)算符進(jìn)行大小比較C、當(dāng)拼接兩個(gè)字符串時(shí),結(jié)果字符串占用的內(nèi)存空間是兩個(gè)原串占用空間的和D、C語(yǔ)言本身沒(méi)有提供對(duì)字符串進(jìn)行整體操作的運(yùn)算符標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:C語(yǔ)言中沒(méi)有運(yùn)算符可以處理字符串,要調(diào)用“string”庫(kù)中的函數(shù)來(lái)處理字符串,其中strlen函數(shù)主要測(cè)試字符串中實(shí)際字符的個(gè)數(shù),比實(shí)際占用的內(nèi)存至少要少一個(gè)。Strcat(s1,s2)函數(shù)用于連接兩個(gè)字符串,是把字符串s2連接到s1的后面。11、以下敘述中正確的是A、不能用字符串常量對(duì)字符數(shù)組名進(jìn)行整體賦值操作B、字符串常量“Hello”會(huì)被隱含處理成一個(gè)無(wú)名字符型數(shù)組,它有5個(gè)元素C、“charstr[7]="string!";”在語(yǔ)法上是合法的,運(yùn)行也是安全的D、“char*str;str="Hello";”與“charstr[];str="Hello";”效果是一樣的標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符數(shù)組僅僅可以采用定義時(shí)初始化以及輸入得到數(shù)據(jù),在程序其他部分不允許對(duì)其進(jìn)行賦值。字符串常量中除了實(shí)際字符之外還有結(jié)束標(biāo)志,選項(xiàng)B)錯(cuò)誤,而選項(xiàng)C)中,沒(méi)有空間存放字符串結(jié)束標(biāo)志,因此運(yùn)行是不安全的。選項(xiàng)D)中第一個(gè)str為指針,可以賦值,而后面的為數(shù)組,在程序中賦值出錯(cuò)。12、以下敘述中正確的是A、語(yǔ)句“charstr[10]="string!";”和“charstr[10]={"string!"};”并不等價(jià)B、對(duì)于一維字符數(shù)組,不能使用字符串常量來(lái)賦初值C、對(duì)于字符串常量“string!”,系統(tǒng)已自動(dòng)在最后加入了“’\0’”字符,表示串結(jié)尾D、在語(yǔ)句charstr[]="string!";中,數(shù)組str的大小等于字符串的長(zhǎng)度標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在C語(yǔ)言中,字符串是借助于字符型一維數(shù)組來(lái)存放的,可以借助在定義時(shí)初始化以及輸入來(lái)把字符串存入數(shù)組,并規(guī)定以字符’\0’作為“字符串結(jié)束標(biāo)志”?!?’是一個(gè)轉(zhuǎn)義字符,稱為空值,它的ASCII碼值為0?!?’作為標(biāo)志占用存儲(chǔ)空間,但不計(jì)入字符串的實(shí)際長(zhǎng)度。在C語(yǔ)言中,系統(tǒng)在每個(gè)字符串的最后自動(dòng)加入一個(gè)字符(’\0’)作為字符串的結(jié)束標(biāo)志。13、設(shè)有定義charstr[]="Hello";則語(yǔ)句printf("%d%d"sizeof(str),strlen(str));的輸出結(jié)果是A、66B、65C、55D、56標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:sizeof主要用于測(cè)試變量所占的實(shí)際內(nèi)存,而strlen函數(shù)主要測(cè)試字符串中實(shí)際字符的個(gè)數(shù),字符串”Hello”占有內(nèi)存6個(gè)字節(jié),而字符串中共有5個(gè)字符。14、設(shè)有定義語(yǔ)句:char*aa[2]={"abcd","ABCD"};則以下敘述正確的是A、aa數(shù)組的兩個(gè)元素只能存放含有4個(gè)字符的一維數(shù)組的首地址B、aa數(shù)組的值分別是字符串"abcd"和"ABCD"C、aa是指針變量,它指向含有兩個(gè)元素的字符型數(shù)組D、aa[0]存放了字符串"abcd"的首地址標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:題目中char*aa[2],定義了指針數(shù)組aa,有兩個(gè)元素,aa[0]存放”abcdt.地址,而aa[1]存放"ABCD"地址。15、以下選項(xiàng)中,沒(méi)有編譯錯(cuò)誤的是A、charstr3[]={’d’,’e’,;b’,’u’,’g’,’\0’};B、charstr1[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A)是定義了字符數(shù)組str3[],并對(duì)其賦初值。選項(xiàng)B)中語(yǔ)句str2=str1非法,字符數(shù)組不能直接賦值。選項(xiàng)C),D)和選項(xiàng)B)一致。16、有以下程序main(){chara[5][10]={"one","two","three","four","five"};inti,j;chart;for(i=0;i<4;i++)fof(j=i+1;j<5;j++)if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[i][0]=t;}puts(a[1]);}程序運(yùn)行后的輸出結(jié)果是A、fwoB、owoC、twoD、fix標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:這個(gè)程序的執(zhí)行過(guò)程是當(dāng)i=0時(shí),j=1,a[0][0]=o<a[1][0]=t;不置換;當(dāng)i=1時(shí),j=2,a[1][0]=t=a[2][0]=t;不置換;當(dāng)i=2時(shí),j=3,a[2][0]=t>a[3][0]=f;置換a[2][0]=f,a[3][0]=t;此時(shí),a[2][0]=ea[1][0]=t,再置換a[2][0]=t,a[1][0]=e:當(dāng)i=3時(shí),i=4,a[3][0]=f=a43][0]=f;不置換;所以a[1],的結(jié)果為fwo。17、設(shè)有定義:chars[81];inti=0;以下不能將一行(不超過(guò)80個(gè)字符)帶有空格的字符串正確讀入的語(yǔ)句或語(yǔ)句組是A、while((s[i++]=getchar()!=’\n’);s[i]=’\0’;B、scanf("%s",s);C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:本題考查標(biāo)準(zhǔn)輸入輸出函數(shù)和循環(huán)語(yǔ)句。gets(s)函數(shù)的作用是將輸入的字符讀入字符串s,直到遇到回車。而scanf()函數(shù)接收字符串時(shí)的結(jié)束標(biāo)志為回車或者空格。18、設(shè)有定義:charp[]={’1’,’2’,’3’),*q=p;以下不能計(jì)算出一個(gè)char型數(shù)據(jù)所占字節(jié)數(shù)的表達(dá)式是A、sizeof(p)B、sizeof(char)C、sizeof(*q)D、sizeof(p[0])標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A)計(jì)算的是p[]字符數(shù)組首地址所占的內(nèi)存字節(jié)數(shù),返回值數(shù)組中所有元素占有的空間。*q和p[0]分別表示數(shù)組p中下標(biāo)為0的字符元素,選項(xiàng)B)和D)都可以計(jì)算char型數(shù)據(jù)占有的字節(jié)數(shù)。19、有以下程序#include<stdio.h>#include<string.h>voidmain(){charstr[][20]={"One*World","One*Dream!"),*p=str[1];printf("%d,",strlen(p));printf("%s\11",p);}程序運(yùn)行后的輸出結(jié)果是A、9,One*Dream!B、10,One*Dream!C、9,One*WorldD、10,One*World標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在主函數(shù)中定義了二維字符數(shù)組str,并對(duì)它賦初值。定義字符指針p,并把字符串str[1]的地址賦給它一所以這時(shí)字符指針p指向字符串“One*Dream!”,然后在兩個(gè)輸出語(yǔ)句中,分別輸出這個(gè)字符串的長(zhǎng)度10和字符串本身。20、有以下程序#include<stdio.h>voidmain(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’0’&&s[i]<=’9’)n++;printf("%d\n",n);}程序運(yùn)行后的輸出結(jié)果是A、0B、7C、3D、8標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在主函數(shù)中的for循環(huán)語(yǔ)句中,當(dāng)s[i]的值不等于0~9之間的數(shù)字時(shí),結(jié)束循環(huán)語(yǔ)句的執(zhí)行。由字符數(shù)組s的初值可以得到for循環(huán)語(yǔ)句執(zhí)行了三次,所以變量n的值等于3。21、以下不能將s所指字符串正確復(fù)制到t所指存儲(chǔ)空間的是A、for(i=0;t[i]=s[i];i++);B、while(*t=*s){t++;s++;}C、for(i=0;=0;t[i++]=s[j++];);D、do{*t++=*s++;}while(*s);標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在選項(xiàng)D)中,不能把s所指字符串的結(jié)束標(biāo)志符賦給字符串t。22、下列語(yǔ)句組中,正確的是A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={"Olympic"};D、chars[7];s={"Olympic"};標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A)中定義了指針變量s,通過(guò)賦值語(yǔ)句保存字符串常量的地址,而字符數(shù)組絕對(duì)不能賦值,而只能初始化或者輸入。23、有以下程序main(){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));}程序運(yùn)行后的輸出結(jié)果是A、0B、元素ch[5]的地址C、zD、字符v的地址標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在程序中語(yǔ)句pc=ch;的功能是字符指針pc指向字符串?dāng)?shù)組ch[]的地址,而*(ps+5)表示字符串?dāng)?shù)組ch[]中第6個(gè)字符z。24、有以下程序#include<stdio.h>voidmain(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’a&&s[i]<=’z’)n++;printf("%d\n",n);}程序運(yùn)行后的輸出結(jié)果是A、0B、3C、5D、2標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:這段程序的功能求出字符串s中字符在小寫字符a到z之間字符的個(gè)數(shù)。在程序中字符串s的值為“012xy”,所以在字符串s中符合要求的字符的個(gè)數(shù)等于2。25、以下能正確定義字符串的語(yǔ)句是A、charstr="\x43";B、charstr[]="\0";C、charstr=";D、charstr[]={’\064’};標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:字符串常量是用一對(duì)雙括號(hào)括起來(lái)的一串字符。它用字符數(shù)組來(lái)存放,不用一對(duì)大括號(hào)對(duì)括起來(lái)。26、以下關(guān)于字符串的敘述中正確的是A、兩個(gè)字符串中的字符個(gè)數(shù)相同時(shí)才能進(jìn)行字符串大小的比較B、可以用關(guān)系運(yùn)算符對(duì)字符串的大小進(jìn)行比較C、空串比空格打頭的字符串小D、C語(yǔ)言中有字符串類型的常量和變量標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:C語(yǔ)言本身并沒(méi)有設(shè)置一種類型來(lái)定義字符串變量,卻允許使用“字符串常量”。字符串常量是由雙引號(hào)括起來(lái)的一串字符。任意兩個(gè)字符串的大小比較要調(diào)用字符串比較函數(shù)strcmp(s1,s2)來(lái)進(jìn)行,其比較的方法是依次對(duì)s1和s2中對(duì)應(yīng)位置上的字符兩兩進(jìn)行比較,當(dāng)出現(xiàn)第一對(duì)不相同的字符時(shí),即由這兩個(gè)字符決定所在串的大小(比較字符大小的依據(jù)是其ASCII碼值)。27、若要求從鍵盤讀入含有空格字符的字符串,應(yīng)使用函數(shù)A、getc()B、gets()C、getchar()D、scanf()標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:scanf()語(yǔ)句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數(shù)不能輸入空格:getchar()函數(shù)用于輸入字符,其調(diào)用形式為:ch=getchar(),getchar()函數(shù)從終端讀入一個(gè)字符作為函數(shù)值,把讀入的一個(gè)字符賦給變量ch。在輸入時(shí),空格、回車符都將用于字符讀入,而且只有在用戶敲入Enter鍵時(shí),讀入才開(kāi)始執(zhí)行。gets()函數(shù)的調(diào)用形式為:gets(str_adr),其中str_adr是存放輸入字符串的起始地址,可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。gets()函數(shù)用來(lái)從終端鍵盤讀入字符串(包括空格符),直到讀入一個(gè)換行符為止。getc()函數(shù)的調(diào)用形式為:ch=getc(pf)其中pf是文件指針。函數(shù)的功能是從pf指定的文件中讀入一個(gè)字符,并把它作為函數(shù)值返回。28、有以下程序,執(zhí)行后的結(jié)果是#include<stdio.h>main(){chars[]="abcde";s+=2;printf("%d\n",s[0]);}A、輸出字符C的ASCII碼B、輸出字符CC、輸出字符a的ASCII碼D、程序出錯(cuò)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:因?yàn)樽址麛?shù)組s[]中的數(shù)組名s表示的是一個(gè)地址常量。所以語(yǔ)句“s+=2;”不能將指針在當(dāng)前位置的基礎(chǔ)上再向后移動(dòng)兩位。因而程序編譯時(shí)出錯(cuò)。29、有下列程序,程序執(zhí)行后的輸出結(jié)果是fun(charp[][10]){intn=0,i;for(i=0;i<7;i++)if(p[i][0]==’T’)n++;returnn;}main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};printf("%d\n",fun(str));}A、1B、3C、0D、2標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:本題在主函數(shù)中定義了一個(gè)字符二維數(shù)組str[][10],并用{"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}初始化。函數(shù)fun(char。p[][10])的功能是統(tǒng)計(jì)出p[][10]中p[i][0]等于字符T的個(gè)數(shù)。所以fun(str)的功能是統(tǒng)計(jì)一周七天中英文名稱首字母為“T”的個(gè)數(shù)。因?yàn)樽址癟ue”和“Thu”的首字符是“T”,所以n=2。國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷第3套一、選擇題(本題共26題,每題1.0分,共26分。)1、以下敘述中正確的是A、在C語(yǔ)言中,預(yù)處理命令行都以"#"開(kāi)頭B、預(yù)處理命令行必須位于C源程序的起始位置C、#include必須放在C程序的開(kāi)頭D、C語(yǔ)言的預(yù)處理不能實(shí)現(xiàn)宏定義和條件編譯的功能標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在C語(yǔ)言中,凡是以“#”號(hào)開(kāi)頭的行,都稱為“編譯預(yù)處理”命令行。預(yù)處理命令可以放在程序中的任何位置,其有效范圍是從定義開(kāi)始到文件結(jié)束。預(yù)處理命令有宏定義、文件包含和條件編譯三類。#include<stdio.h>命令行表示程序中要引用C標(biāo)準(zhǔn)函數(shù)庫(kù)中的標(biāo)準(zhǔn)輸入輸出函數(shù)。2、有以下程序,程序運(yùn)行后的輸出結(jié)果是#definePT3.5;#defineS(x)PT*X*X;main(){inta=1,b=2;printf("%4.1f\n",S(a+b));}A、31.5B、7.5C、程序有錯(cuò)無(wú)輸出結(jié)果D、14.0標(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。3、以下關(guān)于宏的敘述中正確的是A、宏定義必須位于源程序中所有語(yǔ)句之前B、宏名必須用大寫字母表示C、宏調(diào)用比函數(shù)調(diào)用耗費(fèi)時(shí)間D、宏替換沒(méi)有數(shù)據(jù)類型限制標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:本題考查宏替換的規(guī)則。宏替換分為簡(jiǎn)單的字符替換和帶參數(shù)的宏替換兩類。使用宏時(shí)應(yīng)注意幾點(diǎn):①宏定義僅僅是符號(hào)替換,不是賦值語(yǔ)句,因此不做語(yǔ)法檢查;②為了區(qū)別程序中其他的標(biāo)識(shí)符,宏名的定義通常用大寫字母,但不是必須用大寫;③雙引號(hào)中出現(xiàn)的宏名不替換;④使用宏定義可以嵌套,即后定義的宏中可以使用先定義的宏。4、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#defineS(x)4*(x)*x+1voidmain(){intk=5,j=2;printf("%d\n",S(k+j));}A、197B、143C、33D、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+i)=S(5+2)=4*7*5+2+1=143。5、設(shè)有宏定義:#defineIsDIV(k,n)((k%n=1)?1:0)且變量m已正確定義并賦值,則宏調(diào)用:IsDIV(m,5)&&IsDIV(m,7)為真時(shí)所要表達(dá)的是A、判斷m是否能被5和7整除B、判斷m被5或者7整除是否余1C、判斷m被5和7整除是否都余1D、判斷m是否能被5或者7整除標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:本題考查宏定義和三目運(yùn)算符。三目運(yùn)算符的格式為:test?語(yǔ)句1:語(yǔ)句2其中,test可以是任何Boolean表達(dá)式。語(yǔ)句1,當(dāng)test是true時(shí)執(zhí)行該語(yǔ)句,可以是復(fù)合語(yǔ)句;語(yǔ)句2,當(dāng)test是false時(shí)執(zhí)行該語(yǔ)句,可以是復(fù)合語(yǔ)句。isDIV(k,n)要表達(dá)的是當(dāng)k除n的余數(shù)是1時(shí)表達(dá)式的值為1,否則為0,所以題中要表達(dá)的是m被5和7整除是否都余1。6、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#defineSUB(a)(a)-(a)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d\n",d);}A、-12B、0C、10D、-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。7、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#definefix)x*x*xmain(){inta=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d\n",s,t);}A、10,10B、10,64C、64,10D、64,64標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:根據(jù)題目中宏f(x)的定義,運(yùn)算過(guò)程應(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。8、有下列程序,程序的運(yùn)行結(jié)果是#include<stdio.h>#defineN5#deftfieMN+1#definefi[x)(x*M)main(){inti1,i2;i1=f(2);i2=f(1+1);printf("%d%d\n",i1,i2);}A、127B、1212C、1111D、117標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在本題中,定義了3個(gè)宏定義語(yǔ)句,分別是:#defineN5、#defineMN+5和#definef(x)(x*M),所以根據(jù)C語(yǔ)言的宏替換規(guī)則,我們可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。9、以下敘述中錯(cuò)誤的是A、預(yù)處理命令行的最后不能以分號(hào)表示結(jié)束B(niǎo)、C程序?qū)︻A(yù)處理命令行的處理是在程序執(zhí)行的過(guò)程中進(jìn)行的C、#defineMAX是合法的宏定義命令行D、在程序中凡是以“#”開(kāi)始的語(yǔ)句行都是預(yù)處理命令行標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:預(yù)處理命令行是以“#”開(kāi)始的語(yǔ)句,預(yù)處理命令行的最后不能以分號(hào)表示結(jié)束,預(yù)處理命令行。其中宏定義的字符替換的定義格式為:#define標(biāo)識(shí)符字符串,預(yù)處理命令行是在系統(tǒng)對(duì)源程序進(jìn)行編譯之前進(jìn)行處理的,不是在程序執(zhí)行的過(guò)程中。10、若程序中有宏定義行:#defineN100則以下敘述中正確的是A、宏定義行中定義了標(biāo)識(shí)符N的值為整數(shù)100B、上述宏定義行實(shí)現(xiàn)將100賦給標(biāo)示符NC、在運(yùn)行時(shí)用100替換標(biāo)識(shí)符ND、在編譯程序?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ò)程。由#define定義的宏就是編譯預(yù)處理命令。C程序在進(jìn)行編譯之前,都要先對(duì)程序中所有出現(xiàn)的“宏名”,都用宏定義中的替換文本進(jìn)行替換。11、若有以下程序,則程序的輸出結(jié)果是#defineS(x)x*x#defineT(x)S(x)*S(x)main(){intk=5,j=2;printf("%d,%d\n",S(k+j),T(k+j));}A、17,37B、49,2401C、17,289D、49,289標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題考查了宏替換,宏替換就是簡(jiǎn)單的字符替換,不會(huì)進(jìn)行語(yǔ)法錯(cuò)誤檢查也不會(huì)進(jìn)行運(yùn)算?!癝(k+j)”宏展開(kāi)以后為“k+j*k+j”,值為17,“T(k+j)”宏展開(kāi)以后為“k+i*k+j*k+j*k+j”,值為37。12、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){printf("%d\n",NUM);}A、4B、8C、9D、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ì)算。13、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#defineSUB(X,Y)(X+1)*Ymain(){inta=3,b=4;printf("%d\n",SUB(a++,b++));}A、20B、12C、16D、25標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:宏展開(kāi)的結(jié)果(a+++1)*b++,后綴自加表達(dá)式參加運(yùn)算,先用a和b的初值得到表達(dá)式的值,進(jìn)行計(jì)算,然后a和b在自加。因此計(jì)算結(jié)果為16。14、下面選項(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ù)到源文件的末尾。15、有以下程序,程序的輸出結(jié)果是#include<stdio.h>#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}A、0B、1C、9D、10標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:SQR(k+m)宏展開(kāi)以后為k+m*k+m,值為5,表達(dá)式a/=SQR(k+m)/SQR(k+m)為a=a/(5+5),表達(dá)式值為1。16、以下敘述中正確的是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ī)則:①包含文件的#include命令行通常應(yīng)書寫在所用源程序文件的開(kāi)頭,故有時(shí)也把包含文件稱作“頭文件”。頭文件名可以由用戶指定,其后綴不一定用“.h”;②包含文件中,一般包含有一些公用的#define命令行、外部說(shuō)明或?qū)?庫(kù))函數(shù)的原型說(shuō)明;③當(dāng)包含文件修改后,對(duì)包含該文件的源程序必須重新進(jìn)行編譯連接;④在一個(gè)程序中,允許有任意多個(gè)#include命令行;⑤在包含文件中還可以包含其他文件。17、有以下程序,程序的運(yùn)行結(jié)果是#include<stdio.h>#include<stdlib.h>intfun(intn){int*p;p=(int*)malloc(sizeoffint));*p=n;return*p;main(){inta;a=fun(10);}printf("%d\n",a+fun(10));}A、10B、20C、0D、出錯(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。18、有以下程序,程序運(yùn)行后的輸出結(jié)果是#include<stdio.h>#include<stdlib.h>main(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;pfintf("%d,%d,%d\n",*a,*b,*c);}A、2,2,3B、3,3,3C、1,2,3D、1,1,3標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:a=b=c=(int*)malloc(sizeof(int));含義為申請(qǐng)了一個(gè)整型的存儲(chǔ)空間,讓指針a,b,c分別指向它,*a=1;*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。19、有以下程序,程序運(yùn)行后的輸出結(jié)果是voidfun(int*p1,int*p2,int*s){s=(int*)malloc(sizeof(int));*s=*p1+*(p2++);}main(){inta[2]={1,2},b[2]={10,20},*s=a;fun(a,b,s);printf("%d\n",*s);}A、10B、11C、2D、1標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:主函數(shù)中定義指針s指向數(shù)組a,調(diào)用fun函數(shù),首先是實(shí)參傳給形參,因此p1指向a,p2指向b,s指向a,即*s的值為1。流程到調(diào)用函數(shù)。fun執(zhí)行,首先更改s的指向?yàn)樾路挚臻g的首地址,表達(dá)式*s=*p1+*(p2++),取p1指向數(shù)據(jù)位1,加上p2指向數(shù)據(jù)10,p2后移,存放到s指向的空間中11流程結(jié)束,形參s和p1,p2撤銷,存入s指向空間的數(shù)據(jù)丟失,主函數(shù)輸出s指向數(shù)據(jù)仍然是1。20、有以下程序段int*p;p=_______malloc(sizeof(int));若要求使P指向一個(gè)int型的動(dòng)態(tài)存儲(chǔ)單元,在橫線處應(yīng)填入的是A、(int*)B、intC、int*D、(*int)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:ANSIC標(biāo)準(zhǔn)規(guī)定malloc函數(shù)返回值的類型為void*。使用形式為:malloc(size),其中size的類型為unsignedint。malloc函數(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)換為需要類型的地址。21、有以下程序,程序的輸出結(jié)果是voidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}A、1.10B、11.10C、12.10D、21.10標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:ANSIC標(biāo)準(zhǔn)規(guī)定calloc函數(shù)返回值的類型為void*。具體使用格式為:calloc(n,size)。該函數(shù)用來(lái)給n個(gè)同一類型的數(shù)據(jù)項(xiàng)分配連續(xù)的存儲(chǔ)空間,每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度為size個(gè)字節(jié)。若分配成功,函數(shù)返回存儲(chǔ)空間的首地址:否則返回空。通過(guò)調(diào)用calloc函數(shù)所分配的存儲(chǔ)單元,系統(tǒng)自動(dòng)置初值0。主函數(shù)中定義數(shù)組a,b,以及指針s指向數(shù)組a,調(diào)用fun函數(shù),實(shí)參a和b,以及s的值傳遞給相對(duì)應(yīng)形參p1,p2,以及s,在fun函數(shù)中更改s的指向,以及指向的數(shù)據(jù),但是函數(shù)調(diào)用結(jié)束以后,形參空間撤銷,這項(xiàng)改變對(duì)于實(shí)參沒(méi)有影響,因此實(shí)參s指向值不變,仍然為1.1。22、設(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即可。23、設(shè)有定義語(yǔ)句int(*f)(int);則以下敘述正確的是A、f是基類型為int的指針變量B、f是指向int類型一維數(shù)組的指針變量C、f是指向函數(shù)的指針變量,該函數(shù)具有一個(gè)int類型的形參D、f是函數(shù)名,該函數(shù)的返回值是基類型為int類型的地址標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:定義語(yǔ)句int(*f)(int)中f是指向函數(shù)的指針變量,該函數(shù)中也只有一個(gè)int型的形參。24、以下敘述中正確的是A、指針變量只能通過(guò)求地址運(yùn)算符(&)來(lái)獲得地址值B、語(yǔ)句“p=NULL;”與“p=\0;”是等價(jià)的語(yǔ)句C、“int*p1;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ù)獲得地址值。另外NULL是在stdio.h頭文件中定義的預(yù)定義符。NULL的代碼值為0??梢越o指針變量賦NULL值。例如p=NULL;賦值語(yǔ)句,稱p為空指針。這條語(yǔ)句等價(jià)于p=’\0’;或p=0;這時(shí),指針p并不是指向地址為0的存儲(chǔ)單元,而是具有一個(gè)確定的值——“空”。25、以下敘述中正確的是A、函數(shù)的類型不能是指針類型B、函數(shù)的形參類型不能是指針類型C、基類型不同的指針變量可以相互混用D、設(shè)有指針變量為“double*p”,則“p+1”將指針P移動(dòng)8個(gè)字節(jié)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在對(duì)指針進(jìn)行加、減算術(shù)運(yùn)算時(shí),數(shù)字1表示1個(gè)存儲(chǔ)單元的長(zhǎng)度,而double類型數(shù)據(jù)在內(nèi)存中占8個(gè)字節(jié),因此移動(dòng)一次移動(dòng)8個(gè)字節(jié)。其他三個(gè)都不正確。26、設(shè)有某函數(shù)的說(shuō)明為int*func(inta[10],intn);則下列敘述中,正確的是A、說(shuō)明中的a[10]寫成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ù)fimc為返回值為指針的函數(shù),有兩個(gè)形參,形參數(shù)組a為指針變量,保存實(shí)參數(shù)組的首地址,其元素個(gè)數(shù)由實(shí)參數(shù)組決定,因此說(shuō)明中的a[10]寫成a[]或*a效果完全一樣。國(guó)家二級(jí)C語(yǔ)言(編譯預(yù)處理和指針)機(jī)試模擬試卷第4套一、選擇題(本題共26題,每題1.0分,共26分。)1、有以下程序#include<stdio.h>voidfun(int*a,int*b){int*c;c=a:a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d,",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序運(yùn)行后的輸出結(jié)果是A、3,5,5,3B、3,5,3,5C、5,3,3,5D、5,3,5,3標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:本題考查函數(shù)的調(diào)用與指針。p和q分別為指向x和y的指針,函數(shù)fun()的兩個(gè)形參均為指針型,主要功能為交換兩個(gè)指針的指向,當(dāng)調(diào)用結(jié)束以后,該操作不能返回主函數(shù)。而主函數(shù)中,fun(p,q)、fun(&x,&y1)的實(shí)參均為x與y的地址,因此,兩者結(jié)果相同,并且兩者指針指向的值不能變化。2、有下列程序:voidf(intb[]){intI;for(i=2;i<6;i++)b[i]*=2;}main(){inta[10]={1,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ù)組a[10]中從a[2]到a[5]的各個(gè)數(shù)字乘以2,因而數(shù)組a[10]的元素就變成了{(lán)1,2,6,8,10,12,7,8,9,10}。3、有以下程序#include<stdio.h>intfun(chars[]){intn=0;while(*s<=’9’&&*s>=’0’){n=10*n+*s-0’;s++;}return(n];}main(){charsi10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};printf("%d\n",fun(s));}程序的運(yùn)行結(jié)果是A、61490B、61C、9D、5標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在fun函數(shù)中,while循環(huán)的功能是逐個(gè)取字符數(shù)組s的字符判斷其是否是數(shù)字。若是則將這些數(shù)字組成一個(gè)數(shù)保存到變量n中,并返回變量n的值。所以在主函數(shù)中調(diào)用fun(s)時(shí),將把字符數(shù)組s中的數(shù)字組成一個(gè)數(shù)輸出。因?yàn)楫?dāng)指針s指向數(shù)組的第3位時(shí),即字符’*’,循環(huán)條件不成立,循環(huán)結(jié)束,返回n的值。所以輸出n的值為61。4、若有以下程序#include<stdio.h>voidsp(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,4B、4,3,3C、6,3,6D、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)于b=b*2,得到*a的數(shù)據(jù)4輸出。函數(shù)調(diào)用結(jié)束,此時(shí)a和b的空間撤銷,而對(duì)實(shí)參k和p的值并沒(méi)有改變,仍舊是3。5、若有以下程序#include<stdio.h>intk=7;voidflint**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",i,*p,*r);}則程序的輸出結(jié)果是A、3,7,7,7,7,7B、7,7,7,3,3,3C、3,3,3,7,7,7D、7,7,7,3,7,7標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:本題考查了二級(jí)指針,二級(jí)指針可以保存一級(jí)指針的地址。主函數(shù)中p指向i,r指向p,函數(shù)調(diào)用后s指向p,在f函數(shù)中t指向全局變量k=7,s指向t,同時(shí)s保存了實(shí)參p的地址,此時(shí)p也指向t,輸出三個(gè)7,流程轉(zhuǎn)到主函數(shù),i的值為3,p以及r的值為7。6、若有以下程序#include<stdio.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);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}則程序的輸出結(jié)果是A、3,5,5,3,5B、5,3,5,3,5C、5,3,3,5,5D、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=5。7、若有以下程序#include<stdio.h>voidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b:*a=*a*2;printf("%d,",*a);}main(){intk=3;sp(&k);printf("%d\n",k);}則程序的輸出結(jié)果是A、6,4,6B、6,4,3C、6,12,12D、9,4,9標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題考查了指針作為函數(shù)的參數(shù),可以接收實(shí)參變量的地址,改變實(shí)參的值。主函數(shù)調(diào)用sp(&k),執(zhí)行sp函數(shù)a指向向k,執(zhí)行語(yǔ)句*a=*a*2后a指向空間的值k的值為6,改變a的指向以后,此時(shí)a指向b,則執(zhí)行*a=*a*2以后,a指向空間b的值為4。調(diào)用結(jié)束返回主函數(shù),輸出k的值為6。8、若有以下程序#include<stdio.h>intk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%ct,",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í)行,指針變量t指向k,s指向t,此時(shí)更改了s的指向,s指向了t,更改了s指向的地址空間內(nèi)容為m的地址,同時(shí)t也指向變量m,因此**s的值為m的值,*t為m的值,k為7。流程返回到主函數(shù),沒(méi)有對(duì)主函數(shù)空間的數(shù)據(jù)和指向作出更改,因此全部為3。9、若有以下程序#include<stdio.h>int*f(int*s,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("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}則程序的輸出結(jié)果是A、3,5,5,3,5B、3,5,3,5,5C、5,3,5,3,5D、5,3,3,5,5標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:函數(shù)f為返回值為指針的函數(shù),主要功能是返回s和t指向空間值大的數(shù)據(jù)的地址,同時(shí)如何s指向空間數(shù)據(jù)大于t指向空間的數(shù)據(jù),那么交換。主函數(shù)p和q指向i和j,值為3和5,{的值大于i的值,因此調(diào)用函數(shù)f以后,返回j的地址,r指向i,同時(shí)i和j的值交換,i=5,j=3,p和q的指向不變,p指向i,q指向j。10、有以下程序#include<stdio.h>intfuna(inta,intb){returna+b;}intfunb(inta,intb){returna-b;}intsss(int(*t)(),intx,inty){return((*t)(x,y));}main(){intx;X=sss(funa,9,3);x+=sss(funb,8,3);printf("%d\n",x);}程序運(yùn)行后的輸出結(jié)果是A、17B、23C、24D、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ù)的地址傳遞給t,因此sss函數(shù)成為求兩個(gè)數(shù)據(jù)的和12,繼續(xù)將funb函數(shù)地址傳給t,求兩個(gè)數(shù)據(jù)差為5,和s累加后結(jié)果為17。11、有以下程序voidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}main(){inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf("%d%d\n",c,d);}程序的輸出結(jié)果是A、43B、34C、71D、00標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:函數(shù)fun有四個(gè)形參,功能是利用參數(shù)的地址傳遞來(lái)計(jì)算前兩個(gè)參數(shù)的和與差。主函數(shù)中調(diào)用fun函數(shù)c計(jì)算4+3,d計(jì)算4.3值為1。12、有以下程序voidfun(int*p,int*q){intt;t=*p;*p=*q;*q=t;*q=*p;}main(){inta=0,b=9;fun(&a,&b);printf("%d%d\n",a,b);}程序的輸出結(jié)果是A、00B、99C、90D、09標(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。13、有以下程序charfun(char*c){if(*c<=’Z’&&*c>=’A’)*c-=’A’-’a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}printf("\n");}若運(yùn)行時(shí)從鍵盤上輸入OPENTHEDOOR,程序的輸出結(jié)果是A、oPENtHEdOORB、openthedoorC、OPENTHEDOORD、OpenTheDoor標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:函數(shù)fun的主要功能是判斷字符是否為大寫字符,如果是則轉(zhuǎn)換為小寫字符,主函數(shù)讀入大寫字符串,轉(zhuǎn)換成小寫。14、有以下程序voidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;}main(){char*s1="abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2);}程序執(zhí)行后的輸出結(jié)果是A、abc,123B、123,abcC、321,cbaD、1bc,a23標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:函數(shù)voidswap(char*x,char*y)的功能是交換兩個(gè)字符*x和*y中的內(nèi)容。在主函數(shù)中字符指針s1指向字符串’abc’,s2指向字符串’123’。所以函數(shù)swap(s1,s2)的執(zhí)行結(jié)果就是字符’a’和’1’相互交換。15、有以下函數(shù)intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++;}returnn;}函數(shù)的功能是A、查找x和y所指字符串中是否有’\0’B、統(tǒng)計(jì)x和y所指字符串中最前面連續(xù)相同的字符個(gè)數(shù)C、將y所指字符串賦給x所指存儲(chǔ)空間D、統(tǒng)計(jì)x和y所指字符串中相同的字符個(gè)數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在while循環(huán)中的判斷表達(dá)式為(*x==*y)&&*x!=’\0’,所以只要字符串x與y的當(dāng)前字符不相等時(shí),循環(huán)就結(jié)束。16、有以下函數(shù)intfun(char*s){char*t=s;while(*t++);return(t-s);}該函數(shù)的功能是A、比較兩個(gè)字符串的大小B、計(jì)算s所指

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論