




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級C語言機試(函數(shù)和數(shù)組)模擬試卷1(共6套)(共228題)國家二級C語言機試(函數(shù)和數(shù)組)模擬試卷第1套一、選擇題(本題共38題,每題1.0分,共38分。)1、有以下程序(strcpy為字符串復制函數(shù),strcat為字符串連接函數(shù))#include#includemain(){chara[10]="abc",b[10]="012",c[10]="xyz";strcpy(a+1,b+2);puts(strcat(a,c+1));}程序運行后的輸出結果是A、bc2yzB、a2yzC、a12xyzD、12yz標準答案:B知識點解析:程序執(zhí)行strcpy(a+1,b+2)后,字符數(shù)組a的值為“a2”,再進行字符串的連接strcat(a,c+1),此時字符數(shù)組a的值為“a2yz”。2、若有定義語句:chars[10]="1234567\0\0";則strlen(s)的值是A、8B、7C、9D、10標準答案:B知識點解析:字符串長度函數(shù)strlen(s)表示計算出以s為起始地址的字符串的長度,并作為函數(shù)值返回。這個長度值不包括串尾的結束標志’\0’。3、有以下程序,程序中庫函數(shù)islower(ch)用以判斷ch中的字母是否為小寫字母#include#includevoidfun(char*p){inti=0;while(p[i]){if(p[i]==’’&&islower(p[i-1]))p[i-1]=p[i-1]-’a’+’A’;i++;}}main(){chars1[100]="abcdEFG!";fun(s1);printf("%s\n",s1);}程序運行后的輸出結果是A、AbCdEFg!B、abcdEFG!C、abcdEFg!D、aBcDEFG!標準答案:D知識點解析:函數(shù)fun(char*p)的功能是如果p[i]指向的字符為空字符并且其前一個字符是小寫字母,則把小寫字母變成大字母,所以在主函數(shù)中,執(zhí)行fun(s1)后,小寫字母b,d都改成大字母。4、下列選項中,能夠滿足“只要字符串s1等于字符串s2,則執(zhí)行ST”要求的是A、if(s1==s2)ST;B、if(strcpy(s1,s2)==1)ST;C、if(strcmp(s2,s1)==0)ST;D、if(s1-s2==0)ST;標準答案:C知識點解析:在C語言中要對兩個字符串的大小進行比較,就需要調用字符串比較函數(shù)strcmp(),如果這個函數(shù)的返回值等于0,說明兩個字符串相等。5、以下關于return語句的敘述中正確的是A、一個自定義函數(shù)中必須有一條return語句B、一個自定義函數(shù)中可以根據(jù)不同情況設置多條return語句C、定義成void類型的函數(shù)中可以有帶返回值的return語句D、沒有return語句的自定義函數(shù)在執(zhí)行結束時不能返回到調用處標準答案:B知識點解析:return語句主要用于返回函數(shù)的值。在一個自定義函數(shù)中,可以根據(jù)不同的情況設置多條return語句返回函數(shù)的值。6、以下敘述中錯誤的是A、函數(shù)調用可以作為一個獨立的語句存在B、函數(shù)形參的值也可以傳回給對應的實參C、若函數(shù)有返回值,必須通過return語句返回D、C程序必須由一個或一個以上的函數(shù)組成標準答案:B知識點解析:一個C程序中可以包含任意多個不同名的函數(shù),但只能有一個主函數(shù)。一個C程序總是從主函數(shù)開始執(zhí)行。函數(shù)的值通過return語句返回,return語句中的表達式的值就是所求的函數(shù)值。在C語言中,數(shù)據(jù)只能從實參單向傳遞給形參,稱為“按值”傳遞。也即是說,當簡單變量作為實參時,用戶不可能在函數(shù)中改變對應實參的值。7、若有以下函數(shù)首剖intfun(doublex[10],int*n)則下面針對此函數(shù)的函數(shù)聲明語句中正確的是A、intfun(double,int);B、intfun(double*x,intn);C、intfun(double*,int*);D、intfun(doublex,int*n);標準答案:C知識點解析:函數(shù)說明的一般形式為:類型名函數(shù)名(參數(shù)類型1,參數(shù)類型2,……)。因為函數(shù)intfun(doublex[10],int*n)的第1個形式參數(shù)是一個雙精度型的一維數(shù)組,第2個參數(shù)是一個整型指針,并返回一個整型值。一維數(shù)組的名字表示的是一維數(shù)組的地址。8、有以下程序#includeintfun(intx,intY){if(x==y)retum(x);elsereturn((x+y)/2);}main(){inta=4,b=5,c=6;printf("%dhn",fun(2*a,fun(b,c)));}程序運行后的輸出結果是A、3B、6C、8D、12標準答案:8知識點解析:fun(b,c)即fun(5,6),5!=6,所以返回(5+6)/2=5;fun(2*a,5)即fun(8,5),8!=5,所以返回(8+5)/2=6。9、若函數(shù)調用時的實參為變量時,以下關于函數(shù)形參和實參的敘述中正確的是A、形參只是形式上的存在,不占用具體存儲單元B、函數(shù)的形參和實參分別占用不同的存儲單元C、同名的實參和形參占同一存儲單元D、函數(shù)的實參和其對應的形參共占同一存儲單元標準答案:B知識點解析:在C語言中,函數(shù)的實參單元與形參單元在內存中分配不同的存儲單元。在調用函數(shù)時,給形參分配臨時存儲單元,并將實參對應的值傳遞給形參,在被調用函數(shù)中對形參存儲單元中的值進行運算,最后通過return語句把函數(shù)值返回調用函數(shù)。當調用結束后,形參單元被釋放,實參單元仍保留并維持原值。10、若有以下程序voidf(intx){if(x>=10){printf("%d-",x%10);f(x/10);)elseprintf("%d",x);)main(){intZ=123456;f(z);}則程序的輸出結果是A、6-5-4-32-1B、6…5-4-3-2-1-C、1-2-3-4-5-6D、1-2-3-4-5-6-標準答案:A知識點解析:函數(shù)f的主要功能為逆置輸出整數(shù)x的每一位數(shù)據(jù),如果z的值為123456,逆置輸出的結果為6-5-4-3-2-1。11、有以下程序#includeintfun(inta,intb){returna+b;}main()(intx=6,y=7,z=8,r;r=fun(fun(x,y),Z--);printf("%d\n",r);}程序運行后的輸出結果是A、15B、21C、20D、31標準答案:B知識點解析:本題考查了函數(shù)的調用,函數(shù)fun功能為求兩個數(shù)據(jù)的和。主函數(shù)中表達式r=fun(fun(x,y),z--),首先計算內層調用fun(x,y),計算結果為13,然后外層調用fun(13,8),結果為21。12、有以下程序#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);}程序的運行結果是A、9B、0C、6D、8標準答案:C知識點解析:主函數(shù)調用f()函數(shù),將實參3傳遞給x,進行if條件語句的判斷不成立,接著執(zhí)行y=3*3-f(1),再執(zhí)行f(1),而f(1)滿足if條件語句,所以f(1)的值為3,代入y=3*3-f(1)=9-3=6。13、有以下程序fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));)執(zhí)行后的輸出結果是A、3B、7C、0D、2標準答案:D知識點解析:因為在函數(shù)fun(intx)中,如果參數(shù)x等于0或1時,返回值3。否則p=x-fun(x-2)這是一個遞歸函數(shù),所以在主函數(shù)調用fun(7)時,其過程為:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后的輸出結果為2。14、以下敘述中正確的是A、對于變量而言,“定義”和“說明”這兩個詞實際上是同一個意思B、在復合語句中不能定義變量C、全局變量的存儲類別可以是靜態(tài)類D、函數(shù)的形式參數(shù)不屬于局部變量標準答案:C知識點解析:用static說明符說明全局變量時,此變量可稱作靜態(tài)全局變量。靜態(tài)全局變量只限于本編譯單位使用,不能被其他編譯單位所引用。在一個函數(shù)內部定義的變量(包括形參)是局部變量,它只在本函數(shù)范圍內有效。不同函數(shù)中可以使用相同名字的局部變量,它們代表不同的對象,互不影響。在函數(shù)內部復合語句中也可以定義變量,這些變量都是局部變量,只在本復合語句中有效。15、在一個C源程序文件中所定義的全局變量,其作用域為A、由具體定義位置和extern說明來決定范圍B、所在程序的全部范圍C、所在函數(shù)的全部范圍D、所在文件的全部范圍標準答案:A知識點解析:全局變量是在函數(shù)外部任意位置上定義的變量,它的作用域是從變量定義的位置開始,到整個源文件結束止。在同一編譯單位內用extern說明符擴展全局變量的作用域(當全局變量定義在后,引用它的函數(shù)在前時,應該在引用它的函數(shù)中用extern對此全局變量進行說明,以便通知編譯程序:該變量是一個已在外部定義了的全局變量,已經(jīng)分配了存儲單元,不需要再為它分配存儲單元。這時全局變量的作用域從extern說明處起,延伸到該函數(shù)末尾)。當一個程序由多個編譯單位構成,并且在每個文件中均需要引用同一個全局變量,這時只在其中一個文件中定義所有的全局變量,而在其他用到這些全局變量的文件中用extern對這些變量進行說明。16、有以下程序#includefunc(intn){staticintnum=1;num=num+n;prinff("%d",num);}voidmain(){func(3);func(4);printf("\n");}程序運行后的輸出是A、45B、35C、48D、34標準答案:C知識點解析:在函數(shù)func(intn)中定義了局部靜態(tài)變量num,,其初始值等于1,所以在主函數(shù)中執(zhí)行func(3),輸出4,此時靜態(tài)變量num的值等于4,當退出函數(shù)func(3)時,其值不會丟失,所以當在執(zhí)行func(4)時,輸出8。17、有以下程序#includeintfun(){staticintx=1;x*=2:returnx;)main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();pfintf("%d\n",s);}程序運行后的輸出結果是A、0B、10C、30D、64標準答案:D知識點解析:本題考查了靜態(tài)局部變量,該局部變量的值在函數(shù)調用結束后如果不消失而保留原值。函數(shù)fun的功能返回2的乘方,主函數(shù)fun函數(shù)調用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即為2*4*8,值為64。18、有以下程序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標準答案:C知識點解析:在函數(shù)intfun(intx[],intn)的定義中,變量sum使用了static修飾符,這說明了變量sum為一個靜態(tài)局部變量。由于在整個程序運行期間,靜態(tài)局部變量在內存中的靜態(tài)存儲區(qū)中占據(jù)著永久的存儲單元。即使退出函數(shù)之后,下次再進入該函數(shù)時,靜態(tài)局部變量繼續(xù)使用原來存儲單元中原來的值。函數(shù)intfun(intx[],intn)的功能是求出數(shù)組x[]各個元素的和。所以在主函數(shù)中,調用函數(shù)Fun(a,5)后,變量sum=1+2+3+4+5=15,當再次調用Fun(b,4)后,變量sum=15+6+7+8+9=45,所以s=15+45=60。19、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;)else{inta=7;t+=a++;)retumt+a++:}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序運行后的輸出結果是A、28B、24C、32D、36標準答案:A知識點解析:程序中定義了全局整型變量a=4。在intf(intn)函數(shù)中定義了局部靜態(tài)整型變量并進行了初始化即staticinta=5。在intf(intn)函數(shù)中對n是否是偶數(shù)進行判斷,如果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)結束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。20、有以下程序#includevoidmain(){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");}程序運行后的輸出結果是A、2050B、3344C、3040D、0304標準答案:C知識點解析:在主函數(shù)的for循環(huán)語句中,當循環(huán)變量i的值等于0,2時,執(zhí)行switch中的case0語句,分別對數(shù)組元素a[0]和a[2]加1和減1,所以a[0]的值等于3,a[2]等于4。當循環(huán)變量i的值等于1,3時,執(zhí)行switch中的case1語句,把數(shù)組元素a[1]和a[3]的值賦為0。所以輸出數(shù)組a的元素,其結果為3040。21、下列選項中,能正確定義數(shù)組的語句是A、intnum[];B、intN=2008;intnum[N];C、intnum[0..2008];D、#defineN2008intnum[N];標準答案:D知識點解析:在定義一維數(shù)組時,數(shù)組的下標應該是一個確定的整數(shù)值。要注意的是在定義二維數(shù)組時,其第一維下標可以省略,但第二維下標不能省略。22、有以下程序#includemain(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3),c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf("%d",c[i]);prinff(”\11”);}A、4332B、2344C、1234D、1123標準答案:A知識點解析:本題考查for語句的循環(huán)控制,首先定義了兩個數(shù)組并賦予了初始值,第一個for循環(huán)語句循環(huán)12次遍歷s數(shù)組的各個元素,將s[]中的原素值作為c[]數(shù)組中的下標,使相應的值自加。例如當i=0,c[s[0]]++為c[1]++,其值變?yōu)?,當執(zhí)行i=1,2,...11后,c[1]、c[2]、c[3]、c[4]分別為4、3、3、2,故選項A)為正確的運行結果。23、以下敘述中正確的是A、一條語句只能定義一個數(shù)組B、數(shù)組說明符的一對方括號中只能使用整型常量,而不能使用表達式C、每個數(shù)組包含一組具有同一類型的變量,這些變量在內存中占有連續(xù)的存儲單元D、在引用數(shù)組元素時,下標表達式可以使用浮點數(shù)標準答案:C知識點解析:數(shù)組的定義格式:類型說明符數(shù)組名【整型常量表達式】,...;可以同時定義多個類型相同的數(shù)組,之間以逗號分隔開,數(shù)組的類型表明了數(shù)組中元素的數(shù)據(jù)類型,數(shù)組中所有元素的類型相同,數(shù)組經(jīng)過定義以后就可使用,編譯程序將對其分配一片連續(xù)的存儲空間進行連續(xù)存儲。C語言中只能單個引用數(shù)組元素而不能一次引用整個數(shù)組。引用格式為:數(shù)組名【下標】,引用元素時,需要注意下標只能為整型常量或整型表達式。24、有以下程序#includemain(){intaft={10,20,30,40},*p=a,i;for(i=0;i<=3;i++){a[i]=*p;p++;)printf("%d\n",a[2]);}程序運行后的輸出結果是A、20B、30C、10D、40標準答案:B知識點解析:因為指針變量p的初始值指向數(shù)組a,所以執(zhí)行for循環(huán)語句后,數(shù)組a中的元素的值不變。25、若有以下程序#includechar宰a="you",b[]="welcome#you#to#China!";main(){intij=0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a==b[i]){p=&b[i];for(j=0;a[j]!=’\0’;j++){if(a[j]!=*p)break;p++;)if(a[j]==’\0’)break;}}printf("%s\n",p);)則程序的輸出結果是A、#you#to#China!B、me#you#to#China!C、#China!D、#to#China!標準答案:D知識點解析:程序中循環(huán)部分的主要功能是,在字符串b中尋找是否含有子串a(chǎn),如果含有則退出,字符指針p指向該匹配子串后面的位置,利用prinff函數(shù)輸出則從該位置開始一直輸出到字符串b的結尾。26、有以下程序#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2),i,i,t=1;for(i=0;i<=i;j++)t+=b[i][b][i]];printf("%d\n",t);}程序運行后的輸出結果是A、3B、1C、9D、4標準答案:D知識點解析:這道題主要考查的是二維數(shù)組的有關知識。在兩層for循環(huán)語句中,每次執(zhí)行變量t的累加時,二維數(shù)組元素b的第二下標的值與第一下標相同的值,所以程序執(zhí)行的過程為t=1+b[1][1]+b[2][2]=1+1+2=4。27、有以下程序#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=1;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm:}main(){inta[4][4]={{1,2,3,4),{11,12,13,14},{21,22,23,24},{31,32,33,34));printf("%d\n",fun(a,4,0));}程序的運行結果是A、31B、34C、4D、32標準答案:A知識點解析:函數(shù)fun(int(*s)[4],intn,intk)的功能是返回二維數(shù)組第k列的最大元素。在主函數(shù)中由于二維數(shù)組a[4][4]已經(jīng)初始化,所以fun(a,4,0)的值是二維數(shù)組a[][]第1列中的最大元素31。28、有下列程序:main(){inta[4][4]:{{1,4,3,2),{8,6,5,7),{3,7,2,5),{4,8,6,1)),i,k,t;for(i=0;i<3;i++)for(k=i+l;k<4;k++)if(a[i][i]<a[k][1[]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i++)printf("%d,",a[0][i]);}程序運行后的輸出結果是A、6,2,1,1,B、1,1,2,6,C、2,3,4,6,D、6,4,3,2,標準答案:D知識點解析:利用二重for循環(huán)對二維數(shù)組a[4][4]的主對角線上的元素{1,6,2,1}實現(xiàn)按列從大到小排序,所以數(shù)組a[4][4]的值變?yōu)閧{6,4,3,2,},{8,2,5,7},{3,7,1,5},{4,8,6,1},最后輸出數(shù)組a[4][4]第一行上的元素,所以輸出結果為6,4,3,2。29、以下敘述中正確的是A、語句inta[4][3]={1,2,4,5);是錯誤的初始化形式B、語句inta[][3]={1,2,4,5);是錯誤的初始化形式C、在邏輯上,可以把二維數(shù)組看成是一個具有行和列的表格或矩陣D、語句inta[4][3]={{1,2},{4,5}};是錯誤的初始化形式標準答案:C知識點解析:在理解二維數(shù)組的時候,可以把一個二維數(shù)組看成是一個一維數(shù)組,每個數(shù)組元素又是包含有若干個元素的一維數(shù)組,也就是具有行列的結構,二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。30、以下語句中存在語法錯誤的是A、charss[][20]={"right?");B、char*ss[6];ss[1]="right?";C、char*ss[]={"right?");D、charss[6][20];ss[1]="right?";標準答案:A知識點解析:選項A)中定義了二維數(shù)組ss,可以用于存儲字符串,但是字符串的存儲不能通過賦值,僅可以初始化或者輸入得到,而選項C)和A)不同,選項C)為指針數(shù)組,對于指針變量可以保存常量字符串的地址。31、有以下程序#includeintfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);)main(){printf("%d\n",fun("0ABCDEF"));)程序運行后的輸出結果是A、6B、7C、1D、0標準答案:B知識點解析:函數(shù)fun的主要功能是計算字符串中實際字符的個數(shù),因此主函數(shù)中調用fun得到結果為7。32、以下敘述中正確的是A、charca[3][5]={"A","BB","CCC"};是不合語法的B、字符串數(shù)組,是指數(shù)組中的每個元素都是一個存放字符串的一維數(shù)組C、charca[][5]:{"A",”BB”,"CCC"};是不合語法的D、char*ca[3]={"A","BB","CCC"};是不合語法的標準答案:B知識點解析:字符串數(shù)組,也就是二維字符數(shù)組,其中每個元素為一個字符串,選項B)的說法正確。選項A)和C)對于ca的定義是正確的。選項D)定義一個指針數(shù)組,可以保存多個字符串的首地址。33、以下敘述中正確的是A、語句charstr[10]="string!";和charstr[10]={ttstring!”);并不等價B、對于一維字符數(shù)組,不能使用字符串常量來賦初值C、對于字符串常量"string!",系統(tǒng)已自動在最后加入了’\0’字符,表示串結尾D、在語句charstr[]="string!";中,數(shù)組str的大小等于字符串的長度標準答案:C知識點解析:在C語言中,字符串是借助于字符型一維數(shù)組來存放的,可以借助在定義時初始化以及輸入來把字符串存入數(shù)組,并規(guī)定以字符’\0’作為“字符串結束標志”?!?’是一個轉義字符,稱為空值,它的ASCII碼值為0?!?’作為標志占用存儲空間,但不計入字符串的實際長度。在C語言中,系統(tǒng)在每個字符串的最后自動加入一個字符(’\0’)作為字符串的結束標志。34、以下選項中,沒有編譯錯誤的是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":標準答案:A知識點解析:選項A)是定義了字符數(shù)組str3[],并對其賦初值。選項B)中語句str2=str1非法,字符數(shù)組不能直接賦值。選項C),D)和選項B)一致。35、設有定義:charp[]={’1’,’2’,’3’},*q=p;以下不能計算出一個char型數(shù)據(jù)所占字節(jié)數(shù)的表達式是A、sizeof(p)B、sizeof(char)C、sizeof(*q)D、sizeof(p[0])標準答案:A知識點解析:選項A)計算的是p[]字符數(shù)組首地址所占的內存字節(jié)數(shù),返回值數(shù)組中所有元素占有的空間。*q和p[0]分別表示數(shù)組p中下標為0的字符元素,選項B)和D)都可以計算char型數(shù)據(jù)占有的字節(jié)數(shù)。36、以下不能將S所指字符串正確復制到t所指存儲空間的是A、for(i=0;t[i]=s[i];i++);B、while(*t=*s){t++;s++;}C、for(i=0,d=0;t[i++]:s[j++];);D、do{*t++=*s++;}while(*s);標準答案:D知識點解析:在選項D)中,不能把s所指字符串的結束標志符賦給字符串t。37、有以下程序#includevoidmain(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’&&s[i]<=’z’)n++;printf("%d\n",n);}程序運行后的輸出結果是A、0B、3C、5D、2標準答案:D知識點解析:這段程序的功能求出字符串s中字符在小寫字符a到z之間字符的個數(shù)。在程序中字符串s的值為“012xy”,所以在字符串s中符合要求的字符的個數(shù)等于2。38、若要求從鍵盤讀入含有空格字符的字符串,應使用函數(shù)A、getc()B、gets()C、getchar()D、scanf()標準答案:B知識點解析:scanf()語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數(shù)不能輸入空格;getchar()函數(shù)用于輸入字符,其調用形式為:ch=getchar(),getchar()函數(shù)從終端讀入一個字符作為函數(shù)值,把讀入的一個字符賦給變量ch。在輸入時,空格、回車符都將用于字符讀入,而且只有在用戶敲入Enter鍵時,讀入才開始執(zhí)行。gets()函數(shù)的調用形式為:gets(str_adr),其中sir_adr是存放輸入字符串的起始地址,可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。gets()函數(shù)用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc()函數(shù)的調用形式為:ch=getc(Pf)其中pf是文件指針。函數(shù)的功能是從pf指定的文件中讀入一個字符,并把它作為函數(shù)值返回。國家二級C語言機試(函數(shù)和數(shù)組)模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、有以下程序(strcpy為字符串復制函數(shù),strcat為字符串連接函數(shù))#include<stdio.h>#include<string-h>main(){chara[10]=’’abc’’,b[10]=’’012’’,c[10]=’’xyz’’;strcpy(a+1,b+2);puts(strcat(a,c+1));}程序運行后的輸出結果是A、bc2yzB、a2yzC、a12xyzD、12yz標準答案:B知識點解析:程序執(zhí)行strcpy(a+1,b+2)后,字符數(shù)組a的值為”a2”,再進行字符串的連接strcat(a,c+1),此時字符數(shù)組a的值為”a2yz”。2、有定義語句:chars[10]=’’1234567\0\0’’;則strlen(s)的值是A、8B、7C、9D、10標準答案:B知識點解析:字符串長度函數(shù)strlen(s)表示計算出以s為起始地址的字符串的長度,并作為函數(shù)值返回。這個長度值不包括串尾的結束標志’\0’。3、有以下程序,程序中庫函數(shù)islower(ch)用以判斷ch中的字*是否為小寫字*#include<stdio.h>#include<ctype.h>yoidfun(char*p){inti=0;while(p[i]){iffp[i]=’’&&islower(p[i-1]))p[i-1]=p[i-1]=p[i-1]-’a’+’A’;i++:}}main(){chars1[100]=’’abcdEFG!’’;fun(s1);printf(’’%s\n’’,s1);}程序運行后的輸出結果是A、abcdEFg!B、abcdEFG!C、abcdEFg!D、abcDEFG!標準答案:D知識點解析:函數(shù)fun(char*p)的功能是如果p[i]指向的字符為空字符并且其前~個字符是小寫字*,則把小寫字*變成大字*,所以在主函數(shù)中,執(zhí)行fun(s1)后,小寫字*b,d都改成大字*。4、下列選項中,能夠滿足’’只要字符串s1等于字符串s2,則執(zhí)行ST’’要求的是A、if(s1=s2)ST;B、if(strcpy(s1,s2)=1)ST;C、if(strcmp(s2,s1)=0)ST;D、if(s1-s2=0)ST;標準答案:C知識點解析:在C語言中要對兩個字符串的大小進行比較,就需要調用字符串比較函數(shù)strcmp(),如果這個函數(shù)的返回值等于0,說明兩個字符串相等。5、以下敘述中正確的是A、函數(shù)既可以直接調用自己,也可以間接調用自己B、任何情況下都不能用函數(shù)名作為實參C、函數(shù)的遞歸調用不需要額外開銷,所以效率很高D、簡單遞歸不需要明確的結束遞歸的條件標準答案:A知識點解析:一個C語言源程序可以由一個或多個源文件組成,每個源文件可由一個或多個函數(shù)組成,各函數(shù)之間是平行的,除了主函數(shù)外,函數(shù)之間可以相互調用,甚至C語言中的函數(shù)可以直接或間接地自己調用自己,稱之為遞歸調用,該調用主要用于把要解決的問題轉化為一個新的問題,而這個新問題的解決方法仍與原來的解法相同,只是所處理的對象有規(guī)律地遞增或遞減,可以應用這個轉化過程使問題得到解決,同時為了有效使用遞歸調用必定要有一個明確的結束遞歸的條件。而每次進行遞歸調用時候,需要利用棧保存現(xiàn)場信息,因此并不會提高效率,選項C和選項D不正確。函數(shù)名表名了函數(shù)的入口地址,如果函數(shù)的形參為指向函數(shù)的指針變量,那么對應的實參必須為函數(shù)名,因此函數(shù)名可以為函數(shù)的參數(shù),選項B錯誤。6、以下敘述中錯誤的是A、用戶定義的函數(shù)中可以沒有return語句B、用戶定義的函數(shù)中若沒有retum語句,則應當定義函數(shù)為yoid類型C、用戶定義的函數(shù)中可以有多個retum語句,以便可以調用一次返回多個函數(shù)值D、函數(shù)的retum語句中可以沒有表達式標準答案:C知識點解析:函數(shù)值通過retum語句返同,retum語句的形式如下:retum表達式或retum(表達式):當程序執(zhí)行到renJm語句時,程序的流程就返回到調用該函數(shù)的地方,并帶回函數(shù)值。在同一函數(shù)內,可以根據(jù)需要,在多處出現(xiàn)retum語句,在函數(shù)體的不同部位退出函數(shù)。無論函數(shù)體中有多少個retum語句,retum語句只可能執(zhí)行一次,返回一個函數(shù)值。retum語句中也可以不含有表達式,這時必須定義函數(shù)為vojd類型,它的作用只是使流程返回到調用函數(shù),并沒有確定的函數(shù)值。函數(shù)體內可以沒有retum語句,這時也必須定義函數(shù)為void類犁,程序的流程就一直執(zhí)行到函數(shù)末尾的”}”,然后返同調用函數(shù),也沒有確定的函數(shù)值帶回。7、有以下程序intadd(inta,intb){return(a+b);)main(){intk,(*f)(),a=5,b=10;f=add;}則以下函數(shù)調用語句錯誤的是A、k=add(a,b);B、k=(*f)Ca,b);C、k=*f(a,b);D、k=fla,b);標準答案:C知識點解析:在語句”k=*f(a,b)”中,由于”()”的優(yōu)先級高于”*”,所以”’f(a,b);”表示其返回類型為指針的帶有兩個整型參數(shù)的函數(shù),而不是整型數(shù)值,因此選項C為錯誤的調用形式。8、若有以下函數(shù)首部intfun(doublex[10],)則下面針對此函數(shù)的函數(shù)聲明語句中正確的是A、intfun(double,int);B、intfun(double*x,intn);C、intfun(double*,int*);D、intfun(doublex,int*n);標準答案:C知識點解析:函數(shù)說明的一般形式為:類型名函數(shù)名(參數(shù)類型1,參數(shù)類型2,……)。因為函數(shù)intfun(doublex[10],int*n)的第1個形式參數(shù)是一個雙精度型的一維數(shù)組,第2個參數(shù)是一個整型指針,并返回一個整型值。一維數(shù)組的名字表示的是一維數(shù)組的地址。9、有以下程序intflintx);main(){intn=1,m;m=f(f(f(n)));printf(’’%d\n’’,m);}intflintx){returnx*2;}程序運行后的輸出結果是A、1B、2C、4D、8標準答案:D知識點解析:程序考查了函數(shù)的調用。對于m=f(f(f(n)));首先計算最內層的函數(shù)調用f(n),執(zhí)行f函數(shù),得到返回值2,然后計算f(2),得到返回值為4,最后計算”4),得到計算結果為8。10、有以下程序#include<stdio.h>doublef(doublex);main(){doublea:0;inti;for(i=0;i<30;i+=10)a+=f((double)i);printf(’’%5.of\n’’,a);}doublef(doublex){returnx*x+1;}程序運行后的輸出結果是A、401B、500C、503D、1404標準答案:C知識點解析:由于函數(shù)f的作用是對形參x求平方再加1,所以在主函數(shù)中,循環(huán)第一次執(zhí)行后變量a的值等于1,第二次執(zhí)行后,變量a的值等于102,第三次執(zhí)行后,變量a的值等于503。11、有以下程序#include<stdio.h>intflintx);main(){inta,b=0;for(a=0;a<3;a++){b=b+f(a);putchar(’A’+b);}}intflintx){returnx*x+1;)A、BCDB、BDIC、ABED、BCF標準答案:B知識點解析:在函數(shù)main()中,第一次執(zhí)行for循環(huán)時,b的值等于1,此時輸出字*B;第二次執(zhí)行for。循環(huán)時,b的值等于3,此時輸出字*D;第一次執(zhí)行for循環(huán)時,b的值等于8,此時輸出字*I。12、有以下程序#include<stdio.h>intfun(intx){intp;if(x=0‖x=1)return(3);p=x-fun(x-2);retum(p);)main(){printf(’’%d\n’’,fun(9));}程序運行后的輸出結果是A、5B、9C、4D、7標準答案:D知識點解析:函數(shù)fun的主要功能是:初值x的值為9,因此fun(9)=9.fun(7)=9.(7.(5-(3-3))),因此答案為7。13、以下選項中函數(shù)形參不是指針的是A、fun(int&p){…}B、fun(inta[10]){…)C、fun(int*a){…)D、fun(intP[]){…}標準答案:A知識點解析:C語言中形參數(shù)組是指針變量,其數(shù)組中元素的個數(shù)由傳遞的實參數(shù)組決定,因此可以在定義的時候,不給出元素個數(shù)的說明,因此選項B和D形參均為指針變量,選項A的定義在C語言中不存在的。14、有以下程序(strcat函數(shù)用以連接兩個字符串)#include<stdio.h>#include<string.h>main(){chara[20]=’’abcD\OEFG\O’’,b[]=’’%s\n’’;strcat(a,b);printf(’’%s\n’’,a);}程序運行后的輸出結果是A、abcDE\0FG\0UKB、abcDUKC、UKD、EFGUK標準答案:B知識點解析:在字符串中字符’\0’表示字符串的結束標志,所以字符串a(chǎn)和b相連接的結果為ABCDUK。15、若有以下程序intflinta[],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(’’%dha’’,f(a,9));}則程序的輸出結果是A、9B、1C、8D、53.7局部變量和全局變量標準答案:A知識點解析:主函數(shù)中調用f(a,9),遞歸函數(shù)的調用過程如下: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。16、有以下程序intd=1;yoidfun(intP){intd=5:d+=p++;printf(’’%d’’,d);)main(){inta=3:fun(a);d+=a++:printf(’’%d\n’’,d);}程序的輸出結果是A、96B、94C、84D、85標準答案:C知識點解析:代碼考查點為全局變量和局部變量的同名問題,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內,訪問的是局部變量,與同名的全局變量不發(fā)生任何關系。主函數(shù)執(zhí)行。fun(3)時候,執(zhí)行調用函數(shù)fun,使用局部變量d=5,執(zhí)行d+=p++,相當于d:d+(p++),得到d的值為8,輸出。函數(shù)調用結束,轉到主函數(shù),繼續(xù)執(zhí)行d+=a++,此時d為全局變量,執(zhí)行語句以后,d值為4。17、有以下程序yoidfun2(chara,charb){printf(’’%c%c’’,a,b);)chara=’A’,b=’B’;yoidfunl(){a=’C’;b=’D’;)main(){funl();printf(’’%c%c’’a,b);fun2(’E’,’F’);}程序的運行結果是A、ABEFB、CDEFC、abcDD、CDAB3.8變量的作用域和生存期標準答案:B知識點解析:存funl()函數(shù)之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處到整個程序結束。在fun1()函數(shù)之內定義了兩個變量a和b,并且分別初始化為字符’C’和’D’。在C語言中,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中此全局變量被屏蔽,在該函數(shù)內訪問的是局部變量,與同名的全局變量不發(fā)生任何關系。所以在主函數(shù)中,執(zhí)行fun1()后,變量a、b的值分別等于’C’、’D’,打印輸出CD,接著執(zhí)行fun2(’E’F’)語句,變量a、b的值變?yōu)椤疎’、’F’并輸出。18、有以下程序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í)行后的輸出結果是A、5,5B、5,11C、11,11D、11,5標準答案:B知識點解析:子函數(shù)fun(intx,inty),將變量m和i聲明為局部靜態(tài)變量,因此第1次調用主函數(shù)后,局部靜態(tài)變量m和i的值為5和3,第1次函數(shù)調用結束時,它們的值不釋放保持不變,所以第2次調用時,局部靜態(tài)變量m和i的初始值分別為5和3,即在執(zhí)行”i+=m+1”時,i的值為9,因此最終m的值為11。19、有以下程序#include<stdio.h>intflintn);main(){inta=3,s;s=f(a);s=s+f(a);printf(’’%d\n’’,s);)intflintn){staticinta=1;n+=a++:retumn;}程序運行后的輸出結果是A、9B、8C、7D、10標準答案:A知識點解析:在主函數(shù)中第一次調用f(a)時,得到變量s的值等于4,在第二次調用f(a)時,在子函數(shù)f中由于變量a是一個局部靜態(tài)變量,所以這次其值等于2,因而在主函數(shù)中第二次調用f(a)后,其返回值等于5,最后變量s的值等于9。20、有以下程序intf(intm){staticintn=0;n+=m;returnn;}main(){intn=0:printf(’’%d,’’,f(++n));printf(’’%d\n’’,fin++));)程序運行后的輸出結果是A、1.1B、1,2C、2,3D、3,3標準答案:B知識點解析:由于在函數(shù)f中,變量n為靜態(tài)局部變量,所以在主函數(shù)中第一次調用函數(shù)f后,變量n的值等于l,當?shù)诙{用函數(shù)f時,在函數(shù)f的內部靜態(tài)局部變量n的值仍然保留等于l,所以返回函數(shù)值等于2。21、有以下程序#include<stdio.h>yoidmain(){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]:O;}for(i=0;i<4;i++)printf(’’%d’’.,a[i]);printf(’’\n’’);}程序運行后的輸出結果是A、2050B、3344C、3040D、304標準答案:C知識點解析:在主函數(shù)的for循環(huán)語句中,當循環(huán)變量i的值等于0,2時,執(zhí)行switch中的case0語句,分別對數(shù)組元素a[0]和a[2]加1和減1,所以a[0]的值等于3,a[2]等于4。當循環(huán)變量i的值等于1,3時,執(zhí)行switch中的case1語句,把數(shù)組元素a[1]和a[3]的值賦為0。所以輸出數(shù)組a的元素,其結果為3040。22、下列選項中,能正確定義數(shù)組的語句是A、intnum[];B、intN=2008;intnum[N];C、intnum[0.2008];D、#defineN2008intnum[N];標準答案:D知識點解析:在定義一維數(shù)組時,數(shù)組的下標應該是一個確定的整數(shù)值。要注意的是在定義二維數(shù)組時,其第一維下標可以省略,但第二維下標不能省略。23、有以下程序#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3),c[5]:{O},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf(’’%d’’,c[i]);printf(’’\n’’);}A、4332B、2344C、1234D、1123標準答案:A知識點解析:本題考查for語句的循環(huán)控制,首先定義了兩個數(shù)組并賦予了初始值,第一個for循環(huán)語句循環(huán)12次遍歷s數(shù)組的各個元素,將sn中的原素值作為c[]數(shù)組中的下標,使相應的值自加。例如當i=0,c[s[0]]++為c[1]++,其值變?yōu)?,當執(zhí)行i=11,2,11后,c[1]、c[2]、c[3]、c[4]分別為4、3、3、2,故選項A為正確的運行結果。24、以下敘述中正確的是A、一條語句只能定義一個數(shù)組B、數(shù)組說明符的一對方括號中只能使用整型常量,而不能使用表達式C、每個數(shù)組包含一組具有同一類型的變量,這些變量在內存中占有連續(xù)的存儲單元D、在引用數(shù)組元素時,下標表達式可以使用浮點數(shù)標準答案:C知識點解析:數(shù)組的定義格式:類型說明符數(shù)組名[整型常量表達式]…;可以同時定義多個類型相同的數(shù)組,之間以逗號分隔開,數(shù)組的類型表明了數(shù)組中元素的數(shù)據(jù)類型,數(shù)組中所有元素的類型相同,數(shù)組經(jīng)過定義以后就可使用,編譯程序將對其分配一片連續(xù)的存儲空間進行連續(xù)存儲。C語言中只能單個引用數(shù)組元素而不能一次引用整個數(shù)組。引用格式為:數(shù)組名[下標],引用元素時,需要注意下標只能為整型常量或整型表達式。25、有以下程序#include<stdio.h>main(){inta[]={10,20,30,40},*p=a,i;for(i=0;i<=3;i++){a[i]=*p;p++;)printf(’’%d\n’’,a[2]);}程序運行后的輸出結果是A、20B、30C、10D、40標準答案:B知識點解析:因為指針變量p的初始值指向數(shù)組a,所以執(zhí)行for循環(huán)語句后,數(shù)組a中的元素的值不變。26、若有以下程序#includechar*a=’’you’’,b[]=’’welcome#you#to#China!’’;main(){inti,j=0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a=b[i]){p=&b[i];for(j=0;a[j]!=’\0’;j++){if(a[j]!=*P)break;p++;}if(a[j]=’\0’)break;}}printf(’’%s\n’’,p);}則程序的輸出結果是A、#you#to#China!B、me#}you#}to}}China!C、#}China!D、#to#China!標準答案:D知識點解析:程序中循環(huán)部分的主要功能是,在字符串b中尋找是否含有子串a(chǎn),如果含有則退出,字符指針p指向該匹配子串后面的位置,利用printf函數(shù)輸出則從該位置開始一直輸出到字符串b的結尾。27、有以下程序#include<stdio.h>#defineN4yoidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}yoidmain(){intx[N][N]={{1,2,3,4),{5,6,7,8},{9,10,11,12},{13,14,15,16}),y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printff’’\n’’);}程序運行后的輸出結果是A、-12,-3,0,0,B、-3,-1,1,3,C、0,1,2,3,D、-3,-3,-3,-3標準答案:B知識點解析:。fun函數(shù)的功能是求出二維數(shù)組a中第i行第i個元素與第N-l-i元素的差,賦給b[i]。在主函數(shù)中,把實參二維數(shù)組x和一維數(shù)組y傳遞給形參a和b,最后輸出一維數(shù)組y中元素的值。28、有下列程序:main(){intx[3][2]={0),i;for(i=0;i<3;i++)scanf(’’%d’’,x[i]);printf(’’%3d%3d%3d\n,x[0][0],x[0][1],x[1][0]);)若運行時輸入:246<CR>,則輸出結果為A、200B、240C、204D、246標準答案:C知識點解析:語句x[3][2]={0}表示將二維數(shù)組x的所有元素賦初值0,而循環(huán)語句for(i=0;i<3;i++)scanf(¨%d’’,x[i])表示對數(shù)組元素x[0][0]、x[1][0]、x[2][0]賦值。所以當運行程序時,輸入246<CR>時,數(shù)組元素x[0][0]=2、x[1][0]=4、x[2][0]=6,因此,輸出數(shù)組元素x[0][0]=2、x[0][1]=0、x[1][0]=4的值204。29、有下列程序:main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf(’’%d’’[2-i][i]);}程序執(zhí)行后的輸出結果是A、753B、369C、751D、357標準答案:D知識點解析:由于在程序中定義了二維數(shù)組t[][3]={9,8,7,6,5,4,3,2,1};由二維數(shù)組的存儲方式按行存儲,即初始化完第一行的所有列再初始化下一行的元素??芍@是一個3行3列的二維數(shù)組,第一行的元素為{9,8,7},第二行的元素為{6,5,4},第三行的元素為{3,2,1}。然后用for循環(huán)輸出t[2][0]、t[1][1]、t[0][2],它們的值分別為3、5、7。30、以下錯誤的定義語句是A、intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};B、intx[][3]={{0),{1},{1,2,3}};C、intx[][3]={1,2,3,4);D、intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};標準答案:D知識點解析:一維數(shù)組定義和初始化是允許省略行下標,不允許省略列下標。31、有以下程序#include<stdio.h>#defineN3yoidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=j<N;j++)if(b[i]<a[i][j])b[i]=a[i]D];}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printf(’’\n’’);}A、1,3,5,B、2,4,8,C、3,5,7D、3,6,9標準答案:D知識點解析:函數(shù)fun()的作用是求出二維數(shù)組a口[N]中每一行中的最大元素,所以在main()函數(shù)中執(zhí)行完fun(x,y)后,數(shù)組y中的元素為二維數(shù)組x[N][N]每一行的最大元素。32、下列敘述中正確的是A、兩個連續(xù)的單引號(’’)是合法的字符常量B、可以對字符串進行關系運算C、兩個連續(xù)的雙引號(’’’’)是合法的字符串常量D、空字符串不占用內存,其內存空間大小是0標準答案:C知識點解析:兩個連續(xù)的雙引號:’’’’,是一個字符串常量,稱為”空串”。33、若有以下程序段charstr[4][12]={’’aa’’,’’bbb’’,’’ccccc’’,’’d’’),*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正確引用字符串的選項是A、strpB、str[0]C、strp[3]D、*strp標準答案:A知識點解析:程序段中定義指針數(shù)組*strp,含有4個元素,for循環(huán)strp分別保存了二維數(shù)組str中的4個字符串的首地址,因此strl)為二級地址,不能保存字符串的首地址*strp或者strp[0]中存放了字符串”aa”的首地址。所以不能正確引用字符串的為選項A。34、以下敘述中正確的是A、函數(shù)調用strlen(s);會返回字符串s實際占用內存的大小(以字節(jié)為單位)B、兩個字符串可以用關系運算符進行大小比較C、當拼接兩個字符串時,結果字符串占用的內存空間是兩個原串占用空間的和D、C語言本身沒有提供對字符串進行整體操作的運算符標準答案:D知識點解析:C語言中沒有運算符可以處理字符串,要調用”string庫中的函數(shù)來處理字符串,其中strlen函數(shù)主要測試字符串中實際字符的個數(shù),比實際占用的內存至少要少一個。Strcat(s1,s2)函數(shù)用于連接兩個字符串,是把字符串s2連接到s1的后面。35、設有定義charstr[]=’’Hello’’;則語句printf(’’%d%d’’,sizeof(str),strlen(str));的輸出結果是A、66B、65C、55D、56標準答案:B知識點解析:sizeof主要用于測試變量所占的實際內存,而strlen函數(shù)主要測試字符串中實際字符的個數(shù),字符串”Hello”占有內存6個字節(jié),而字符串中共有5個字符。36、有以下程序main(){chara[5][10]={’’one’’,’’two’’,’’three’’,’’four’’,’’fiye’’);inti,j;chart;for(i=0;i<4;i++)for0=i+1;j<5;j++)if(a[i][0]>aD][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;}puts(a[1]);}程序運行后的輸出結果是A、fwoB、owoC、twoD、fix標準答案:A知識點解析:這個程序的執(zhí)行過程是當i=0時,j=1,a[0][0]=0<a[1][0]=t;不置換;當i=1時,j=2,a[1][0]=t=a[2][0]=t;不置換;當i=2時,j=3,a[2][0]=t>a[3][0]=f;置換a[2][0]=ea[3][0]=t;此時,a[2][0]=ea[1][0]=t,再置換a[2][0]=t,a[1][0]=e;當i=3時,j=4,a[3][0]=f=a43][0]=t不置換;所以a[1]的結果為fWo。37、有以下程序#include<stdio.h>#include<string-h>yoidmain(){charstr[][20]={.’One*World’’,’’One*Dream!’’),*p=str[1];printf(’’%d,’’,strlen(p));printf(’’%s\n’’,p);}程序運行后的輸出結果是A、9,One*Dream!B、10,One*Dream!C、9,One*WorldD、10,One*World標準答案:B知識點解析:在主函數(shù)中定義了二維字符數(shù)組str,并對它賦初值。定義字符指針p,并把字符串str[1]的地址賦給它。所以這時字符指針p指向字符串”O(jiān)ne*Dream!”,然后在兩個輸出語句中,分別輸出這個字符串的長度10和字符串本身。38、下列語句組中,正確的是A、char*s;s=’’Olympic’’;B、chars[7];s=’’Olympic’’;C、char*s;s={’’Olympic’’};D、chars[7];s={’’Olympic’’};標準答案:A知識點解析:選項A中定義了指針變量s,通過賦值語句保存字符串常量的地址,而字符數(shù)組絕對不能賦值,而只能初始化或者輸入。39、以下能正確定義字符串的語句是A、charstr=’’Lx43’’:B、charstr[]=’’\0’’:C、charstr=’’;D、charstr[]={’\064’};標準答案:B知識點解析:字符串常量是用一對雙括號括起來的一串字符。它用字符數(shù)組來存放,不用一對大括號對括起來。40、有以下程序#include<stdio.h>main(){chars[]=’’abcde’’;s+=2;printf(’’%d\n’’,s[0]);}執(zhí)行后的結果是A、輸出字符c的ASCⅡ碼B、輸出字符CC、輸出字符a的ASCⅡ碼D、程序出錯標準答案:D知識點解析:因為字符數(shù)組s[]中的數(shù)組名s表示的是一個地址常量。所以語句”s+=2;”不能將指針在當前位置的基礎上再向后移動兩位。因而程序編譯時出錯。國家二級C語言機試(函數(shù)和數(shù)組)模擬試卷第3套一、選擇題(本題共38題,每題1.0分,共38分。)1、若各選項中所用變量已正確定義,函數(shù)fun中通過return語句返回一個函數(shù)值,以下選項中錯誤的程序是A、main(){……x=fun(2,10);……}floatfun(inta,intb){……}B、floatfun(inta,intb){……)main(){……=fun(i,j);……}C、floatfun(int,int);main(){……x=fun(2,10);……)floatfun(inta,intb){……)D、main(){floatfun(inti,intj);……x=fun(ij);……}floatfun(inta,intb){……)標準答案:A知識點解析:C語言規(guī)定,函數(shù)必須先定義,后調用(函數(shù)的返回值類型為int或char時除外)。在選項A)中,調用的子函數(shù)在調用后面定義,所以不正確。在選項B)、C)中,被調用函數(shù)在主函數(shù)之前定義,再在主函數(shù)中調用,所以是正確的;在選項D)中,在主函數(shù)中先對子函數(shù)floatfun(inti,intj)進行了聲明,然后進行調用。2、有以下程序#includemain(){charp[20]={’a’,’b’,’c’,’d’},q[]="abc",r[]="abcde";strcat(p,r);strcpy(p+strlen(q),q);printf("%d\n".strlen(p));}程序運行后的輸出結果是A、9B、11C、6D、7標準答案:C知識點解析:字符串連接函數(shù)strcat(p,r)的功能是把字符數(shù)組p[]和r[]連接起來,此時字符數(shù)組p[]的有效字符長度為9,再執(zhí)行strcpy(p+strlen(q),q)字符串復制函數(shù),把字符數(shù)組q[]復制到字符數(shù)組p[]從p[3]開始到p[5]數(shù)組位置中,由于字符數(shù)組q[]中的內容為字符串“abc”復制時把字符串結束標志’\null’也復制到字符數(shù)組p[]中,這時字符函數(shù)strlen(p)返回字符數(shù)組p[]的有效字符長度為6。3、若有以下定義和語句charsl[10]="abed!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));則輸出結果是A、105B、107C、55D、58標準答案:C知識點解析:本題要注意的是轉義字符的問題,在字符串s2中,有兩個轉義字符,分別是回車換行符和反斜線。所以其字符串長度等于5。4、以下敘述中正確的是A、函數(shù)名代表該函數(shù)的入口地址B、所有函數(shù)均不能接受函數(shù)名作為實參傳入C、函數(shù)體中的語句不能出現(xiàn)對自己的調用D、如果函數(shù)帶有參數(shù),就不能調用自己標準答案:A知識點解析:函數(shù)形、實參傳遞的時候,要求對應位置類型一致即可,如果實參為函數(shù)名,可以定義相應的形參為指向函數(shù)的指針變量來獲得該函數(shù)的入口地址,因此選項B)錯誤的,在C語言中允許進行遞歸調用,即自己調用自己,選項C)和選項D)是錯誤的。5、已定義以下函數(shù)intfun(int*p){return*p;)fun函數(shù)返回值是A、不確定的值B、一個整數(shù)C、形參p中存放的值D、形參p的地址值標準答案:B知識點解析:由函數(shù)intfun(int*p){return*p;}的定義可知,返回值為整型指針變量p所指向的數(shù)據(jù)。6、有以下程序intadd(inta,intb){return(a+b);}main(){intk,(*f)(),a=5,b=10;f=add;…}則以下函數(shù)調用語句錯誤的是A、k=add(a,b);B、k=(*f)(a,b);C、k=*f(a,b);D、k=f(a,b);標準答案:C知識點解析:在語句“k=*f(a,b)”中,由于“()”的優(yōu)先級高于“*”,所以“*f(a,b);”表示其返回類型為指針的帶有兩個整型參數(shù)的函數(shù),而不是整型數(shù)值,因此選項C)為錯誤的調用形式。7、以下選項中敘述錯誤的是A、在C程序的同一函數(shù)中,各復合語句內可以定義變量,其作用域僅限本復合語句內B、C程序函數(shù)中定義的賦有初值的靜態(tài)變量,每調用一次函數(shù),賦一次初值C、C程序函數(shù)中定義的自動變量,系統(tǒng)不自動賦確定的初值D、C程序函數(shù)的形參不可以說明為static型變量標準答案:B知識點解析:在函數(shù)定義的靜態(tài)變量,只需要賦值1次,即可保存初始值,不需要每次調用時都賦初始值。8、有以下程序#includeintf(intx,intY){return((y-x)*x);}main(){inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf("%d\n",d);}程序運行后的輸出結果是A、10B、8C、9D、7標準答案:C知識點解析:本題考查函數(shù)的嵌套調用。首先計算f(a,b)與f(a,c),f(a,b)=(b-a)*a=3,f(a,c)=(c-a)*a=6,然后計算f(3,6)=(6.3)*3=9。9、有以下程序voidfun(inta,intb,intC){a=b;b=c;c=a;}main(){inta=10,b=20,c=30;fun(a,b,@C)@;printf("%d,%d,%d\n",c,b,a);)程序運行后的輸出結果是A、10,20,30B、20,30,10C、30,20,10D、0,0,0標準答案:C知識點解析:函數(shù)fun中采用了變量作為參數(shù),那么參數(shù)傳遞以后,形參a,b,c的變化對于實參a,b,c是沒有影響的,因此主函數(shù)中a,b,c的值經(jīng)過fun調用以后,值沒有變化。10、有以下程序#includeintfun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);return(p);}main(){printf("%d\n",fun(9));}程序運行后的輸出結果是A、5B、9C、4D、7標準答案:D知識點解析:函數(shù)fun的主要功能是:初值x的值為9,因此fun(9)=9.fun(7)=9-(7-(5-(3-3))),因此答案為7。11、以下選項中函數(shù)形參不是指針的是A、fun(int&p){…}B、fun(inta[10]){…}C、fun(int*a){…}D、fun(intP[]){…}標準答案:A知識點解析:C語言中形參數(shù)組是指針變量,其數(shù)組中元素的個數(shù)由傳遞的實參數(shù)組決定,因此可以在定義的時候,不給出元素個數(shù)的說明,因此選項B)和D)形參均為指針變量,選項A)的定義在C語言中不存在的。12、有以下程序(strcat函數(shù)用以連接兩個字符串)#include#includemain(){chara[20]="ABCD\0EFG\0",b[]=="IJK";strcat(a,b);printf("%s\n",a);}程序運行后的輸出結果是A、ABCDE\0FG\0IJKB、ABCDIJKC、UKD、EFGIJK標準答案:B知識點解析:在字符串中字符’\0’表示字符串的結束標志,所以字符串a(chǎn)和b相連接的結果為ABCDIJK。13、若有以下程序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));)則程序的輸出結果是A、9B、1C、8D、5標準答案:A知識點解析:主函數(shù)中調用f(a,9),遞歸函數(shù)的調用過程如下: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。14、有以下程序intd=1;voidfun(intP){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);)程序的輸出結果是A、96B、94C、84D、85標準答案:C知識點解析:代碼考查點為全局變量和局部變量的同名問題,若全局變量和某個函數(shù)中的局部變量同名,則在該函數(shù)中,此全局變量被屏蔽,在該函數(shù)內,訪問的是局部變量,與同名的全局變量不發(fā)生任何關系。主函數(shù)執(zhí)行fun(3)時候,執(zhí)行調用函數(shù)fun,使用局部變量d=5,執(zhí)行d+=p++,相當于d=d+(p++),得到d的值為8,輸出。函數(shù)調用結束,轉到主函數(shù),繼續(xù)執(zhí)行d+=a++,此時d為全局變量,執(zhí)行語句以后,d值為4。15、有以下程序voidfun2(chara,charb){printf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)生產(chǎn)管理與調度方案手冊
- 公司電話客服勞動合同
- 防雷接地施工方案例
- 2025年人力資源制度:全日制從業(yè)人員勞動合同
- 咨詢產(chǎn)品服務合同
- 環(huán)氧樹脂注漿施工方案
- 晉城房屋糾偏施工方案
- 泄爆吊頂施工方案
- 鋼欄桿安裝工程施工方案
- 濱城區(qū)七上數(shù)學試卷
- 南大版一年級心理健康第5課《校園“紅綠燈”》課件
- 婦女節(jié)女性健康知識講座關愛女性健康主題宣教課件
- 2024年浙江省煙草專賣局(公司)管理類崗位招聘筆試真題
- 廣東省惠州市惠東縣2022年小升初語文試卷(學生版+解析)
- 《木蘭詩》歷年中考古詩欣賞試題匯編(截至2024年)
- 新人教版(2025春季版)七年級下冊英語單詞表(可編輯一表解決所有需求)
- 智能建筑監(jiān)理例會會議記錄
- 中國稀土熱障涂層材料行業(yè)分類、市場運行態(tài)勢及產(chǎn)業(yè)鏈全景圖譜分析報告
- 2025年九年級上冊道德與法治核心知識點梳理匯編
- 七年級數(shù)學新北師大版(2024)下冊第一章《整式的乘除》單元檢測習題(含簡單答案)
- 2024年安徽省高職院校單招《職測》參考試題庫(含答案)
評論
0/150
提交評論