版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
國家二級C語言(函數(shù)和數(shù)組)機(jī)試模擬試卷1(共9套)(共255題)國家二級C語言(函數(shù)和數(shù)組)機(jī)試模擬試卷第1套一、選擇題(本題共28題,每題1.0分,共28分。)1、有以下程序#include<stdio.h>intfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的輸出結(jié)果是A、14B、10C、15D、9標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:函數(shù)fun為遞歸定義的函數(shù),當(dāng)調(diào)用fun(5)-->5+fun(4)-->5+4+fun(3)-->5+4+3+fun(2)-->5+4+3+2+fun(1),因此最后的結(jié)果為15。2、有以下程序#include<stdio.h>intfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序運(yùn)行后的輸出結(jié)果是A、15B、21C、20D、31標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:本題考查了函數(shù)的調(diào)用,函數(shù)fun功能為求兩個數(shù)據(jù)的和。主函數(shù)中表達(dá)式r=fun(fun(x,y),z--),首先計算內(nèi)層調(diào)用fun(x,y),計算結(jié)果為13,然后外層調(diào)用fun(13,8),結(jié)果為21。3、以下選項(xiàng)中函數(shù)形參不是指針的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…}D、fun(intp[]){…}標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:C語言中形參數(shù)組是指針變量,其數(shù)組中元素的個數(shù)由傳遞的實(shí)參數(shù)組決定,因此可以在定義的時候,不給出元素個數(shù)的說明,因此選項(xiàng)B和D形參均為指針變量,選項(xiàng)A的定義在C語言中不存在的。4、設(shè)有如下函數(shù)定義intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若執(zhí)行調(diào)用語句:n=fun(3);,則函數(shù)fun總共被調(diào)用的次數(shù)是A、2B、4C、3D、5標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:這道題目考查了函數(shù)的遞歸調(diào)用,當(dāng)執(zhí)行調(diào)用語句n=fun(3)時,返回n=fun(2)+1,再執(zhí)行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。而函數(shù)fun總共被調(diào)用了3次。即fun(3),fun(2),fun(1)。5、有以下程序(strcat函數(shù)用以連接兩個字符串)#include<stdio.h>#include<string.h>main(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序運(yùn)行后的輸出結(jié)果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在字符串中字符’\0’表示字符串的結(jié)束標(biāo)志,所以字符串a(chǎn)和b相連接的結(jié)果為ABCDIJK。6、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}執(zhí)行程序時,給變量x輸入10,程序的輸出結(jié)果是A、54B、65C、45D、55標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:在C語言中函數(shù)可以遞歸調(diào)用,即直接或間接地自己調(diào)用自己。本題在函數(shù)intfun(intn)的定義中又出現(xiàn)了對函數(shù)fun的調(diào)用,所以函數(shù)fun是遞歸函數(shù)。因而在主函數(shù)中調(diào)用x=fun(x)時,當(dāng)輸入10賦給變量x時,遞歸調(diào)用的過程為:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+1=557、有以下程序fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}執(zhí)行后的輸出結(jié)果是A、3B、7C、0D、2標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:因?yàn)樵诤瘮?shù)fun(intx)中,如果參數(shù)x等于0或1時,返回值3。否則p=x-fun(x-2)這是一個遞歸函數(shù),所以在主函數(shù)調(diào)用fun(7)時,其過程為:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的輸出結(jié)果為2。8、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%d\n",f(a,9));}則程序的輸出結(jié)果是A、9B、1C、8D、5標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:主函數(shù)中調(diào)用f(a,9),遞歸函數(shù)的調(diào)用過程如下:f(a,9)?f(a,8)?f(a,7)?f(a,6)?f(a,5)?f(a,4)?f(a,3)?f(a,2)?f(a,1),f(a,1)得到返回值為a[0],值為8,遞歸過程開始回歸,回歸過程描述如下:8>a[1],返回8?8>a[2]不成立,返回a[2]的值為9……因此函數(shù)f的主要功能為計算數(shù)組中的最大值。主函數(shù)中輸出最大值為9。9、以下敘述中正確的是A、只有全局變量才有自己的作用域,函數(shù)中的局部變量沒有作用域B、只要是用戶定義的標(biāo)識符,都有一個有效的作用域C、只有在函數(shù)內(nèi)部定義的變量才是局部變量D、局部變量不能被說明為static標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在函數(shù)內(nèi)定義的變量是局部變量,而在函數(shù)之外定義的變量稱為外部變量,也是全局變量。全局變量可以為源文件中其他函數(shù)所共用,其作用域?yàn)閺亩x變量的位置開始到源文件結(jié)束。因此只要用戶定義的標(biāo)識符,全部都有作用域。局部變量可以說明為auto、register以及static。10、以下敘述中正確的是A、對于變量而言,“定義”和“說明”這兩個詞實(shí)際上是同一個意思B、在復(fù)合語句中不能定義變量C、全局變量的存儲類別可以是靜態(tài)類D、函數(shù)的形式參數(shù)不屬于局部變量標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:用static說明符說明全局變量時,此變量可稱作靜態(tài)全局變量。靜態(tài)全局變量只限于本編譯單位使用,不能被其他編譯單位所引用。在一個函數(shù)內(nèi)部定義的變量(包括形參)是局部變量,它只在本函數(shù)范圍內(nèi)有效。不同函數(shù)中可以使用相同名字的局部變量,它們代表不同的對象,互不影響。在函數(shù)內(nèi)部復(fù)合語句中也可以定義變量,這些變量都是局部變量,只在本復(fù)合語句中有效。11、有以下程序intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的輸出結(jié)果是A、96B、94C、84D、85標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:代碼考查點(diǎn)為全局變量和局部變量的同名問題,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內(nèi),訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。主函數(shù)執(zhí)行fun(3)時候,執(zhí)行調(diào)用函數(shù)fun,使用局部變量d=5,執(zhí)行d+=p++,相當(dāng)于d=d+(p++),得到d的值為8,輸出。函數(shù)調(diào)用結(jié)束,轉(zhuǎn)到主函數(shù),繼續(xù)執(zhí)行d+=a++,此時d為全局變量,執(zhí)行語句以后,d值為4。12、有以下程序#include<stdio.h>inta=1,b=2;voidfun1(inta,intb){printf(“%d%d”,a,b);}voidfun2(){a=3;b=4;}main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序運(yùn)行后的輸出結(jié)果是A、3456B、1256C、5612D、5634標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:函數(shù)fun1()的作用是輸出局部變量a和b的值,在主函數(shù)中執(zhí)行fun1(5,6)的結(jié)果是輸出5,6;函數(shù)fun2()的作用是給變量a和b分別賦值3,4;執(zhí)行fun2()的作用是輸出3,4。13、在一個C源程序文件中所定義的全局變量,其作用域?yàn)锳、由具體定義位置和extern說明來決定范圍B、所在程序的全部范圍C、所在函數(shù)的全部范圍D、所在文件的全部范圍標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:全局變量是在函數(shù)外部任意位置上定義的變量,它的作用域是從變量定義的位置開始,到整個源文件結(jié)束止。在同一編譯單位內(nèi)用extern說明符擴(kuò)展全局變量的作用域(當(dāng)全局變量定義在后,引用它的函數(shù)在前時,應(yīng)該在引用它的函數(shù)中用extern對此全局變量進(jìn)行說明,以便通知編譯程序:該變量是一個已在外部定義了的全局變量,已經(jīng)分配了存儲單元,不需要再為它分配存儲單元。這時全局變量的作用域從extern說明處起,延伸到該函數(shù)末尾)。當(dāng)一個程序由多個編譯單位構(gòu)成,并且在每個文件中均需要引用同一個全局變量,這時只在其中一個文件中定義所有的全局變量,而在其他用到這些全局變量的文件中用extern對這些變量進(jìn)行說明。14、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfun1(){a=’C’;b=’D’;}main(){fun1();printf("%c%c",a,b);fun2(’E’,’F’);}程序的運(yùn)行結(jié)果是A、ABEFB、CDEFC、ABCDD、CDAB標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在fun1()函數(shù)之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處到整個程序結(jié)束。在fun1()函數(shù)之內(nèi)定義了兩個變量a和b,并且分別初始化為字符’C’和’D’。在C語言中,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中此全局變量被屏蔽,在該函數(shù)內(nèi)訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。所以在主函數(shù)中,執(zhí)行fun1()后,變量a、b的值分別等于’C’、’D’,打印輸出CD,接著執(zhí)行fun2(’E’,’F’)語句,變量a、b的值變?yōu)椤疎’、’F’并輸出。15、有以下程序#include<stdio.h>fun(inta,intb){intstaticm=0,i=2;i=i+m+1;m=i+a+b;returnm;}main(){intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序運(yùn)行后的輸出結(jié)果是A、8,17B、7,16C、8,8D、7,17標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:本題考查了靜態(tài)變量以及局部變量的同名問題。主函數(shù)中調(diào)用fun函數(shù)兩次,第一次調(diào)用fun(4,1),形參a和b接收以后,i值為3,m的值為8,調(diào)用結(jié)束返回8存放到p中并且輸出p的值為8,除了靜態(tài)變量m和i,變量a,b撤銷。第二次調(diào)用fun(4,1),接收實(shí)參值以后,i為3+8+1,而m為12+4+1,即輸出函數(shù)值17。16、有以下程序#include<stdio.h>func(intn){staticintnum=1;num=num+n;printf("%d",num);}voidmain(){func(3);func(4);printf("\n");}程序運(yùn)行后的輸出是A、45B、35C、48D、34標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)func(intn)中定義了局部靜態(tài)變量num,,其初始值等于1,所以在主函數(shù)中執(zhí)行func(3),輸出4,此時靜態(tài)變量num的值等于4,當(dāng)退出函數(shù)func(3)時,其值不會丟失,所以當(dāng)在執(zhí)行func(4)時,輸出8。17、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}執(zhí)行后的輸出結(jié)果是A、5,5B、5,11C、11,11D、11,5標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:子函數(shù)fun(intx,inty),將變量m和i聲明為局部靜態(tài)變量,因此第1次調(diào)用主函數(shù)后,局部靜態(tài)變量m和i的值為5和3,第1次函數(shù)調(diào)用結(jié)束時,它們的值不釋放保持不變,所以第2次調(diào)用時,局部靜態(tài)變量m和i的初始值分別為5和3,即在執(zhí)行“i+=m+1”時,i的值為9,因此最終m的值為11。18、在C語言中,只有在使用時才占用內(nèi)存單元的變量,其存儲類型是A、extern和registerB、auto和staticC、static和registerD、auto和register標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:在C語言中,動態(tài)變量(auto)存儲在內(nèi)存中的動態(tài)存儲區(qū),在程序運(yùn)行中,只有當(dāng)調(diào)用變量所在的函數(shù)時,系統(tǒng)才臨時給變量分配內(nèi)存單元;全局變量(extern)一經(jīng)定義,系統(tǒng)為其分配固定的內(nèi)存單元;靜態(tài)變量(static),編譯系統(tǒng)為其分配固定的存儲空間;寄存器變量(register)不保存在內(nèi)存上,而是直接存儲在CPU的寄存器中。19、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、0B、10C、30D、64標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:本題考查了靜態(tài)局部變量,該局部變量的值在函數(shù)調(diào)用結(jié)束后如果不消失而保留原值。函數(shù)fun的功能返回2的乘方,主函數(shù)fun函數(shù)調(diào)用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即為2*4*8,值為64。20、有以下程序#include<stdio.h>intf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);}intf(intn){staticinta=1;n+=a++;returnn;}程序運(yùn)行后的輸出結(jié)果是A、9B、8C、7D、10標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在主函數(shù)中第一次調(diào)用f(a)時,得到變量s的值等于4,在第二次調(diào)用f(a)時,在子函數(shù)f中由于變量a是一個局部靜態(tài)變量,所以這次其值等于2,因而在主函數(shù)中第二次調(diào)用f(a)后,其返回值等于5,最后變量s的值等于9。21、有以下程序#include<stdio.h>intfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、11B、21C、6D、120標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:這道試題主要考查了局部靜態(tài)變量的應(yīng)用。在函數(shù)fun()中定義了局部靜態(tài)變量整型x,其初值等于1,在主函數(shù)中循環(huán)執(zhí)行5次,第一次變量s的值等于3,變量x的值等于2,第二次變量s的值等于6,變量x的值等于3,第三次變量s的值等于10,變量x的值等于4,第四次變量s的值等于15,變量x的值等于5,第五次變量s的值等于21,變量x的值等于6。22、有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);}A、50B、45C、60D、55標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)intfun(intx[],intn)的定義中,變量sum使用了static修飾符,這說明了變量sum為一個靜態(tài)局部變量。由于在整個程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存中的靜態(tài)存儲區(qū)中占據(jù)著永久的存儲單元。即使退出函數(shù)之后,下次再進(jìn)入該函數(shù)時,靜態(tài)局部變量繼續(xù)使用原來存儲單元中原來的值。函數(shù)intfun(intx[],intn)的功能是求出數(shù)組x[]各個元素的和。所以在主函數(shù)中,調(diào)用函數(shù)Fun(a,5)后,變量sum=1+2+3+4+5=15,當(dāng)再次調(diào)用Fun(b,4)后,變量sum=15+6+7+8+9=45,所以s=15+45=60。23、有以下程序intf(intm){staticintn=0;n+=m;returnn;}main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序運(yùn)行后的輸出結(jié)果是A、1,1B、1,2C、2,3D、3,3標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:由于在函數(shù)f中,變量n為靜態(tài)局部變量,所以在主函數(shù)中第一次調(diào)用函數(shù)f后,變量n的值等于1,當(dāng)?shù)诙{(diào)用函數(shù)f時,在函數(shù)f的內(nèi)部靜態(tài)局部變量n的值仍然保留等于1,所以返回函數(shù)值等于2。24、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、4B、1C、0D、8標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在子函數(shù)fun()中定義局部靜態(tài)變量x,其初值等于1,然后再把其值擴(kuò)大1倍后返回。在主函數(shù)中執(zhí)行for循環(huán)語句2次,調(diào)用函數(shù)fun()兩次,所以變量s的值等于4。這里要強(qiáng)調(diào)的一點(diǎn)是當(dāng)函數(shù)fun()執(zhí)行完畢后,局部靜態(tài)變量x的值不會丟失,仍然有效。25、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;}returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、28B、24C、32D、36標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:程序中定義了全局整型變量a=4。在intf(intn)函數(shù)中定義了局部靜態(tài)整型變量并進(jìn)行了初始化即staticinta=5。在intf(intn)函數(shù)中對n是否是偶數(shù)進(jìn)行判斷,如果n是奇數(shù),則函數(shù)的返回值為11,局部靜態(tài)整型變量a=6;如果n是偶數(shù),則函數(shù)的返回值為12,局部靜態(tài)整型變量a=6。所以在main()函數(shù)中循環(huán)首先執(zhí)行s+=f(0)語句,而f(0)返回值12,所以第一次循環(huán)結(jié)束s的值等于4+12=16;第二次開始執(zhí)行f(1)時,在f(1)中執(zhí)行if(n%2){inta=6;t+=a++;}和returnt+a++;這兩條語句,這時t=6,a=6(靜態(tài)局部變量第一次循環(huán)后其值加1值不釋放,執(zhí)行第二次循環(huán)量,其值仍有效),所以f(1)的返回值等于12。再在主函數(shù)中執(zhí)行s+=f(1)語句,即16+12=28。26、有以下程序voidfun(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序的運(yùn)行結(jié)果是A、876543B、321678C、1098765D、345678標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:函數(shù)fun(inta[],intn)的功能是實(shí)現(xiàn)整型數(shù)組a[]元素的逆置操作。在主函數(shù)中當(dāng)執(zhí)行fun(k,5)時,對k[10]中的子數(shù)組k[5]={1,2,3,4,5}的首尾元素進(jìn)行逆置,此時k[10]={5,4,3,2,1,6,7,8,9,10}。所在循環(huán)語句中輸出從第2~7個數(shù)組元素時,其值分別為321678。27、下列定義數(shù)組的語句中,正確的是A、intN=10;intx[N];B、#defineN10intx[N];C、intx[0..10];D、intx[];標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:數(shù)組說明的一般形式為:類型說明符數(shù)組名[常量表達(dá)式];其中類型說明符可以是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,數(shù)組名是定義的數(shù)組標(biāo)識符。常量表達(dá)式表示數(shù)據(jù)元素的個數(shù),也就是數(shù)組的長度,必須是整型常量。28、有以下程序#include<stdio.h>voidmain(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序運(yùn)行后的輸出結(jié)果是A、2050B、3344C、3040D、0304標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在主函數(shù)的for循環(huán)語句中,當(dāng)循環(huán)變量i的值等于0,2時,執(zhí)行switch中的case0語句,分別對數(shù)組元素a[0]和a[2]加1和減1,所以a[0]的值等于3,a[2]等于4。當(dāng)循環(huán)變量i的值等于1,3時,執(zhí)行switch中的case1語句,把數(shù)組元素a[1]和a[3]的值賦為0。所以輸出數(shù)組a的元素,其結(jié)果為3040。國家二級C語言(函數(shù)和數(shù)組)機(jī)試模擬試卷第2套一、選擇題(本題共28題,每題1.0分,共28分。)1、有以下程序#includeintfun(intx){intp;if(x==0||x==1)return(3);p=x-fun(x-2);return(p);)main(){printf("96d\n",fun(9));}程序運(yùn)行后的輸出結(jié)果是A、5B、9C、4D、7標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:函數(shù)fun的士要功能是:初值x的值為9,因此fun(9)=9-fun(7)=9-(7-(5-(3.3))),因此答案為7。2、有以下程序#includeintfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);)main()(printf("%d\n",fun(5));}程序的輸出結(jié)果是A、14B、10C、15D、9標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:函數(shù)fun為遞歸定義的函數(shù),當(dāng)調(diào)用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fun(2)→5+4+3+2+fun(1),因此最后的結(jié)果為15。3、有以下程序#includeintfun(inta,intb){returna+b;)main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序運(yùn)行后的輸出結(jié)果是A、15B、21C、20D、31標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:本題考查了函數(shù)的調(diào)用,函數(shù)fun功能為求兩個數(shù)據(jù)的和。主函數(shù)中表達(dá)式r=fun(fun(x,y),z--),首先計算內(nèi)層調(diào)用fun(x,y),計算結(jié)果為13.然后外層調(diào)用fun(13,8),結(jié)果為21。4、以下選項(xiàng)中函數(shù)形參不是指針的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…}D、fun(intp[]){…}標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:C語言中形參數(shù)組是指針變量,其數(shù)組中元素的個數(shù)由傳遞的實(shí)參數(shù)組決定,因此可以存定義的時候,不給出元素個數(shù)的說明,因此選項(xiàng)B)和D)彤參均為指針變量,選項(xiàng)A)的定義在C語言中不存在的。5、設(shè)有如下函數(shù)定義intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若執(zhí)行調(diào)用語句:n=fun(3);,則函數(shù)fun總共被調(diào)用的次數(shù)是A、2B、4C、3D、5標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:這道題目考查了函數(shù)的遞歸調(diào)用,當(dāng)執(zhí)行調(diào)用語句n=fun(3)時,返回n=fun(2)+1,冉執(zhí)行fun(2),返同n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等十3。而函數(shù)fun總共被調(diào)用了3次。即fun(3),fun(2),fun(1)。6、有以下程序#includeintf(intx){inty;if(x==0||x==1)return(3);y=x*x-f(x-2);returny;}main(){intz;z=f(3);printf("%d\n",z);}程序的運(yùn)行結(jié)果是A、9B、0C、6D、8標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:主函數(shù)調(diào)用f()函數(shù),將實(shí)參3傳遞給x,進(jìn)行if條件語句的判斷不成立,接著執(zhí)行y=3*3-f(1),再執(zhí)行f(1),而f(1)滿足if條件語句,所以f(1)的值為3,代入y=3*3-f(1)=9-3=6。7、有以下程序(strcat函數(shù)用以連接兩個字符串)#inolude#includemain(){chara[20]="ABCD\0EFG\0",b[]="TJK";streat(a,b);printf("%s\n",a);}程序運(yùn)行后的輸出結(jié)果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在字符串中字符’\0’表示字符串的結(jié)束標(biāo)忐,所以字符串a(chǎn)和b相連接的結(jié)果為ABCDIJK。8、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}執(zhí)行程序時,給變量X輸入10,程序的輸出結(jié)果是A、54B、65C、45D、55標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:在C語言中函數(shù)可以遞歸調(diào)用,即直接或間接地自己調(diào)用自己。本題在函數(shù)intfun(intn)的定義中又出現(xiàn)了對函數(shù)fun的調(diào)用,所以函數(shù)fun是遞歸函數(shù)。因而在主函數(shù)中調(diào)用x=fun(x)時,當(dāng)輸入10賦給變量x時,遞歸調(diào)用的過程為:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)=0+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+l=559、有以下程序fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}執(zhí)行后的輸出結(jié)果是A、3B、7C、0D、2標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:因?yàn)樵诤瘮?shù)fun(intx)中,如果參數(shù)x等于0或1時,返回值3。否則p=x-fun(x-2)這是一個遞歸函數(shù),所以在主函數(shù)調(diào)用fun(7)時,其過程為:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的輸出結(jié)果為2。10、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%d\n",f(a,9));}則程序的輸出結(jié)果是A、9B、1C、8D、5標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:主函數(shù)中調(diào)用f(a,9),遞歸函數(shù)的調(diào)用過程如下:f(a,9)→f(a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值為a[0],值為8,遞歸過程開始回歸,回歸過程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值為9…因此函數(shù)f的主要功能為計算數(shù)組中的最大值。主函數(shù)中輸出最大值為9。11、以下敘述中正確的是A、只有全局變量才有自己的作用域,函數(shù)中的局部變量沒有作用域B、只要是用戶定義的標(biāo)識符,都有一個有效的作用域C、只有在函數(shù)內(nèi)部定義的變量才是局部變量D、局部變量不能被說明為static標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:存函數(shù)內(nèi)定義的變量是局部變量,而在函數(shù)之外定義的變量稱為外部變量,也是全局變量。全局變量可以為源文件中其他函數(shù)所共用,其作用域?yàn)閺亩x變量的位置開始到源文件結(jié)束。因此只要用戶定義的標(biāo)識符,全部都有作用域。局部變量可以說明為auto、register以及stoic。12、以下敘述中正確的是A、對于變量而言,“定義”和“說明”這兩個詞實(shí)際上是同一個意思B、在復(fù)合語句中不能定義變量C、全局變量的存儲類別可以是靜態(tài)類D、函數(shù)的形式參數(shù)不屬于局部變量標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:用static說明符說明全局變量時,此變量可稱作靜態(tài)全局變量。靜態(tài)全局變量只限于本編譯單位使用,不能被其他編譯單位所引用。在一個函數(shù)內(nèi)部定義的變量(包括形參)是局部變量,它只在本函數(shù)范圍內(nèi)有效。不同函數(shù)中可以使用相同名字的局部變量,它們代表不同的對象,互不影響。在函數(shù)內(nèi)部復(fù)合語句中也可以定義變量,這些變量都是局部變量,只在本復(fù)合語句中有效。13、有以下程序intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的輸出結(jié)果是A、96B、94C、84D、85標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:代碼考查點(diǎn)為全局變量和局部變量的同名問題,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內(nèi),訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。主函數(shù)執(zhí)行fun(3)時候,執(zhí)行調(diào)用函數(shù)fun,使用局部變量d=5,執(zhí)行d+=p++,相當(dāng)于d=d+(p++),得到d的值為8,輸出。函數(shù)調(diào)用結(jié)束,轉(zhuǎn)到主函數(shù),繼續(xù)執(zhí)行d+=a++,此時d為全局變最,執(zhí)行語句以后,d值為4。14、有以下程序#inoludeinta=1,b=2;voidfun1(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;)main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序運(yùn)行后的輸出結(jié)果是A、3456B、1256C、5612D、5634標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:函數(shù)fun1()的作用是輸出局部變量a和b的值,在主函數(shù)中執(zhí)行fun1(5,6)的結(jié)果是輸出5,6;函數(shù)fun2()的作用是給變最a和b分別賦值3,4;執(zhí)行fun2()的作用是輸出3,4。15、在一個C源程序文件中所定義的全局變量,其作用域?yàn)锳、由具體定義位置和extern說明來決定范圍B、所在程序的全部范圍C、所在函數(shù)的全部范圍D、所在文件的全部范圍標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:全局變量是在函數(shù)外部任意位置上定義的變量,它的作用域是從變量定義的位置開始,到整個源文件結(jié)束止。在同一編譯單位內(nèi)用extern說明符擴(kuò)展全局變量的作用域(當(dāng)全局變量定義在后,引用它的函數(shù)在前時,應(yīng)該在引用它的函數(shù)中用extern對此全局變量進(jìn)行說明,以便通知編譯程序:該變量是一個已在外部定義了的全局變量,已經(jīng)分配了存儲單元,不需要再為它分配存儲單元。這時全局變量的作用域從extern說明處起,延伸到該函數(shù)末尾)。當(dāng)一個程序由多個編譯單位構(gòu)成,并且在每個文件中均需要引用同一個全局變量,這時只在其中一個文件中定義所有的全局變量,而在其他用到這些全局變量的文件中用extern對這些變量進(jìn)行說明。16、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfun1(){a=’C’;b=’D’;)main(){fun1();printf("%c%c",a,b);fun2(’E’,’F’);}程序的運(yùn)行結(jié)果是A、ABEFB、CDEFC、ABCDD、CDAB標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在fun1()函數(shù)之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處到整個程序結(jié)束。在fun1()函數(shù)之內(nèi)定義了兩個變量a和b,并且分別初始化為字符’C’和’D’。在C語言中,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中此全局變量被屏蔽,在該函數(shù)內(nèi)訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。所以在主函數(shù)中,執(zhí)行fun1()后,變量a、b的值分別等于’C’、’D’,打印輸出CD,接著執(zhí)行‘fun2(’E’,’F’)語句,變量a、b的值變?yōu)椤疎’、F并輸出。17、有以下程序#includefun(inta,intb){intstaticm=0,i=2;i=i+m+1;m=i+a+b;returnm;)main()(intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序運(yùn)行后的輸出結(jié)果是A、8,17B、7,16C、8,8D、7,17標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:本題考查了靜態(tài)變量以及局部變量的同名問題。主函數(shù)中調(diào)用fun函數(shù)兩次,第一次調(diào)用fun(4,1),形參a和b接收以后,i值為3,m的值為8,調(diào)用結(jié)束返回8存放到p中并且輸出p的值為8,除了靜態(tài)變量m和i,變量a,b撤銷。第二次調(diào)用fun(4,1),接收實(shí)參值以后,i為3+8+1,而m為12+4+1,即輸出函數(shù)值17。18、有以下程序#includefunc(intn){staticintnum=1;num=num+n;print;f("%d",num);}voidmain(){func(3);func(4);printf("\n");)程序運(yùn)行后的輸出是A、45B、35C、48D、34標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)func(intn)中定義了局部靜態(tài)變量num,,其初始值等于1,所以在主函數(shù)中執(zhí)行func(3),輸出4,此時靜態(tài)變量num的值等于4,當(dāng)退出函數(shù)func(3)時,其值不會丟失,所以當(dāng)在執(zhí)行func(4)時,輸出8。19、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}執(zhí)行后的輸出結(jié)果是A、5,5B、5,11C、11,11D、11,5標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:子函數(shù)fun(intx,inty),將變量m和i聲明為局部靜態(tài)變量,因此第1次調(diào)用主函數(shù)后,局部靜態(tài)變量m和i的值為5和3,第1次函數(shù)調(diào)用結(jié)束時,它們的值不釋放保持不變,所以第2次調(diào)用時,局部靜態(tài)變量m和i的初始值分別為5和3,即在執(zhí)行“i+=m+1”時,i的值為9,因此最終m的值為l]。20、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、0B、10C、30D、64標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:本題考查了靜態(tài)局部變量,該局部變量的值在函數(shù)調(diào)用結(jié)束后如果不消失而保留原值。函數(shù)fun的功能返回2的乘方,主函數(shù)fun函數(shù)調(diào)用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即為2*4*8,值為64。21、有以下程序#includeintf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);)intf(intn){staticinta=1;n+=a++;returnn;}程序運(yùn)行后的輸出結(jié)果是A、9B、8C、7D、10標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在主函數(shù)中第一次調(diào)用f(a)時,得到變量s的值等于4,在第二次調(diào)用f(a)時,在子函數(shù)f中由于變量a是一個局部靜態(tài)變量,所以這次其值等于2,因而在主函數(shù)中第二次調(diào)用f(a)后,其返回值等于5,最后變量s的值等于9。22、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n”,s);}程序運(yùn)行后的輸出結(jié)果是A、11B、21C、6D、120標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:這道試題主要考查了局部靜態(tài)變量的應(yīng)用。在函數(shù)fun()中定義了局部靜態(tài)變量整型x,其初值等于1,在主函數(shù)中循環(huán)執(zhí)行5次,第一次變量s的值等于3,變量x的值等于2,第二次變量s的值等于6,變量x的值等于3,第三次變量s的值等于10,變量x的值等于4,第四次變量s的值等于15,變量x的值等于5,第五次變量s的值等于21,變量x的值等于6。23、有以下程序intfun(intx[],intp){staticintsum=0,i;for(2=0;iA、50B、45C、60D、55標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)intfun(intx[],intn)的定義中,變量sum使用了static修飾符,這說明了變量sum為一個靜態(tài)局部變量。由于在整個程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存中的靜態(tài)存儲區(qū)中占據(jù)著永久的存儲單元。即使退出函數(shù)之后,下次再進(jìn)入該函數(shù)時,靜態(tài)局部變量繼續(xù)使用原來存儲單元中原來的值。函數(shù)intfun(intx[],intn)的功能是求出數(shù)組x[]各個元素的和。所以在主函數(shù)中,調(diào)用函數(shù)Fun(a,5)后,變量sum=1+2+3+4+5=15,當(dāng)再次調(diào)用Fun(b,4)后,變量sum=15+6+7+8+9=45,所以s=15+45=60。24、有以下程序intf(intm){staricintn=0;n+=m;returnn;)main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序運(yùn)行后的輸出結(jié)果是A、1,1B、1,2C、2,3D、3,3標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:由于在函數(shù)f中,變量n為靜態(tài)局部變量,所以在主函數(shù)中第一次調(diào)用函數(shù)f后,變量n的值等于1,當(dāng)?shù)诙{(diào)用函數(shù)f時,在函數(shù)f的內(nèi)部靜態(tài)局部變量n的值仍然保留等于1,所以返回函數(shù)值等于2。25、有以下程序#includeintfun(){static~ntx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、4B、1C、0D、8標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在子函數(shù)fun()中定義局部靜態(tài)變量x,其初值等于1,然后再把其值擴(kuò)大1倍后返回。在主函數(shù)中執(zhí)行for循環(huán)語句2次,調(diào)用函數(shù)fun()兩次,所以變量s的值等于4。這里要強(qiáng)調(diào)的一點(diǎn)是當(dāng)函數(shù)fun()執(zhí)行完畢后,局部靜態(tài)變量x的值不會丟失,仍然有效。26、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6,t+=a++,)else{inta=7;t+=a++;)returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、28B、24C、32D、36標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:程序中定義了全局整型,變量a=4。在intf(intn)函數(shù)中定義了局部靜態(tài)整型變量并進(jìn)行了初始化即staticinta=5。在inlf(intn)函數(shù)中對n是否是偶數(shù)進(jìn)行判斷,如果n是奇數(shù),則函數(shù)的返同值為11,局部靜念整型變量a=6;如果n是偶數(shù),則函數(shù)的返回值為12,局部靜態(tài)整型變量a=6。所以在main()函數(shù)中循環(huán)首先執(zhí)行s+=f(0)語句,而f(0)返回值12,所以第一次循環(huán)結(jié)束s的值等于4+12=16;第二次開始執(zhí)行f(1)時,在f(1)中執(zhí)行if(n%2){inta=6;t+=a++;}和returnt++a++;這兩條語句,這時t=6,a=6(靜態(tài)局部變量第一次循環(huán)后其值加1值不釋放,執(zhí)行第二次循環(huán)量,其值仍有效),所以f(1)的返回值等于12。再在主函數(shù)中執(zhí)行s+=f(1)語句,即16+12=28。27、有以下程序voidfun(inta[],intn){inti,t;for(i=0;iA、876543B、321678C、1098765D、345678標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:函數(shù)fun(inta[],intn)的功能是實(shí)現(xiàn)整型數(shù)組a[]元素的逆置操作。在主函數(shù)中當(dāng)執(zhí)行fun(k,5)時,對k[10]中的了數(shù)組k[5]={1,2,3,4,5}的首尾元素進(jìn)行逆置,此時k[10]={5,4,3,2,1,6,7,8,9,10}。所在循環(huán)語句中輸出從第2~7個數(shù)組元素時,其值分別為321678。28、下列定義數(shù)組的語句中,正確的是A、intN=10;intx[N];B、#defineN10intx[N];C、intx[0..10]:D、intx[];標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:數(shù)組說明的一般形式為:類型說明符數(shù)組名[常量表達(dá)式];其中類型說明符可以是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,數(shù)組名是定義的數(shù)組標(biāo)識符。常量表達(dá)式表示數(shù)據(jù)元素的個數(shù),也就是數(shù)組的長度,必須是整型常量。國家二級C語言(函數(shù)和數(shù)組)機(jī)試模擬試卷第3套一、選擇題(本題共29題,每題1.0分,共29分。)1、有以下程序#includeintfun(intx){intp;if(x==0‖x==1)return(3);P=x-fun(x-2);return(p);}main(){printf("%d\n",fun(9));}程序運(yùn)行后的輸出結(jié)果是A、5B、9C、4D、7標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:函數(shù)fun的主要功能是:初值x的值為9,因此fun(9)=9-fun(7)=9-(7-(5-(3-3))),因此答案為7。2、有以下程序#includeintfun(intn){inta:if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的輸出結(jié)果是A、14B、10C、15D、9標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:函數(shù)fun為遞歸定義的函數(shù),當(dāng)調(diào)用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fun(2)→5+4+3+2+fun(1),因此最后的結(jié)果為15。3、有以下程序#includeimfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序運(yùn)行后的輸出結(jié)果是A、15B、21C、20D、31標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:本題考查了函數(shù)的調(diào)用,函數(shù)fun功能為求兩個數(shù)據(jù)的和。主函數(shù)中表達(dá)式r=fun(fun(x,y),z--),首先計算內(nèi)層調(diào)用fun(x,y),計算結(jié)果為13,然后外層調(diào)用fun(13,8)。結(jié)果為21。4、以下選項(xiàng)中函數(shù)形參不是指針的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…)D、fun(intP[]){…}標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:C語言中形參數(shù)組是指針變量,其數(shù)組中元素的個數(shù)由傳遞的實(shí)參數(shù)組決定,因此可以在定義的時候,不給出元素個數(shù)的說明,因此選項(xiàng)B和D)形參均為指針變量,選項(xiàng)A的定義在C語言中不存在的。5、設(shè)有如下函數(shù)定義intfun(intk){if(k<1)returnO;elseif(k==1)return1;elsereturnfun(k-1)+1;}若執(zhí)行調(diào)用語句:n=fun(3);,則函數(shù)fun總共被調(diào)用的次數(shù)是A、2B、4C、3D、5標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:這道題目考查了函數(shù)的遞歸調(diào)用,當(dāng)執(zhí)行調(diào)用語句n=fun(3)時,返回n=fun(2)+1,再執(zhí)行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。而函數(shù)fun總共被調(diào)用了3次。即fun(3),fun(2),fun(1)。6、有以下程序#includeintflintx){inty;if[x==0‖x==1)retulm(3);y=x*x-f(x-2);returny;}main(){intz:z=f(3);printf("%d\n",z);}程序的運(yùn)行結(jié)果是A、9B、0C、6D、8標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:主函數(shù)調(diào)用墳)函數(shù),將實(shí)參3傳遞給x,進(jìn)行if條件語句的判斷不成立,接著執(zhí)行y=3*3-f(1),再執(zhí)行f(1),而f(1)滿足if條件語句,所以f(1)的值為3,代入y=3*3一f(1)=9—3=6。7、有以下程序(strcat函數(shù)用以連接兩個字符串)#include#includemain(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序運(yùn)行后的輸出結(jié)果是A、ABCDE\OFG\OIJKB、ABCDIJKC、IJKD、EFGIJK標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在字符串中字符’\0’表示字符串的結(jié)束標(biāo)志,所以字符串a(chǎn)和b相連接的結(jié)果為ABCDUK。8、有以下程序intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}執(zhí)行程序時,給變量x輸入10,程序的輸出結(jié)果是A、54B、65C、45D、55標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:在C語言中函數(shù)可以遞歸調(diào)用,即直接或間接地自己調(diào)用自己。本題在函數(shù)intfun(intn)的定義中又出現(xiàn)了對函數(shù)fun的調(diào)用,所以函數(shù)fun是遞歸函數(shù)。因而在主函數(shù)中調(diào)用x=fun(x)時,當(dāng)輸入10賦給變量x時,遞歸調(diào)用的過程為:fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)=10+9++8+7+fun(6)=10++98+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2+1=559、有以下程序fun(intx){intp;if(x=--0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fin(7));}執(zhí)行后的輸出結(jié)果是A、3B、7C、0D、2標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:因?yàn)樵诤瘮?shù)fun(intx)中,如果參數(shù)x等于0或1時,返回值3。否則p=x-fun(x.2)這是一個遞歸函數(shù),所以在主函數(shù)調(diào)用fun(7)時,其過程為:“fun(7)=7-fun(5)=7-(5-fun(3))=7-<5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的輸出結(jié)果為2。10、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5};printf("%dEn",f(a,9));}則程序的輸出結(jié)果是A、9B、1C、8D、5標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:主函數(shù)中調(diào)用f(a,9),遞歸函數(shù)的調(diào)用過程如下:f(a,9)→f[a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值為a[0],值為8,遞歸過程開始回歸,回歸過程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值為9……因此函數(shù)f的主要功能為汁算數(shù)組中的最大值。主函數(shù)中輸出最大值為9。11、以下敘述中正確的是A、只有全局變量才有自己的作用域,函數(shù)中的局部變量沒有作用域B、只要是用戶定義的標(biāo)識符,都有一個有效的作用域C、只有在函數(shù)內(nèi)部定義的變量才是局部變量D、局部變量不能被說明為static標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在函數(shù)內(nèi)定義的變量是局部變量,而在函數(shù)之外定義的變量稱為外部變量,也是全局變量。全局變量可以為源文件中其他函數(shù)所共用,其作用域?yàn)閺亩x變量的位置開始到源文件結(jié)束。因此只要用戶定義的標(biāo)識符,全部都有作用域。局部變量可以說明為auto、register以及static。12、以下敘述中正確的是A、對于變量而言,“定義”和“說明”這兩個詞實(shí)際上是同一個意思B、在復(fù)合語句中不能定義變量C、全局變量的存儲類別可以是靜態(tài)類D、函數(shù)的形式參數(shù)不屬于局部變量標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:用static說明符說明全局變量時,此變量可稱作靜態(tài)全局變量。靜態(tài)全局變量只限于本編譯單位使用,不能被其他編譯單位所引用。在個函數(shù)內(nèi)部定義的變量(包括形參)是局部變量,它只在本函數(shù)范圍內(nèi)有效。不同函數(shù)中可以使用相同名字的局部變量,它們代表不同的對象,互不影響。在函數(shù)內(nèi)部復(fù)合語句中也可以定義變量,這些變量都是局部變量.只在本復(fù)合語句中有效。13、有以下程序intd=1;voidfun(intP){intd=5:d+=p++;printf("%d",d);}main(){inta=3:fun(a);d+=a++:printf("%d\n",d);}程序的輸出結(jié)果是A、96B、94C、84D、85標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:代碼考查點(diǎn)為全局變量和局部變量的同名問題,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內(nèi),訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。主函數(shù)執(zhí)行fun(3)時候,執(zhí)行調(diào)用函數(shù)fun,使用局部變量d=5,執(zhí)行d+=p++,相當(dāng)于d=d+(p++),得到d的值為8,輸出。函數(shù)調(diào)用結(jié)束,轉(zhuǎn)到主函數(shù),繼續(xù)執(zhí)行d+=a++,此時d為全局變量,執(zhí)行語句以后,d值為4。14、有以下程序#includeinta=1,b=2;voidfunl(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;}main(){funl(5,6);fun20;printf(”%d%dkn",a,b);}程序運(yùn)行后的輸出結(jié)果是A、3456B、1256C、5612D、5634標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:函數(shù)fun1()的作用是輸出局部變量a和b的值,在主函數(shù)中執(zhí)行fun1(5,6)的結(jié)果是輸出5,6:函數(shù)fun2()的作用是給變量a和b分別賦值3,4;執(zhí)行。fun2()的作用是輸出3,4。15、在一個C源程序文件中所定義的全局變量,其作用域?yàn)锳、由具體定義位置和extern說明來決定范圍B、所在程序的全部范圍C、所在函數(shù)的全部范圍D、所在文件的全部范圍標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:全局變量是在函數(shù)外部任意位置上定義的變量,它的作用域是從變量定義的位置開始,到整個源文件結(jié)束止。在同一編譯單位內(nèi)用extern說明符擴(kuò)展全局變量的作用域(當(dāng)全局變量定義在后,引用它的函數(shù)在前時,應(yīng)該在引用它的函數(shù)中用extern對此全局變量進(jìn)行說明,以便通知編譯程序:該變量是一個已在外部定義了的全局變量,已經(jīng)分配了存儲單元,不需要再為它分配存儲單元。這時全局變量的作用域從extern說明處起,延伸到該函數(shù)末尾)。當(dāng)一個程序由多個編譯單位構(gòu)成,并且在每個文件中均需要引用同一個全局變量,這時只在其中一個文件中定義所有的全局變量,而在其他用到這些全局變量的文件中用extern對這些變量進(jìn)行說明。16、有以下程序voidfun2(chara,charb){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfunl(){a:一C;b=’D’;}main(){funl();printf(”%c%c”,a,b);fun2(’E’,’F’);}程序的運(yùn)行結(jié)果是A、ABEFB、CDEFC、ABCDD、CDAB標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:在fun()函數(shù)之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處到整個程序結(jié)束。在fun1()函數(shù)之內(nèi)定義了兩個變量a和b,并且分別初始化為字符’C’和’D’。在C語言中,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中此全局變量被屏蔽,在該函數(shù)內(nèi)訪問的是局部變量,與同名的全局變量不發(fā)生任何關(guān)系。所以在主函數(shù)中,執(zhí)行fun1()后,變量a、b的值分別等于’C’、’D’,打印輸出CD,接著執(zhí)行fun2(’E’,’F’)語句,變量a、b的值變?yōu)椤疎’、’F’并輸出。17、有以下程序#includefun(inta,intb){intstaticm=0,i=2;i=i+m+1:m=i+a+b:returnm;}main(){intk=4,m=1,p;p=fun(k,m);printf("%d,",p);p=fun(k,m);printf("%d\n",p);}程序運(yùn)行后的輸出結(jié)果是A、8,17B、7,16C、8,8D、7,17標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:本題考查了靜態(tài)變量以及局部變量的同名問題。主函數(shù)中調(diào)用fun函數(shù)兩次,第一次調(diào)用fun(4,1),形參a和b接收以后。i值為3,m的值為8,調(diào)用結(jié)束返回8存放到p中并且輸出p的值為8,除了靜態(tài)變量m和i,變量a,b撤銷。第二次調(diào)用fun(4,1),接收實(shí)參值以后,i為3+8+1,而m為12+4+1,即輸出函數(shù)值17。18、有以下程序#includefunc(intn){staticintnum=1;num=num+n;printf("%dt",num);}voidmain(){func(3);func(4);printf("\n");}程序運(yùn)行后的輸出是A、45B、35C、48D、34標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)func(intn)中定義了局部靜態(tài)變量num,其初始值等于1,所以在主函數(shù)中執(zhí)行func(3),輸出4,此時靜態(tài)變量num的值等于4,當(dāng)退出函數(shù)func(3)時,其值不會丟失,所以當(dāng)在執(zhí)行func(4)時,輸出8。19、有以下程序fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}執(zhí)行后的輸出結(jié)果是A、5,5B、5,11C、11,11D、11,5標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:子函數(shù)fun(intx,inty),將變量m和i聲明為局部靜態(tài)變量,因此第1次調(diào)用主函數(shù)后,局部靜態(tài)變量m和i的值為5和3,第1次函數(shù)調(diào)用結(jié)束時,它們的值不釋放保持不變,所以第2次調(diào)用時,局部靜態(tài)變量m和i的初始值分別為5和3,即在執(zhí)行“i+=m+1”時,i的值為9,因此最終m的值為11。20、在C語言中,只有在使用時才占用內(nèi)存單元的變量,其存儲類型是A、extern和registerB、auto和staticC、static和registerD、auto和register標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:在C語言中,動態(tài)變量(auto)存儲在內(nèi)存中的動態(tài)存儲區(qū),在程序運(yùn)行中,只有當(dāng)調(diào)用變量所在的函數(shù)時,系統(tǒng)才臨時給變量分配內(nèi)存單元;全局變量(extem)一經(jīng)定義,系統(tǒng)為其分配固定的內(nèi)存單元;靜態(tài)變量(static),編譯系統(tǒng)為其分配固定的存儲空間;寄存器變量(register)不保存在內(nèi)存上,而是直接存儲在CPU的寄存器中。21、有以下程序#includeintfun(){staticintx=l;x*=2;returnx;}main(){inti,s=l;for(i=1;i<=3;i++)s*=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、0B、10C、30D、64標(biāo)準(zhǔn)答案:D知識點(diǎn)解析:本題考查了靜態(tài)局部變量,該局部變量的值在函數(shù)調(diào)用結(jié)束后如果不消失而保留原值。函數(shù)fun的功能返回2的乘方,主函數(shù)fun函數(shù)調(diào)用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即為2*4*8。值為64。22、有以下程序#includeintflintn);main(){inta=3,s;s=f(a);s=s+fla);printf("%d\n",s);}intflintn){staticinta=1;n+=a++;returnn;)程序運(yùn)行后的輸出結(jié)果是A、9B、8C、7D、10標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在主函數(shù)中第一次調(diào)用f(a)時,得到變量s的值等于4,在第二次調(diào)用f(a)時,在子函數(shù)f中由于變量a是一個局部靜態(tài)變量,所以這次其值等于2,因而在主函數(shù)中第二次調(diào)用f(a)后,其返回值等于5,最后變量s的值等于9。23、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、11B、21C、6D、120標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:這道試題主要考查了局部靜態(tài)變量的應(yīng)用。在函數(shù)fun()中定義了局部靜態(tài)變量整型x,其初值等于1,在主函數(shù)中循環(huán)執(zhí)行5次,第一次變量s的值等于3,變量x的值等于2,第二次變量s的值等于6,變量x的值等于3.第三次變量s的值等于10,變量x的值等于4,第四次變量s的值等于15,變量x的值等于5,第五次變量s的值等于21,變量x的值等于6。24、有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;iA、50B、45C、60D、55標(biāo)準(zhǔn)答案:C知識點(diǎn)解析:在函數(shù)intfun(intx[],intn)的定義中,變量sum使用了static修飾符,這說明了變量sum為一個靜態(tài)局部變量。由于在整個程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存中的靜態(tài)存儲區(qū)中占據(jù)著永久的存儲單元。即使退出函數(shù)之后,下次再進(jìn)入該函數(shù)時.靜態(tài)局部變量繼續(xù)使用原來存儲單元中原來的值。函數(shù)intfun(intx[],intn)的功能是求出數(shù)組x[]各個元素的和。所以在主函數(shù)中,調(diào)用函數(shù)Fun(a,5)后,變量sum=1+2+3+4+5=15,當(dāng)再次調(diào)用Fun(b,4)后,變量sum=15+6+7+8+9=45.所以s=15+45=60。25、有以下程序intf(intm){staticintn=0:n+=m;returnn;}main(){intn=0:printf("%d,",f(++n));printf("%d\n",f(n++));}程序運(yùn)行后的輸出結(jié)果是A、1,1B、1,2C、2,3D、3,3標(biāo)準(zhǔn)答案:B知識點(diǎn)解析:由于在函數(shù)f中,變量n為靜態(tài)局部變量.所以在主函數(shù)中第一次調(diào)用函數(shù)f后,變量n的值等于1,當(dāng)?shù)诙{(diào)用函數(shù)f時,在函數(shù)f的內(nèi)部靜態(tài)局部變量n的值仍然保留等于1,所以返回函數(shù)值等于2。26、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、4B、1C、OD、8標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:在子函數(shù)fun()中定義局部靜態(tài)變量x,其初值等于1,然后再把其值擴(kuò)大1倍后返回。在主函數(shù)中執(zhí)行for循環(huán)語句2次,調(diào)用函數(shù)fun()兩次,所以變量s的值等于4。這里要強(qiáng)調(diào)的一點(diǎn)是當(dāng)函數(shù)fun()執(zhí)行完畢后,局部靜態(tài)變量x的值不會丟失,仍然有效。27、有下列程序:inta=4:intflintn1{intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;)returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是A、28B、24C、32D、36標(biāo)準(zhǔn)答案:A知識點(diǎn)解析:程序中定義了全局整型交量a=4。在intf(intn)函數(shù)中定義了局部靜態(tài)整型變量并進(jìn)行了初始化即staticinta=5。在intf(intn)函數(shù)中對n是否是偶數(shù)進(jìn)行判斷,如果n是奇數(shù),則函數(shù)的返回值為11,局部靜態(tài)整型變量a=6;如果n是偶數(shù),則函數(shù)的返回值為12,局部靜態(tài)整型變量a=6。所以在main()函數(shù)中循環(huán)首先執(zhí)行s+=f(0)語句,而f(0)返回值12,所
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025特許經(jīng)營權(quán)轉(zhuǎn)讓合同范本
- 洛陽師范學(xué)院《中學(xué)地理教學(xué)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024實(shí)驗(yàn)室設(shè)備選購合同3篇
- 2024年城市核心區(qū)域房產(chǎn)交易定金合同范本2篇
- 2024專項(xiàng)工作合作合同
- 2024年度農(nóng)業(yè)智能化溫室建設(shè)與運(yùn)營管理合同3篇
- 城市廣場綠化養(yǎng)護(hù)承包合同
- 商業(yè)易主協(xié)議
- 電子產(chǎn)品生產(chǎn)線招投標(biāo)流程
- 廣告市場應(yīng)急照明施工協(xié)議
- GB/T 5593-2015電子元器件結(jié)構(gòu)陶瓷材料
- GB/T 3871.6-1993農(nóng)業(yè)輪式和履帶拖拉機(jī)試驗(yàn)方法第6部分制動試驗(yàn)
- GB/T 22844-2009配套床上用品
- GB/T 1962.2-2001注射器、注射針及其他醫(yī)療器械6%(魯爾)圓錐接頭第2部分:鎖定接頭
- GB/T 17646-2013小型風(fēng)力發(fā)電機(jī)組設(shè)計要求
- 中醫(yī)拔罐技術(shù)試題及答案
- 2023年蘇教版小學(xué)數(shù)學(xué)全套教材內(nèi)容安排表
- 滅火器驗(yàn)收表
- 裝修工程竣工驗(yàn)收報告(7篇)
- 商務(wù)溝通-課件
- ommaya囊的護(hù)理教學(xué)課件
評論
0/150
提交評論