國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)_第1頁
國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)_第2頁
國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)_第3頁
國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)_第4頁
國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

國家二級C語言(編譯預(yù)處理和指針)機(jī)試模擬試卷16(題后含答案及解析)題型有:1.選擇題選擇題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正確答案:B解析:本題考查函數(shù)的調(diào)用與指針。p和q分別為指向x和y的指針,函數(shù)fun()的兩個形參均為指針型,主要功能為交換兩個指針的指向,當(dāng)調(diào)用結(jié)束以后,該操作不能返回主函數(shù)。而主函數(shù)中,fun(p,q)、fun(&x,&y1)的實參均為x與y的地址,因此,兩者結(jié)果相同,并且兩者指針指向的值不能變化。知識模塊:編譯預(yù)處理和指針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,正確答案:C解析:函數(shù)voidf(intb[])的功能是對數(shù)組b[]中第2個到第5個元素的值逐個擴(kuò)大2倍。所以在main()函數(shù)中,f(a)語句的作用是對數(shù)組a[10]中從a[2]到a[5]的各個數(shù)字乘以2,因而數(shù)組a[10]的元素就變成了{(lán)1,2,6,8,10,12,7,8,9,10}。知識模塊:編譯預(yù)處理和指針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正確答案:B解析:在fun函數(shù)中,while循環(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。知識模塊:編譯預(yù)處理和指針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正確答案:B解析:主函數(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é)束,此時a和b的空間撤銷,而對實參k和p的值并沒有改變,仍舊是3。知識模塊:編譯預(yù)處理和指針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正確答案:D解析:本題考查了二級指針,二級指針可以保存一級指針的地址。主函數(shù)中p指向i,r指向p,函數(shù)調(diào)用后s指向p,在f函數(shù)中t指向全局變量k=7,s指向t,同時s保存了實參p的地址,此時p也指向t,輸出三個7,流程轉(zhuǎn)到主函數(shù),i的值為3,p以及r的值為7。知識模塊:編譯預(yù)處理和指針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正確答案: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=5。知識模塊:編譯預(yù)處理和指針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正確答案:A解析:本題考查了指針作為函數(shù)的參數(shù),可以接收實參變量的地址,改變實參的值。主函數(shù)調(diào)用sp(&k),執(zhí)行sp函數(shù)a指向向k,執(zhí)行語句*a=*a*2后a指向空間的值k的值為6,改變a的指向以后,此時a指向b,則執(zhí)行*a=*a*2以后,a指向空間b的值為4。調(diào)用結(jié)束返回主函數(shù),輸出k的值為6。知識模塊:編譯預(yù)處理和指針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,正確答案: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指向t,此時更改了s的指向,s指向了t,更改了s指向的地址空間內(nèi)容為m的地址,同時t也指向變量m,因此**s的值為m的值,*t為m的值,k為7。流程返回到主函數(shù),沒有對主函數(shù)空間的數(shù)據(jù)和指向作出更改,因此全部為3。知識模塊:編譯預(yù)處理和指針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正確答案:C解析:函數(shù)f為返回值為指針的函數(shù),主要功能是返回s和t指向空間值大的數(shù)據(jù)的地址,同時如何s指向空間數(shù)據(jù)大于t指向空間的數(shù)據(jù),那么交換。主函數(shù)p和q指向i和j,值為3和5,{的值大于i的值,因此調(diào)用函數(shù)f以后,返回j的地址,r指向i,同時i和j的值交換,i=5,j=3,p和q的指向不變,p指向i,q指向j。知識模塊:編譯預(yù)處理和指針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正確答案:A解析:函數(shù)funa的功能計算兩個數(shù)據(jù)的和,funb的功能計算兩個數(shù)據(jù)的差,函數(shù)SSS中利用指向函數(shù)的指針作為函數(shù)的參數(shù),可以在調(diào)用的時候,根據(jù)接收的函數(shù)地址來決定調(diào)用那一個函數(shù)。主函數(shù)中調(diào)用x=sss(funa,9,3),將funa函數(shù)的地址傳遞給t,因此sss函數(shù)成為求兩個數(shù)據(jù)的和12,繼續(xù)將funb函數(shù)地址傳給t,求兩個數(shù)據(jù)差為5,和s累加后結(jié)果為17。知識模塊:編譯預(yù)處理和指針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正確答案:C解析:函數(shù)fun有四個形參,功能是利用參數(shù)的地址傳遞來計算前兩個參數(shù)的和與差。主函數(shù)中調(diào)用fun函數(shù)c計算4+3,d計算4.3值為1。知識模塊:編譯預(yù)處理和指針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正確答案: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。知識模塊:編譯預(yù)處理和指針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)行時從鍵盤上輸入OPENTHEDOOR,程序的輸出結(jié)果是A.oPENtHEdOORB.openthedoorC.OPENTHEDOORD.OpenTheDoor正確答案:B解析:函數(shù)fun的主要功能是判斷字符是否為大寫字符,如果是則轉(zhuǎn)換為小寫字符,主函數(shù)讀入大寫字符串,轉(zhuǎn)換成小寫。知識模塊:編譯預(yù)處理和指針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.a(chǎn)bc,123B.123,abcC.321,cbaD.1bc,a23正確答案:D解析:函數(shù)voidswap(char*x,char*y)的功能是交換兩個字符*x和*y中的內(nèi)容。在主函數(shù)中字符指針s1指向字符串’abc’,s2指向字符串’123’。所以函數(shù)swap(s1,s2)的執(zhí)行結(jié)果就是字符’a’和’1’相互交換。知識模塊:編譯預(yù)處理和指針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)計x和y所指字符串中最前面連續(xù)相同的字符個數(shù)C.將y所指字符串賦給x所指存儲空間D.統(tǒng)計x和y所指字符串中相同的字符個數(shù)正確答案:B解析:在while循環(huán)中的判斷表達(dá)式為(*x==*y)&&*x!=‘\0’,所以只要字符串x與y的當(dāng)前字符不相等時,循環(huán)就結(jié)束。知識模塊:編譯預(yù)處理和指針16.有以下函數(shù)intfun(char*s){char*t=s;while(*t++);return(t-s);}該函數(shù)的功能是A.比較兩個字符串的大小B.計算s所指字符串的長度C.計算s所指字符串占用內(nèi)存字節(jié)的個數(shù)D.將s所指字符串復(fù)制到字符串t中正確答案:C解析:在函數(shù)fun(char*s)中,首先用字符指針變量t指向s,而循環(huán)語句while(*t++);的功能是使指針變量t指向字符串變量s的末尾,這時退出循環(huán),因而語句return(t-s);返回的就是字符串s所指字符串的長度。知識模塊:編譯預(yù)處理和指針17.有以下程序(說明:字母A的ASCII碼值是65)voidfun(char*s){while(*s){if(*s%2)printf(“%c”,*s);s++;}}main(){chara[]=“BYTE”;fun(a);printf(“\n”);}程序運(yùn)行后的輸出結(jié)果是A.BTB.YEC.YTD.BY正確答案:B解析:程序只輸出字母ASCII值為奇數(shù)的字母,根據(jù)字母B,Y,T,E的.ASCII值的奇偶性相應(yīng)輸出。知識模塊:編譯預(yù)處理和指針18.有以下程序#include<stdio.h>voidfun(char**p){++p;printf(“%s\n”,*p);}main(){char*a[]=(“Morning”,”Afternoon”,”Evening”,”Night”);fun(a);}程序的運(yùn)行結(jié)果是A.fternoonB.MorningC.omingD.Afternoon正確答案:D解析:在程序中,指針的指針變量a和p都是指向字符串的指針。執(zhí)行fun(a)語句時,p指向的是字符串?dāng)?shù)組a的第一個字符串“Morning”,p自加1之后,*p指向了字符串?dāng)?shù)組a的第2個字符串“Aftemoon”。知識模塊:編譯預(yù)處理和指針19.有以下程序voidfunl(char*p){char*q;q=p;while(*q!=‘\0’){(*q)++;q++;}}main(){chara[]={“Program”),*p;p=&a[3];fun1(p);printf(“%s\n”,a);}程序執(zhí)行后的輸出結(jié)果是A.PrphsbnB.ProhsbnC.ProgsbnD.Program正確答案:B解析:在函數(shù)voidfunl(char*p)中,語句(*q)++的功能是q所指的字符加1,變成其后面的字符;q++就是指針q指向下一個字符的位置。所以在主函數(shù)中,語句p=&a[3]的作用是使指針p指向字符數(shù)組a[]中的第四個字符的位置,即p指向字符’g’;然后調(diào)用函數(shù)funl(p)后,字符’g’變成’g’,字符’h’變成’s’,字符’a’變成’b’,字符’m’變成’n’,因而字符數(shù)組a[]中的內(nèi)容就成“Prohsbn”。知識模塊:編譯預(yù)處理和指針20.有以下程序#include<stdio-h>voidfun(char*a,char*b){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(chǎn)*bB.*****a*bC.a(chǎn)*b****D.a(chǎn)b正確答案:C解析:主函數(shù)main()定義了指向字符串的指針和一個字符數(shù)組,接著調(diào)用fun(s,t)函數(shù),進(jìn)行實參向形參傳遞,函數(shù)fun()第一個while語句判斷*a中的值為“*”時繼續(xù)掃描,當(dāng)遇到不是“*”時結(jié)束,接著第二個while循環(huán)語句,將*a中從“a”開始的后續(xù)所有字符都賦予*b,也就是t[80]中的內(nèi)容為“a*b****”。知識模塊:編譯預(yù)處理和指針21.下列函數(shù)的功能是voidfun(char*a,char*b){while((*b=*a)!=‘\0’){a++;b++;}}A.使指針b指向a所指字符串B.將a所指字符串和b所指字符串進(jìn)行比較C.將a所指字符串賦給b所指空間D.檢查a和b所指字符串中是否有’\0’正確答案:C解析:在while語句的條件中是把字符*a的值賦給字符*b,然后再判斷字符*b的值是否等于字符串的結(jié)束字符(‘\0’),當(dāng)不等于結(jié)束字符(‘\0’)時,把字符指針變量a,b分別加1,指它們的下一個字符,直到字符串a(chǎn)的結(jié)束。這樣程序執(zhí)行的結(jié)果就是把字符串a(chǎn)賦給了b所指的存儲空間。知識模塊:編譯預(yù)處理和指針22.有以下程序#include<stdio.h>#include<string.h>voidfun(chars[][10],intn){chart;inti,j;for(i=0;i<n-1;i++)for0=i+1;j<nj++)if(s[i][0]>s[j][0]){t=s[i][0];s[][0]=s[j][0];s[j][0]=t;}}main(){charss[5][10]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);}程序的運(yùn)行結(jié)果是A.a(chǎn)aaacc,xyB.bcc,aabccC.xy,aaaaccD.a(chǎn)abcc,bcc正確答案:C解析:函數(shù)fun(chars[][10],intn)通過兩重for循環(huán)語句,比較二維字符數(shù)組s[][10]的每個字符串的首字符大小,如果前一個字符串首字符大于后一個字符串的首字符,則交換這兩個字符串的首字符。在主函數(shù)中,語句fun(ss,5)的作用是對二維字符數(shù)組ss[5][10]的5個字符串的首字符進(jìn)行從小到大的排序,不影響各個字符串另外的字符。所以排序結(jié)束后,5個字符串的第一個字符依次變?yōu)閍、a、b、b和x;最后輸出第1個和第4個字符串。知識模塊:編譯預(yù)處理和指針23.有以下程序#include<stdio.h>voidfun(char*t,char*s){while(*t!=0)t++;while((*t++=*s++)!=0);}main(){charss[10]=“acc”,aa[10]=“bbxxyy”;fun(ss,aa);printf(“%s,%s\n”,ss,aa);}程序的運(yùn)行結(jié)果是A.a(chǎn)cc,bbxxyyB.a(chǎn)ccxxyy,bbxxyyC.a(chǎn)ccbbxxyy,bbxxyyD.a(chǎn)ccxyy,bbxxyy正確答案:C解析:fun函數(shù)中,第1個while循環(huán)語句使指針t指向字符串的末尾,第2個while循環(huán)語句實現(xiàn)了字符串t和s的連接。主函數(shù)中語句fun(ss,aa)的功能是將字符串a(chǎn)a連接到字符串ss的末尾。知識模塊:編譯預(yù)處理和指針24.有以下程序#include<stdio.h>#include<string.h>voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;whil

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論