版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
國家二級C語言(數(shù)組、函數(shù)、指針)機試模擬試卷1(共4套)(共119題)國家二級C語言(數(shù)組、函數(shù)、指針)機試模擬試卷第1套一、選擇題(本題共29題,每題1.0分,共29分。)1、下列定義數(shù)組的語句中正確的是()。A、#defineN10intx[N];B、intN=10;intx[N];C、intx[0..10];D、intx[];標準答案:A知識點解析:數(shù)組說明的一般形式為:類型說明符數(shù)組名[常量表達式]。B選項中N是變量,不能用變量定義數(shù)組長度。C選項中數(shù)組長度是一串非法的數(shù)字。定義數(shù)組時必須為其指明長度,D選項中的數(shù)組長度為空,所以非法。2、有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf("%d",t[2-i][i]);}程序的運行結(jié)果是()。A、357B、753C、369D、751標準答案:A知識點解析:二維數(shù)組t[][3]實際上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通過循環(huán)語句for語句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3時循環(huán)結(jié)束,即t[2][0]=3、t[1][1]=5、t[0][2]=7,因此A選項正確。3、若有定義語句:chars[10]="1234567\0\0";,則strlen(s)的值是()。A、7B、8C、9D、10標準答案:A知識點解析:strlen()函數(shù)是計算字符串長度時,遇到結(jié)束標識為止,且長度不包括結(jié)束標識。本題中的字符串從第一個字符開始,遇到第一個結(jié)束標識’\0’為止,注意’\0’不占字符串長度,所以字符串長度為7,因此A選項正確。4、若有以下定義和語句:#include<stdio.h>chars1[10]="abcd!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));程序的運行結(jié)果是()。A、107B、105C、55D、58標準答案:C知識點解析:strlen函數(shù)返回字符串的長度,求字符串長度時,遇到結(jié)束標志’\0’為止,但是長度不包括結(jié)束標識。字符數(shù)組s1的后5個元素沒有賦值,都為’\0’,即"abcd!"后為’\0’,所以strlen(s1)的值為5。字符指針s2所指向的字符串中,\n為轉(zhuǎn)義字符換行符,表示1個字符,\\也為轉(zhuǎn)義字符,代表\,也是1個字符,其后為字符串結(jié)束標識’\0’,所以strlen(s2)的值也為5,因此C選項正確。5、若有定義語句:char*s1="OK",*s2="ok";,以下選項中,能夠輸出"OK"的語句是()。A、if(strcmp(s1,s2)!=0)puts(s2);B、if(strcmp(s1,s2)!=0)puts(s1);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);標準答案:B知識點解析:strcmp(s1,s2)是字符串比較函數(shù),比較規(guī)則是兩個字符串自左向右逐個字符相比(按照ASCII碼值大小),以第一個不相同字符的大小作為比較結(jié)果。因為’OK’<’ok’,所以strcmp(s1,s2)為負值,只有B選項正確。6、有以下程序#include<stdio.h>#include<string.h>main(){chara[]="TEXT",*b="++",c[3]="1";printf("%d,%d,",strlen(a),sizeof(a));printf("%d,%d,",strlen(b),sizeof(b));printf("%d,%d,\n",strlen(c),sizeof(c));}程序運行后的輸出結(jié)果是()。A、4,5,2,4,1,3,B、4,4,2,2,1,1,C、5,5,3,3,2,2,D、4,4,2,2,1,3標準答案:A知識點解析:sizeof()是運算符,在頭文件中typedef為unsignedint,其值在編譯時即計算好了,參數(shù)可以是數(shù)組、指針、類型、對象、函數(shù)等。它的功能是:獲得保證能容納實現(xiàn)所建立的最大對象的字節(jié)大小。strlen(*char)是函數(shù),要在運行時才能計算。參數(shù)必須是字符型指針(char*)。當數(shù)組名作為參數(shù)傳入時,實際上數(shù)組就退化成指針了。它的功能是:返回字符串的長度。該字符串可以是自己定義的,也可以是內(nèi)存中隨機的,該函數(shù)實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結(jié)束符NULL,返回的長度大小不包括NULL。sizeof(a)求數(shù)組a所占空間的大小,包括字符串最后的’\0’,所以sizeof(a)=5,strlen()遇到’\0’就結(jié)束,strlen(a)=4。strlen(b)是指針指向的字符串長度,sizeof(b)是指針的大小。strlen(C)是字符串的長度,sizeof(C)是數(shù)組的長度。因此,輸出4,5,2,4,1,3。故答案為A選項。7、若有定義:a[]={1,2,3,4,5,6,7,8,9,10};,則a[a[5]-a[7]/a[1]]的值是()。A、2B、4C、3D、10標準答案:C知識點解析:題意中,數(shù)組a包含10個元素,其中a[5]為6,a[7]為8,a[1]為2,所以表達式a[a[5]-a[7]/a[1]]等價于a[6-8/2],等價于a[2],即3,本題答案為c。8、若有定義:chars1[100]="name",s2[50]="address",s3[80]="person";,要將它們連接成新串:"personnameaddress",正確的函數(shù)調(diào)用語句是()。A、strcat(strcat(s1,s2),s3);B、strcat(s3,strcat(s1,s2):C、strcat(s3,strcat(s2,s1);D、strcat(strcat(s2,s1),s3);標準答案:B知識點解析:strcat()函數(shù)是字符串連接函數(shù),調(diào)用形式為:strcat(s1,s2);表示將s2指向的字符串的內(nèi)容連接到s1指向的存儲空間中,返回s1的地址;由題意可知新串首地址為s3,所以s3應該是第一參數(shù),選項A、D錯誤;同理,新串中除了s3字符串,剩下的字符串為:“nameaddress”,即首地址為s1,所以調(diào)用strcat()函數(shù),s1是第一參數(shù),所以正確的函數(shù)調(diào)用語句為:strcat(s3,strcat(s1,s2));本題答案為B。9、下列敘述中錯誤的是()。A、C程序必須由一個或一個以上的函數(shù)組成B、函數(shù)調(diào)用可以作為一個獨立的語句存在C、若函數(shù)有返回值,必須通過return語句返回D、函數(shù)形參的值也可以傳回給對應的實參標準答案:D知識點解析:形參是函數(shù)定義時由用戶定義的形式上的變量。實參是函數(shù)調(diào)用時,主調(diào)函數(shù)為被調(diào)函數(shù)提供的原始數(shù)據(jù)。在C語言中,實參向形參傳送數(shù)據(jù)的方式是“值傳遞”,因此D選項正確。10、若各選項中所用變量已正確定義,函數(shù)fun中通過return語句返回一個函數(shù)值,下列選項中錯誤的程序是()。A、main(){…x=fun(2,10);…}floatfun(inta,intB){…}B、floatfun(inta,intB){…}main(){…x=fun(i,j);…}C、floatfun(int,int);main(){…x=fun(2,10);…}floatfun(inta,intB){…}D、main()…{floatfun(inta,intj);…x=fun(i,j);…}floatfun(inta,intB){…}標準答案:A知識點解析:在調(diào)用子函數(shù)時,應對其進行說明。A選項中,調(diào)用時沒有對子函數(shù)進行說明。B、C選項中,被調(diào)用函數(shù)在主調(diào)函數(shù)之前定義,不用說明;D選項中,在主函數(shù)中對被調(diào)用函數(shù)的返回值類型進行了說明。因此選擇A選項。11、有以下程序:#include<stdio.h>intf(intx);main(){intn=1,m;m=f(f(f(n)));printf("%d\n",m);}intf(intx){returnx*2;}程序的運行結(jié)果是()。A、8B、2C、4D、1標準答案:A知識點解析:第一次調(diào)用m=f(f(f(1))),第二次為m=f(f(2)),第三次為m=f(4),即返回值為8。12、有以下程序:#include<stdio.h>intfun(intx){intp;if(x==0||x==1)retum(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}程序的運行結(jié)果是()。A、2B、3C、7D、0標準答案:A知識點解析:因為fun(intx)是一個遞歸函數(shù),所以主函數(shù)中fun(7)經(jīng)過3次遞歸調(diào)用,其過程可以描述為fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2,所以最后的輸出結(jié)果為2,因此A選項正確。13、有以下程序:#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);}程序的運行結(jié)果是()。A、10B、30C、0D、64標準答案:D知識點解析:本題中靜態(tài)局部變量x,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元,在程序整個運行期間都不釋放。所以第1次循環(huán)s的值為2;第2次循環(huán)中,返回的x值為4,所以s的值為8;第3次循環(huán),返回的x值為8,所以s的值為64。14、對于以下函數(shù)聲明voidfun(intarray[4],int*ptr);以下敘述中正確的是()。A、array,ptr都是指針變量B、調(diào)用fun函數(shù)時,實參的值將逐一復制給arrayC、調(diào)用fun函數(shù)時,array按值傳送,ptr按地址傳送D、array是數(shù)組,ptr是指針,它們的性質(zhì)不同標準答案:A知識點解析:voidfun(intarray[4],int*ptr);fun()函數(shù),第一個參數(shù)雖然是數(shù)組類型,但是會退化為指針,并且形參數(shù)組的個數(shù)沒有用。第二個參數(shù)是指針,因此實際上二個形參都是指針。兩個形參都是指針,傳遞的都是地址,可知選項B、C、D錯誤。答案為A選項。15、以下說法正確的是()。A、函數(shù)可以返回另一個函數(shù)的整個函數(shù)體B、函數(shù)返回值只能是基本數(shù)據(jù)類型的數(shù)值或指針C、函數(shù)返回值可以是一個指向函數(shù)的指針D、函數(shù)返回值可以是一個數(shù)組,同時返回多個值標準答案:C知識點解析:函數(shù)的返回值是通過return語句返回,返回值是一個表達式,不限于基本數(shù)據(jù)類型或指針,也可以是結(jié)構(gòu)體類型等,但不能是數(shù)組,選項A、B、D錯誤;函數(shù)的返回值可以是一個指向函數(shù)的指針,選項C正確;本題答案為C。16、以下程序擬調(diào)用getmax函數(shù),找出四個變量中最大的一個,但程序不完整:#include<stdio.h>intgetmax(intx,inty){returnx>yx:y;}voidmain(){inta,b,C,d,mx;scanf("%d%d%d%d",&a,&b,&c,&d);printf("max=%d\n",________________);}以下選項若填入下劃線處,不能實現(xiàn)上述功能的是()。A、getmax(getmax(getmax(a,b),c),d)B、getmax(getmax(a,b),getmax(c,d))C、getmax(a,getmax(b,getmax(c,d)))D、mx=(getmax(a,b),getmax(c,d))標準答案:D知識點解析:getmax()函數(shù)接收兩個整型變量x、y,使用條件運算符返回x和y中的較大值;main()函數(shù)首先輸入a、b、c、d四個整數(shù)值,然后通過調(diào)用getmax()函數(shù),輸出它們的最大值;假設(shè)x、y是整數(shù),選項A中,首先執(zhí)行g(shù)etmax(a,b),返回a和b中的較大值x,再執(zhí)行g(shù)etmax(x,c),返回x、c中的較大值y,最后,執(zhí)行g(shù)etmax(y,d)返回y、d中的較大值,滿足題意,正確;選項B中,首先執(zhí)行g(shù)etmax(a,b),返回a、b的較大值x,再執(zhí)行g(shù)etmax(c,d),返回c、d中的較大值y,最后執(zhí)行g(shù)etmax(x,y),返回x、y中的較大值,正確;選項C中,首先執(zhí)行g(shù)etmax(c,d),返回c、d的較大值x,在執(zhí)行g(shù)etmax(b,x),返回b、x中的較大值y,最后執(zhí)行g(shù)etmax(a,y),返回a、y中的較大值,正確;選項D中,首先執(zhí)行g(shù)etmax(a,b),返回a、b的較大值x,再執(zhí)行g(shù)etmax(c,d),返回c、d中的較大值y,最后執(zhí)行逗號表達式(x,y),返回值為y,不滿足題意,所以本題答案為D。17、設(shè)已有定義floatx;,則下列對指針變量p進行定義且賦初值的語句中正確的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;標準答案:B知識點解析:指針是用來存放地址的變量,用(類型名*指針變量名)的形式定義。賦值時應將某個變量地址即&x賦給指針變量,所以選擇B。18、下列程序段中完全正確的是()。A、int*p;scanf("%d",&p);B、int*p;scanf("%d",p);C、intk,*p=&k;scanf("%d",p);D、intk,*p;*p=&k;scanf("%d",p);標準答案:C知識點解析:A選項中錯在沒有對指針進行初始化,無效指針,并且在scanf("%d",&p)中無須再進行取地址操作;B選項中沒有對指針進行初始化,無效指針;D選項中語句*p=&k;的左端*p是指針所指內(nèi)存空間的值,&k是地址,應為p=&k。C選項正確。19、有以下程序:#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}main(){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]);printf("\n");}程序的運行結(jié)果是()。A、﹣3,﹣1,1,3,B、﹣12,﹣3,0,0,C、0,1,2,3,D、﹣3,﹣3,﹣3,﹣3,標準答案:A知識點解析:本題由fun函數(shù)可知,b[0]=a[0][0]-a[0][3]=1-4=﹣3,b[1]=a[1][1]-[1][2]=6-7=﹣1,b[2]=a[2][2]-[2][1]=11-10=1,b[3]=a[3][3]-[3][1]=16-13=3,所以主函數(shù)中打印y數(shù)組元素的值為A選項。20、有以下程序(注:字符a的ASCII碼值為97):#include<stdio.h>main(){char*s={"abe"};do{printf("%d",*s%10);++s:}while(*s);}程序的運行結(jié)果是()。A、789B、abeC、7890D、979899標準答案:A知識點解析:因為小寫字符a、b、c的AscII碼值分別為97、98、99,而在dowhile循環(huán)語句中,每次對字符的ASCII碼值取余數(shù)并輸出,所以分別輸出7、8、9。21、設(shè)有定義語甸“int(*f)(int);”則下列敘述中正確的是()。A、f是基類型為int的指針變量B、f是指向函數(shù)的指針變量,該函數(shù)具有一個int類型的形參C、f是指向int類型一維數(shù)組的指針變量D、f是函數(shù)名,該函數(shù)的返回值是基類型為int類型的地址標準答案:B知識點解析:int(*f)(int);為指向函數(shù)的指針變量的定義方法,其中f為指向函數(shù)的指針變量,第一個int為函數(shù)返回值類型,第二個int為函數(shù)的形參類型,因此B選項正確。22、設(shè)有定義:intx[10],*P=x,i;,若要為數(shù)組x讀入數(shù)據(jù),以下選項正確的是()。A、for(i=0;i<10;i++)scanf("%d",p+i);B、for(i=0;i<10;i++)scanf("%d",*p+i);C、for(i=0;i<10;i++)scanf("%d",*(p+i));D、for(i=0;i<10;i++)scanf("%d",x[i]);標準答案:A知識點解析:C語言聲明scanf("<格式化字符串>",<地址表>);可知scanf()的第二個參數(shù)是地址,因此,從四個答案中可以判斷,只有選項A是p[i]的地址,其他的均是變量本身。故答案為A選項。23、有以下程序#include<stdio.h>main(){inta[3][3]={{1,3,5,},{7,9,11,},{13,15,17}};int(*p)[3]=a,i,j,n=0;for(i=0;i<3;i++)for(j=0;j<2;j++)n+=*(*(p+i)+j);printf("%d\n",n);}程序運行后的輸出結(jié)果是()。A、54B、60C、36D、48標準答案:D知識點解析:for循環(huán)的作用是求數(shù)組各行前二列的數(shù)字之和。已知*(*(p+i)+j)=p[i][j],數(shù)字和為:1+3+7+9+13+15=48,因此答案為D選項。24、有以下程序#include<stdio.h>voidswap(int*a,int*b){intt,*tp;t=*a;*a=*b;*b=t;tp=a;a=b;b=tp;printf("%d,%d,",*a,*b);}main(){inti=3,j=7,*p=&i,*q=&j;swap(p,q);printf("%d,%d,%d,%d",i,j,*P,*q);}程序執(zhí)行后的輸出結(jié)果是()。A、3,7,3,7,3,7B、7,3,7,3,7,3C、3,7,3,7,7,3D、3,7,7,3,7,3標準答案:D知識點解析:main()函數(shù)中,首先定義兩個整型變量i和j,初值為3和7,并將i的地址賦給p,j的地址賦給q,傳給swap()函數(shù)。swap()函數(shù)接收兩個整型指針變量a,b,然后使用整型變量t交換a、b所指向的值并輸出。通過指針變量的交換改變了實參i、j的值,使得i=7,j=3;指針變量cp交換a和b的值,由于a、b的值是p,q值的拷貝,所以這次交換只改變了形參a,b的值,對實參p,q的值沒有改變,此時指針變量a指向i,指針變量b指向i。函數(shù)最后輸出*a和*b,所以輸出3,7;由于swap()函數(shù)改變了p和q指向的值,昕以main()函數(shù)輸出i的值為7,j的值為3,術(shù)p的值為i,*q的值為j,所以程序輸出:3,7,7,3,7,3,本題答案為D。25、設(shè)有函數(shù)說明語句:intfun(int,int);以及函數(shù)指針定義語句:int(*f)(int,int);若要使函數(shù)指針指向函數(shù)fun的入口地址,以下選項中正確的是()。A、f=fun();B、*f=fun;C、f=fun;D、*f=fun();標準答案:C知識點解析:C語言中,函數(shù)名也是一個指針,是函數(shù)的入口地址。使函數(shù)指針f指向函數(shù)fun的人口地址,直接將函數(shù)名fun賦給指針f即可,本題答案為C。26、有以下程序#include<stdio.h>main(){inta[3][3]3={0,1,2,3,4,5,6,7,8},(*p)[3],i;p=a;for(i=0;i<3;i++){printf("%d",(*p)[i]);p++;}}程序的運行結(jié)果是()。A、036B、012C、048D、147標準答案:C知識點解析:題意定義3行3列的整型二維數(shù)組a;定義數(shù)組指針p,p指向包含三個元素的數(shù)組。程序首先將a賦給p。for循環(huán)中,i=0時,p指向a的第一個元素{0,1,2},輸出p[0]即0;i=1時,p指向a的第二個元素{3,4,5},輸出p[1]即4;i=2時,p指向a的第三個元素{6,7,8},輸出p[2]即8,所以程序輸出048,本題答案為C。27、有以下程序#include<stdio.h>voidfun(char*a,charB){while(*(a++)!=’\0’);while(*(a-1)<B)*(a--)=*(a-1);*(a--)=b;}main(){chars[8]="pmfc",c;e=getchar();fun(s,c);puts(s);}程序運行時輸入:k<回車>,則輸出結(jié)果為()。A、pmfkcB、pmfckC、kpmfcD、pmkfc標準答案:D知識點解析:main()函數(shù)定義一個字符數(shù)組s,使用字符串“pmfc”初始化,然后通過getchar()讀取一個字符k到字符變量c。再將字符串s和字符c傳入fun()函數(shù),函數(shù)fun()首先通過while()循環(huán)遍歷字符s,直到指針a指向字符串結(jié)束符‘\0’后的一個字符,如下圖所示:接著通過while()循環(huán)逆序遍歷字符串s,首先a-1的字符位‘\0’,它的ASCII碼為0小于b(字符‘k’)的ASCII碼107,那么將‘\0’賦給下標為5的位置,接著繼續(xù)向前遍歷,同理,將‘c’(ASCII碼99)賦給下標為4的位置,將‘f’(ASCII碼102)賦給下標為3的位置,由于‘m’(ASCII碼109)大于b,所以循環(huán)結(jié)束,將b(字符‘k’)賦給下標為2的位置,此時str字符串如下:所以本題答案為D。28、使用數(shù)組名作為函數(shù)的實參時,傳遞給形參的是()。A、數(shù)組第一個元素的值B、數(shù)組的首地址C、數(shù)組中全部元素的值D、數(shù)組元素的個數(shù)標準答案:B知識點解析:用數(shù)組名作為函數(shù)參數(shù)時,數(shù)組名退化為指針,傳遞給形參的是數(shù)組的首地址;本題答案為B。29、有以下程序#include<stdio.h>main(){char*s="01234";while(*(++s)!=’\0’){switch(*s-’0’){case0:case1:putchar(*s+1);break;case2:putchar(*s+1);break;case3:putchar(*s+1)l;default:putchar(*s+1);break;}}}程序執(zhí)行后的輸出結(jié)果是()。A、22345B、2345C、12345D、23445標準答案:D知識點解析:程序首先定義一個字符指針s,指向一個常量字符串“01234”;接著while循環(huán)的循環(huán)條件每次將s指向下一個字符,然后判斷s指向的字符是否為空字符‘\0’,若不是,則執(zhí)行循環(huán)體,將當前字符與‘0’的ASCII碼差值作為switch語句的常量表達式,執(zhí)行對應的casc語句;指針s指向空字符‘\0’時則終止循環(huán),程序結(jié)束。從常量字符串“01234”可知,循環(huán)過程中s指向的各個字符分別是:‘1’、‘2’、‘3’、‘4’。當*s是‘1’時,*s-‘0’的值為1,執(zhí)行case1語句,輸出*s+l即字符‘2’;當*s是‘2’時,*s-‘0’的值為2,執(zhí)行case2語句,輸出:*s+l即字符‘3’;當*s是‘3’時,*s-‘0’的值為3,執(zhí)行case3和default語句,兩次輸出*s+1即字符‘4’;當*s是‘4’時,*s-‘0’的值為4,執(zhí)行default語句,輸出*s+l即字符‘5’;綜上程序輸出結(jié)果為:23445,本題答案為D。國家二級C語言(數(shù)組、函數(shù)、指針)機試模擬試卷第2套一、選擇題(本題共30題,每題1.0分,共30分。)1、若有定義:intx[10],*pt=x;,則對x數(shù)組元素的正確引用是()。A、pt+3,B、*&x[10]C、*(pt+10)D、*(x+3)標準答案:D知識點解析:沒有A選項的引用形式。*與&放在一起作用抵消,但x[10]下標10超出了,數(shù)組下標范圍,所以B選項錯誤。最大只能引用到x[9],而*(pt+i)表示引用指針pt所指元素后的第i個元素,所以C選項錯誤,最大只能為*(pt+9)。D選項正確。2、下列選項中能正確定義數(shù)組的語句是()。A、intnum[0...2008];B、intnum[];C、intN=2008;intnum[N];D、#defineN2008intnum[N];標準答案:D知識點解析:C語言不允許定義動態(tài)數(shù)組,定義數(shù)組的大小必須為常量表達式。A選項錯誤,C語言中的數(shù)組沒有此類型的定義方法;B選項錯誤,定義數(shù)組應指明數(shù)組大小,如果不指明數(shù)組大小,需要給定初值的個數(shù);C選項錯誤,N為變量,不能用來定義數(shù)組大小。D選項正確。3、下列定義語句中錯誤的是()。A、intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};B、intx[4][]:{{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C、intx[][3]={{0},{1},{1,2,3}};D、intx[][3]={1,2,3,4};標準答案:B知識點解析:二維數(shù)組定義的一般形式是:類型說明符數(shù)組名[常量表達式1][常量表達式2]。其中常量表達式1表示第一維下標的長度,常量表達式2表示第二維下標的長度。如對二維數(shù)組的全部元素賦初值,則第一維的長度可以不給出。但如果對x[4][]賦值,只確定行數(shù),而不確定列數(shù),就無法正確賦值,因此B選項正確。4、有以下程序(strcat函數(shù)用于連接兩個字符串):#include<stdio.h>#include<string.h>main(){chara[20]="ABCD\0EFG\0",b[]="UK";strcat(a,b);printf("%s\n",a);}程序的運行結(jié)果是()。A、UKB、ABCDE\0FG\0IJKC、ABCDIJKD、EFGIJK標準答案:C知識點解析:字符數(shù)組a中包含兩個’\0’,遇到第一個’\0時’就表示字符串a(chǎn)結(jié)束。字符串處理函數(shù)strcat(字符數(shù)組a,字符數(shù)組b),功能是連接兩個字符數(shù)組中的字符串,把字符串b連接到字符串a(chǎn)的后面,結(jié)果放在字符數(shù)組a中。連接時將字符串a(chǎn)后的’\0’取消,只在新串最后保留一個’\0’。本題相當于將"ABCD"和"IJK"連接,因此C選項正確。5、有以下程序:#include<stdio.h>main(){chars[]="abede";s+=2;printf("%d\n",s[0]);}程序的運行結(jié)果是()。A、輸出字符c的ASCII碼B、程序出錯C、輸出字符cD、輸出字符a的ASCII碼標準答案:B知識點解析:本題重點考查數(shù)組名的概念。在C語言中,數(shù)組名類似于一個指向數(shù)組首地址的指針常量,一旦定義就不能修改其內(nèi)容。所以本題中的“s+=2”;語句讓數(shù)組名s的內(nèi)容加2是錯誤的,編譯無法通過,因此B選項正確。6、若要求從鍵盤讀入含有空格字符的字符串,應使用函數(shù)()。A、getchar()B、getc()C、gets()D、scanf()標準答案:C知識點解析:scanf()語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數(shù)不能輸入空格;getchar()函數(shù)用于輸入字符,其調(diào)用格式為:ch=getchar(),getchar()函數(shù)從終端讀入一個字符作為函數(shù)值,把讀入的字符賦給變量ch。在輸入時,空格、回車符都將作為字符讀入,而且只有在用戶敲人回車鍵時,讀入才開始執(zhí)行。gets()函數(shù)的調(diào)用形式為:gets(str_adr),其中str_adr是存放輸入字符串的起始地址,可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。gets函數(shù)用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc()函數(shù)的調(diào)用形式為:ch=getc(pf),其中pf是文件指針,函數(shù)的功能是從pf指定的文件中讀入一個字符,并把它作為函數(shù)值返回。因此C選項正確。7、有以下程序#include<stdio.h>main(){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);}程序運行后的輸出結(jié)果是()。A、7B、0C、3D、8標準答案:C知識點解析:題意是統(tǒng)計字符s中阿拉伯數(shù)字的個數(shù)。chars[]=“012xy\08s34f4w2”;元素是字符型。字符’0’的ASCII碼值是48;字符’\0’的ASCII碼值是0;因此可以計算出’\0’之前阿拉伯數(shù)字的個數(shù),由字符串s可知,有3個阿拉伯數(shù)字。故本題答案為C選項。8、若有定義:charc="hello!";,則以下說法正確的是()。A、c占用7字節(jié)內(nèi)存B、c是一個字符串變量C、定義中有語法錯誤D、c的有效字符個數(shù)是6標準答案:C知識點解析:c是字符變量,“hello!”是字符串,字符串不能賦給字符變量,定義中有語法錯誤,本題答案為C。9、若有代數(shù)式(其中e僅代表自然對數(shù)的底數(shù),不是變量),則以下能夠正確表示該代數(shù)式的C語言表達式是()。A、sqrt(fabs(pow(n,x)+exp(x)))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(abs(nx+ex))D、sqrt(fabs(pow(x,n)+exp(x)))標準答案:A知識點解析:B選項中函數(shù)pow(x,e)錯誤,應該直接使用exp(x)函數(shù)。C選項中函數(shù)abs(n^x+e^x)錯誤,應該使用fabs()返回浮點數(shù)的絕對值。D選項中pow(x,n)參數(shù)順序錯誤。10、下列關(guān)于return語句的敘述中正確的是()。A、一個自定義函數(shù)中必須有一條return語句B、一個自定義函數(shù)中可以根據(jù)不同情況設(shè)置多條return語句C、定義成void類型的函數(shù)中可以有帶返回值的return語句D、沒有return語句的自定義函數(shù)在執(zhí)行結(jié)束時不能返回到調(diào)用處標準答案:B知識點解析:在函數(shù)中允許有多個return語句,但每次調(diào)用只能有一個return語句被執(zhí)行,因此只能返回一個函數(shù)值,A選項描述錯誤。定義成void類型的函數(shù),不允許從該函數(shù)取得返回值,也不允許使用return語句,C選項描述錯誤。沒有return語句的函數(shù)在執(zhí)行到函數(shù)的最后一條語句后會自動返回到調(diào)用處,D選項描述錯誤。因此B選項正確。11、有以下程序:#include<stdio.h>doublef(doublex);main(){doublea=0;inti;for(i=0;i<30;i+=10)a+=f((double)i);printf("%3.0f\n",a);}doublef(doublex){returnx*x+1:}程序的運行結(jié)果是()。A、500B、401C、503D、1404標準答案:C知識點解析:本題重點考查函數(shù)的定義和調(diào)用。第一次循環(huán),a=0,i=0,返回值a=0*0+1=1;第二次循環(huán),a=1,i=10,返回值a=10*10+1+1=102;第三次循環(huán),a=102,i=20,返回值a=20*20+1+102=503;第四次循環(huán),a=503,i=30,符合i<30,跳出循環(huán),最后結(jié)果輸出a=503。12、有以下程序:#include<stdio.h>intfun(intX,inty){if(x!=y)return((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序的運行結(jié)果是()。A、6B、3C、8D、12標準答案:A知識點解析:本題中第一次調(diào)用為fun(8,fun(5,6)),因為fun(5,6)的返回值為5,所以第二次調(diào)用為fun(8,5)=6,所以選擇A選項。13、有以下程序:#include<stdio.h>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]);}程序的運行結(jié)果是()。A、1,2,3,4,5,6,7,8,9,10,B、1,2,6,8,10,12,7,8,9,10,C、1,2,3,4,10,12,14,16,9,10,D、1,2,6,8,10,12,14,16,9,10,標準答案:B知識點解析:數(shù)組名是常量,表示的是數(shù)組首元素的地址。當執(zhí)行f(a)的時候,由于傳遞的是首地址,相當于直接對數(shù)組a進行操作,所以從數(shù)組a的第3個元素a[2]到元素a[5],每個元素值擴大兩倍,因此B選項正確。14、有以下程序:#include<stdio.h>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);}程序的運行結(jié)果是()。A、55B、50C、45D、60標準答案:D知識點解析:內(nèi)部靜態(tài)變量是始終存在的,當函數(shù)被調(diào)用退出后,內(nèi)部靜態(tài)變量會保存數(shù)據(jù),再次調(diào)用該函數(shù)時,以前調(diào)用時的數(shù)值仍然保留著。fun(a,5)的值是15,再次調(diào)用后sum=15,所以fun(b,4)=45,s=45+15=60,因此D選項正確。15、有以下程序#include<stdio.h>intfun(intx,inty){if(x!=Y)retum((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序運行后的輸出結(jié)果是()。A、3B、6C、8D、12標準答案:B知識點解析:fun函數(shù)的功能是獲取二個數(shù)的平均數(shù),注意平均數(shù)是整型數(shù),小數(shù)會被截斷。fun(2*4.fun(5,6))就是fun(8,5)平均值是6。因此答案為B選項。16、有如下程序#include<stdio.h>intadd_more(inta,intb){returna+b-2;}main(){inti;for(i=0;i<4;i++)printf("%d",add_more(i,2));程序運行后的輸出結(jié)果是()。A、1234B、0123C、5678D、4321標準答案:B知識點解析:add_more()函數(shù)接收兩個參數(shù)a、b,返回a+b-2。Iliain()函數(shù)中,for循環(huán)傳入實參i和2,所以每次調(diào)用add_more時,b的值都是2,所以add_more返回值等價于實參i,所以每次for循環(huán)輸出的值就是i的值,本題答案為B。17、以下敘述中錯誤的是()。A、在同一源程序文件中,函數(shù)名必須唯一B、凡是帶有返回值的庫函數(shù),都不能通過加分號而作為獨立的語句出現(xiàn)C、不同函數(shù)中的形式參數(shù)可以同名D、返回基本數(shù)據(jù)類型的庫函數(shù)的調(diào)用,均可以出現(xiàn)在賦值號右邊的表達式中標準答案:B知識點解析:在同一源文件中,函數(shù)名必須唯一,選項A正確;函數(shù)的調(diào)用有兩種形式:(1)出現(xiàn)在表達式中,有可以出現(xiàn)在賦值號右邊的表達式中;(2)作為獨立的語句完成某種操作;選項B錯誤,選項D正確;不同函數(shù)的形參可以同名,它們的作用域都限制在各自的函數(shù)體內(nèi),選項D正確;所以本題答案為B。18、若有定義語句doublea,*P=&a;,下列敘述中錯誤的是()。A、定義語句中的*號是一個間址運算符B、定義語句中的*號是一個說明符C、定義語句中的p只能存放double類型變量的地址D、定義語句中,*p=&a把變量a的地址作為初值賦給指針變量p標準答案:A知識點解析:在變量定義doublea,*p=&a;中,*號是一個指針運算符,而非間址運算符,所以A錯誤。19、若有定義語句inta[2][3],*p[3];,則以下語句中正確的是()。A、p=a;B、p[0]=a;C、p[0]=&a[1][2];D、p[1]=&a;標準答案:C知識點解析:A選項錯誤,因為p是指向一個指針數(shù)組,作為數(shù)組名,不能指向別的地方。B選項錯誤,因為p[0]是一個int指針,也就是int*;而a是一個指向指針的指針int**。C選項正確,因為p[0]是一個int*,a[1][2]是int,&a[1][2]是int*,類型吻合。D選項錯誤,因為a作為數(shù)組名,不能取地址,即使能取,p[1]是int*,&a是int***,類型不對。20、有以下程序:#include<stdio.h>#include<string.h>main(){charstr[][20]={"One*World","One*Dream!"},*P=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序的運行結(jié)果是()。A、10,One*Dream!B、9,One*Dream!C、9,One*WorldD、10,One*World標準答案:A知識點解析:p是指向二維字符數(shù)組第二行One*Dream!的數(shù)組指針,所以長度是10,打印輸出的也是該字符串。21、設(shè)有定義“char*c;”,以下選項中能夠使c正確指向一個字符串的是()。A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";標準答案:A知識點解析:選項A為正確用法,先將字符串存于字符數(shù)組中,然后將數(shù)組名賦給字符指針(數(shù)組名代表數(shù)組首地址,定義數(shù)組時為其分配確定的地址)。C選項錯誤,getchar()函數(shù)輸入一個字符給字符型變量,而不是字符指針。B選項和D選項有類似的錯誤,兩個選項并無語法錯誤,但運行時可能會出現(xiàn)問題。因為在B選項和D選項中,字符指針沒有被賦值,是個不確定的值,指向一個不確定的內(nèi)存區(qū)域,這個區(qū)域可能存放有用的指令或數(shù)據(jù)。在這個不確定的區(qū)域重新存放字符串,可能會發(fā)生無法預知的錯誤。22、下列語句中存在語法錯誤的是()。A、charss[6][20];ss[1]="right?";B、charss[][20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss={"right?"};標準答案:A知識點解析:數(shù)組定義后,不可以對數(shù)組整體賦值,s是二維數(shù)組,因ss[1]是一維字符數(shù)組,即字符串,字符串賦值可以使用“strcpy(ss[1],"right");”這樣的形式,而A選項中對二維數(shù)組中的第“1”維(相當于一個一維數(shù)組)賦值是不可以的。B選項和D選項是定義時對數(shù)組初始化,這是可以的。在C選項中,將字符串在內(nèi)存中的首地址賦給指針數(shù)組的一個元素,這是可以的。23、有以下程序段charstr[4][12]={"aaa","bbb","ccc","ddd"},*p[4];inti:for(i=0;i<4;i++)p[i]=str[i];以下選項中不能正確引用字符串的是()。A、*p[3]B、p[3]C、str[2]D、*p標準答案:A知識點解析:*p[3]是一個字符str[3][0],不是字符串,選項A錯誤。p[3]和str[2]和*p分別代表了ddd,ccc,aaa。答案為A選項。24、有以下程序#include<stdio.h>intshow(char*str){while(*str){putchar(*str+1);str++:}return*str+1;}main(){printf({"%d\n",show("ABCD"));}程序運行后的輸出結(jié)果是()。A、ABCD0B、BCDE0C、BCDE1D、ABCD1標準答案:C知識點解析:putchar()每次輸出一個字符。表達式*str+1將對于字符加1,因此字符串“ABCD”的每個字符都加1,字符串結(jié)束標志’\0’也會加1,輸出1,答案位BCDE1。故答案為C選項。25、若有定義,inta=3,*p=&a,**q=&p;,則以下敘述中錯誤的是()。A、q是指針變量,*q就是變量aB、p是指針變量,p指向變量aC、q指向變量p,所以*q指向變量aD、*p與**q都代表變量a標準答案:A知識點解析:由題意可知:指針變量p指向變量a,p的值是a的地址;指針變量q指向變量p,q的值是p的地址,所以q是指針變量,q指向p,*q是變量p,選項A錯誤;p也是指針變量,p指向a,選項B正確;由于q指向p,所以*q指向a,選項C正確;*p和**q都是代表變量a,選項D正確,本題答案為A。26、有如下程序#include<stdio.h>intchange(int*data){*data=*data%2;return(*datA)+1;}main(){intdata=12;change(&data);printf("%d,",data);data=change(&data);printf("%d,",data);}程序運行后的輸出結(jié)果是()。A、0,0,B、1,2,C、12,13,D、0,1,標準答案:D知識點解析:change()函數(shù)接收一個整型指針data,然后將data指向的數(shù)對2求余,求余后的值重新賦給data指向的變量,然后將data.指向的變量值加1后返回。注意,此處data指向的數(shù)值對2求余會改變實參指針指向的值,但返回值并不影響data指向的值。程序第一次調(diào)用change()函數(shù),傳入實參data的地址,將data的值修改為0(12%2=0),此時輸出data的值是0;再次調(diào)用change()傳入data的地址,將data的值修改為0(0%2=0),然后將返回值1重新賦給主函數(shù)變量data,所以此時輸出data的值是1。綜上,程序輸出0,1,本題答案為D。27、有以下程序#include<stdio.h>voidsub(doublea,double*pb);intmain(){doublex,y;scanf("%lf%lf",&x,&y);sub(x,&y);printf("x=%fy=%f\n",x,y);}voidsub(doublea,double*pb){a=a-*pb;*pb=*pb-a;}程序運行時輸入:10.23.5<回車>,則輸出結(jié)果為()。A、x=10.200000y=﹣3.200000B、x=6.700000y=﹣13.700000C、x=7.000000y=﹣3.500000D、x=13.400000y=﹣7.000000標準答案:A知識點解析:sub()函數(shù)接收兩個參數(shù):double類型變量a,double指針變量pb。首先將a與pb指向的變量值相減,結(jié)果存放a中,然后再將pb指向的變量值與a的新值相減,結(jié)果存放pb指向的內(nèi)存空間。sub函數(shù)不會修改實參x的值,但會修改實參y的值。當輸入10.23.5時,實參x的值為10.2,y的值為3.5,執(zhí)行sub()函數(shù)后,x的值不變,y的值變成﹣3.2,本題答案為A。28、以下敘述中錯誤的是()。A、通過指針變量存取某個變量值的方式稱為“直接存取”方式B、在程序的開頭包含頭文件stdio.h后,可以給指針變量賦NULL值C、將一個指針變量中的值賦給另一個指針變量,則這兩個指針指向同一地址D、C語言中函數(shù)返回值的類型可以是簡單的數(shù)據(jù)類型,也可以是指針類型標準答案:A知識點解析:通過指針變量存取某個變量值的方式稱為“間接存取”方式,選項A錯誤;頭文件stdio.h中定義NULL,在程序的開頭包含stdio.h后,町以給指針變量賦NULL值,表示一個空指針,選項B正確;將一個指針變量中的值賦給另一個指針變量,這兩個指針指向同一地址,選項C正確;C語言中函數(shù)返回值的類型可以是簡單的數(shù)據(jù)類型,也可以是指針類型,選項D正確;本題答案為A。29、有以下程序#include<stdio.h>#include<string.h>main(){charstr[][10]={"One","Three","Five"},*p=str[0];printf("%s,",p+10);printf("%d\n",strlen(p+=10));}執(zhí)行后的輸出結(jié)果是()。A、Three,4B、出錯C、Three,5D、Five,5標準答案:C知識點解析:題意定義一個二維字符數(shù)組str,它包含3個字符串,每個字符串存放在一個長度為10的一維數(shù)組中。指針變量p指向strp[0],即第一個字符串“One”,由于“One”存放在長度為10的一維數(shù)組,所以p+10指向下一個字符串“three”,長度為5,所以本題答案為c。30、有以下程序#include<stdio.h>voidmain(){char*s="\ta\018bc";for(;*s!=’\0’;s++)printf("*");printf(”\n”);}程序運行后的輸出結(jié)果是()。A、******B、*********C、*****D、*******標準答案:A知識點解析:main()函數(shù)定義一個字符指針s,指向字符串“\ta\018bc”。for循環(huán)遍歷s指向的字符串中的字符,然后輸出“*”。根據(jù)題意可以理解為:s指向的字符串中有多少個字符,就輸出多少個“*”;s指向的字符串中字符分別是:‘\t’(轉(zhuǎn)義字符)、‘a(chǎn)’、‘\01’(轉(zhuǎn)義字符)、‘8’、‘b’、‘c’,總共6個。其中因為8不屬于八進制中的數(shù)字,所以‘\018’不是一個轉(zhuǎn)義字符,而‘\01’是轉(zhuǎn)義字符,本題答案為A。國家二級C語言(數(shù)組、函數(shù)、指針)機試模擬試卷第3套一、選擇題(本題共30題,每題1.0分,共30分。)1、有以下程序:#include<stdio.h>main(){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]);printf("\n");}程序的運行結(jié)果是()。A、2344B、4332C、1234D、1123標準答案:B知識點解析:在for(i=0;i<12;i++)c[s[i]]++中,數(shù)組元素s[i]的值作為數(shù)組c的下標,當退出循環(huán)時,數(shù)組c的4個元素的值分別為4、3、3、2,因此B選項正確。2、設(shè)有定義:doublea[10],*s=a;,以下能夠代表數(shù)組元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3標準答案:B知識點解析:題中,首先定義了double型的數(shù)組a,并將數(shù)組首地址賦給指針s。s[3]能夠表示a[3],故選項A、C不能表示a[3];選項D的*s+3=a[0]+3。故本題答案為B選項。3、下列定義數(shù)組的語句中錯誤的是()。A、intnum[][3]={{1,2},3,4,5,6};B、intnum[2][4]={{1,2},{3,4},{5,6}};C、intnum[]={1,2,3,4,5,6};D、intnum[][4]:{1,2,3,4,5,6};標準答案:B知識點解析:B選項中定義的數(shù)組為2行4列,而賦值時賦成了3行,所以出錯。4、有以下程序:#include<stdio.h>main(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’&&s[i]<=’z’)n++;printf("%d\n",n);}程序的運行結(jié)果是()。A、0B、2C、3D、5標準答案:B知識點解析:程序首先給字符數(shù)組s[]賦值為"012xy",for循環(huán)語句的功能是遍歷字符串,通過if條件語句對字符串中的小寫字母進行計數(shù),字符串中小寫字母為2個,即n=2,因此B選項正確。5、設(shè)有定義: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知識點解析:根據(jù)題目中的定義可知道sizeof(p),計算的是數(shù)組p中所有元素所占用的字節(jié)數(shù),而不是char型數(shù)據(jù)所占的字節(jié)數(shù)。6、有以下程序#include<stdio.h>#include<string.h>main(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序運行后的輸出結(jié)果是()。A、10,One*Dream!B、9,One*Dream!C、9,One*WorldD、10,One*World標準答案:A知識點解析:unsignedintstrlen(char*s);計算字符串s的(unsignedint型)長度,不包括’\0’在內(nèi);p指向數(shù)組的第二個元素,因此strlen(p)=10,并打印,故答案為A選項。7、設(shè)有以下程序段main(){intx[M][N];…Arrlet(x);…}則作為函數(shù)Arrlet的形參,以下表示形式非法的是()。A、intx[M][]B、int(*x)[N]C、intx[][N]D、intx[M][N]標準答案:A知識點解析:C語言規(guī)定,二維數(shù)組作為實參參數(shù)傳遞時,形參必須要指明二維數(shù)組的列數(shù),否則函數(shù)內(nèi)無法識別數(shù)組的寬度,行數(shù)提供沒有任何作用。(*p)[N]與p[][N]以及p[M][N]效果一樣。排除法選擇A選項。故本題答案為A選項。8、以下涉及字符串數(shù)組、字符指針的程序段中,沒有編譯錯誤的是()。A、char*str,name[1];str="Hello";B、char*str,name[1];name="Hello";C、charstrl[10]="exl.c",str2[6];str2=strl;D、charhead_line[];head_line="\\0";標準答案:A知識點解析:C語言中,字符指針變量可以直接使用字符串賦值,而字符數(shù)組不能直接使用字符串或字符數(shù)組賦值,選項B、C、D錯誤,選項A正確,本題答案為A。9、若函數(shù)調(diào)用時的實參為變量,下列關(guān)于函數(shù)形參和實參的敘述中正確的是()。A、函數(shù)的形參和實參分別占用不同的存儲單元B、形參只是形式上的存在,不占用具體存儲單元C、同名的實參和形參占同一存儲單元D、函數(shù)的實參和其對應的形參共占同一存儲單元標準答案:A知識點解析:本題重點考查的是函數(shù)的形參和實參。在定義函數(shù)時,函數(shù)名后面括弧中的變量名稱為“形式參數(shù)”(簡稱形參),在主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面括弧中的參數(shù)(可以是一個表達式)稱為“實際參數(shù)”(簡稱實參)。C語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在內(nèi)存中,實參單元與形參單元是不同的單元,因此A選項正確。10、下列敘述中錯誤的是()。A、用戶定義的函數(shù)中可以沒有return語句B、用戶定義的函數(shù)中可以有多個return語句,以便可以調(diào)用一次返回多個函數(shù)值C、用戶定義的函數(shù)中若沒有retum語句,則應當定義函數(shù)為void類型D、函數(shù)的return語句中可以沒有表達式標準答案:B知識點解析:本題重點考查函數(shù)返回值的相關(guān)知識。函數(shù)的值只能通過return語句返回主調(diào)函數(shù),在函數(shù)中允許有多個return語句,但每次調(diào)用只能有一個return語句被執(zhí)行,因此只能返回一個函數(shù)值。不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說明符為void。因此選擇B選項。11、若有函數(shù)首部intfun(doublex[10],int*n),則下列針對此函數(shù)的函數(shù)聲明語句中正確的是()。A、intfun(double,int);B、intfun(double*,int*);C、intfun(double*x,intn);D、intfun(doubleX,int*n);標準答案:B知識點解析:函數(shù)聲明的一般形式為:類型說明符被調(diào)函數(shù)名(類型形參,類型形參……);或為類型說明符被調(diào)函數(shù)名(類型,類型……)。由于函數(shù)首部為intfun(doublex[10],int*n),因此B選項正確。12、設(shè)有如下函數(shù)定義:#include<stdio.h>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、3C、4D、5標準答案:B知識點解析:首先n=fun(3),3被當作參數(shù)傳遞進去,這就進行了一次調(diào)用,3被當作參數(shù)傳進去后,程序會執(zhí)行這句elsereturnfun(k-1)+1;這就調(diào)用了第二次,而參數(shù)是3-1也就是2。2被當作參數(shù)傳進去后,程序會執(zhí)行這句elsereturnfun(k-1)+1;這就調(diào)用了第三次,而參數(shù)是2-1也就是1。1被當作參數(shù)傳進去后,程序會執(zhí)行這句elseif(k==1)return1;不再遞歸調(diào)用,所以最終結(jié)果為3次。13、在C語言中,只有在使用時才占用內(nèi)存單元的變量,其存儲類型是()。A、auto和staticB、extern和registerC、auto和registerD、static和register標準答案:C知識點解析:auto:函數(shù)中的局部變量,動態(tài)地分配存儲空間,數(shù)據(jù)存儲在動態(tài)存儲區(qū)中,在調(diào)用該函數(shù)時,系統(tǒng)會給它們分配存儲空間,在函數(shù)調(diào)用結(jié)束后自動釋放這些存儲空間。register:為了提高效率,C語言允許將局部變量的值放在CPU的寄存器中,這種變量叫“寄存器變量”,只有局部自動變量和形參可以作為寄存器變量。extern:外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件終了。static:靜態(tài)局部變量,屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元,在程序整個運行期間都不釋放。14、有以下程序#include<stdio.h>intadd(inta,intb){return(a+b);}main(){intk,(*f)(),a=5,b=10;f=add;…}則以下函數(shù)調(diào)用語句錯誤的是()。A、k=f(a,b);B、k=add(a,b);C、k=(*f)(a,b);D、k=*f(a,b);標準答案:D知識點解析:運算符()的優(yōu)先級高于運算符*。(*f)()是在定義函數(shù)指針,f是指向函數(shù)的指針。f=add,將函數(shù)add()的首地址賦給指針f,所以調(diào)用函數(shù)add()可以寫為f(),其返回值是整型,不是指針類型,不能用*取指針指向的內(nèi)存單元的數(shù)據(jù),故k=*f(a,b)的調(diào)用方式錯誤。答案為D選項。15、若有如下形式的函數(shù)intfun(inta[],int*p,intn){……}調(diào)用函數(shù)之前需要對函數(shù)進行聲明,則以下選項中錯誤的是()。A、intfun(int,int,int);B、intfun(inta[],int*p,intn);C、intfun(inta[],int*,int);D、intfun(int[],int*,int);標準答案:A知識點解析:C語言中,函數(shù)聲明的函數(shù)名、返回值類型和參數(shù)列表必須與函數(shù)定義相同,其中參數(shù)列表中可以省略參數(shù)名。題意中,fun()函數(shù)返回整型,三個參數(shù)分別是:整型指針、整型指針、整型。選項A中,第一個參數(shù)應該是整型指針類型,第二個參數(shù)也應該是指針類型,錯誤;其他選項都正確,本題答案為A。16、若有如下函數(shù)定義doublefun(intx,inty){return(x+y);}return語句中表達式值的類型與說明的類型不一致,則以下敘述中正確的是()。A、運行時出錯B、函數(shù)返回的值為int型C、編譯出錯D、函數(shù)返回的值為double型標準答案:D知識點解析:題意中x+y是整型,函數(shù)的返回值是double類型,由于整型可以自動轉(zhuǎn)換成double類型,所以函數(shù)的返回時整型自動轉(zhuǎn)換成double!類型,本題答案為D。17、有以下程序:#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:}程序的運行結(jié)果是()。A、2,3B、1,3C、1,4D、1,2標準答案:B知識點解析:在f(int*p,int*q)函數(shù)中,執(zhí)行p=p+1是將p所對應的地址加1,而*q=*q+1是將q所指向n的地址所對應的值加1,所以m的值所對應的值沒有變,而n的值則為3了,因此B選項正確。18、若有定義語句doublex,y,*px,*py;,執(zhí)行了px=&x;py=&y;之后,正確的輸入語句是()。A、scanf("%lf%le”,px,py);B、scanf("%f%f",&x,&y);C、scanf("%f%f",x,y);D、scanf("%lf%lf",x,y);標準答案:A知識點解析:因為x和y都是double型數(shù)據(jù),所以輸入時的格式字符應為%lf,所以B、C選項錯誤。D選項中的scanf("%lf%lf",x,y);應為scanf("%lf%lf¨,&x,&y);。19、下列函數(shù)的功能是()。voidfun(char*a,char*b){while((*b=*a)!=’\0’){a++;b++;}}A、將a所指字符串賦給b所指空間B、使指針b指向a所指字符串C、將a所指字符串和b所指字符串進行比較D、檢查a和b所指字符串中是否有’\0’標準答案:A知識點解析:while循環(huán)條件為:(*b=*a)!=’\0’,執(zhí)行時先把指針a所指向的字符賦給指針b所在的內(nèi)存單元,如果該字符不是結(jié)束標識“\0”,執(zhí)行循環(huán)體“a++;b++;”,指針a、b分別指向下一個字符單元。再判斷循環(huán)條件,如果成立,繼續(xù)把指針a所指向的字符賦給指針b所在的內(nèi)存單元,直到遇到結(jié)束標識為止,因此A選項正確。20、下列語句組中正確的是()。A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={“Olympic"};D、chars[7];s={"Olympic"};標準答案:A知識點解析:字符型指針變量可以用A選項的賦值方法:char*s;s="Olympic"。C選項的寫法:char*s,s={"Olympic"};是錯誤的。字符數(shù)組可以在定義的時候初始化:chars[]={’Olympic”};或者chars[]="Olympic",但是不可以在定義字符數(shù)組后對數(shù)組名賦值(數(shù)組名是常量,代表數(shù)組首地址),所以B選項和D選項都是錯誤的。對于本例,B、D選項中字符數(shù)組s的大小至少為8,才能存放下字符串(字符串的末尾都有結(jié)束標志’\0’),同時此時s為字符數(shù)組的地址,是常量,不能為其賦值。21、下列語句組中正確的是()。A、char*s;s={"BOOK!"};B、char*s;s="BOOK!";C、chats[10];s="BOOK!";D、chars[];s="BOOK!";標準答案:B知識點解析:A選項去掉大括號就正確了;C選項和D選項應在定義時賦初值。B選項正確。22、關(guān)于地址和指針,以下敘述正確的是()。A、可以通過強制類型轉(zhuǎn)換讓char型指針指向double型變量B、函數(shù)指針p指向一個同類型的函數(shù)f時,必須寫成:p=&f;C、指針p指向一個數(shù)組f時,必須寫成:p=&f;D、一個指針變量p可以指向自身標準答案:A知識點解析:函數(shù)名代表函數(shù)的人口地址,函數(shù)指針p指向一個同類型的函數(shù)f時,可以寫成:p=f,而不能寫成&f,選項B錯誤。指針p指向一個數(shù)組f時,可以寫成:p=f,數(shù)組名f代表數(shù)組的首地址,選項C錯誤。指針變量指向的是變量的地址,選項D錯誤。char型根據(jù)轉(zhuǎn)化原則可以轉(zhuǎn)化為double類型,因此答案為A選項。23、以下敘述正確的是()。A、charc1,*c2,*c3[10];是合法的變量定義語句B、數(shù)組說明符的一對方括號中不能使用表達式C、數(shù)組元素下標可以是非整數(shù)D、若有定義chararray[4];則語句printf("%c",array["3"]);是合法的標準答案:A知識點解析:C語言規(guī)定定義數(shù)組時,數(shù)組的長度必須是整型常量,數(shù)組說明符的一對方括號中表達式只要是常量即合法,因此選項B錯誤。C語言規(guī)定,數(shù)組元素下標必須是非負整數(shù),因此選項C錯誤。選項D中chararray[4]數(shù)組的長度為4,array["3"],其中"3"常量字符串,與C語言規(guī)定數(shù)組的下標必須是非負整數(shù)不符,故答案為A選項。24、以下敘述中正確的是()。A、無論指針變量p具有何種基類型,表達式p=p+1都代表指針p移動一個字節(jié)B、指針變量具有基類型,基類型不同的指針變量不能直接相互賦值C、指針變量的賦值操作:p=0;是非法的D、通過指針變量存取某個變量值的方式稱為“直接存取”方式標準答案:B知識點解析:指針自增或自減1,移動的字節(jié)數(shù)與指針變量指向的具體類型有關(guān),假設(shè)指針變量p指向的是int類型,那么p=p+1表示指針p移動4個字節(jié)(通常int類型占4個字節(jié)),選項A錯誤;將0賦給指針變量,表示指針變量的值為空,這是合法的,選項C錯誤;通過指針變量存儲指向的地址的值,稱為“間接存取”方式,選項D錯誤;指針變量具有基類型,基類型不同的指針
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色家居產(chǎn)業(yè)民營中小企業(yè)戰(zhàn)略合作合同4篇
- 二零二五年度賓館客房租賃合同租賃權(quán)轉(zhuǎn)讓合同2篇
- 個人電商店鋪轉(zhuǎn)讓合同2024年版3篇
- 2025程力危險品廂式車廠家定制化生產(chǎn)與物流配送合同4篇
- 二零二四年度智能制造委托擔保合同匯編3篇
- 二零二五版農(nóng)田灌溉工程生態(tài)補償合同3篇
- 2025年度個人兼職勞動合同范本:心理咨詢與治療服務3篇
- 二零二五年度城市綜合體經(jīng)營性招租項目合同4篇
- 二零二五年度排水溝工程地下空間綜合利用合同4篇
- 二零二四年度新型建筑材料采購供應合同2篇
- 二零二五隱名股東合作協(xié)議書及公司股權(quán)代持及回購協(xié)議
- 四川省成都市武侯區(qū)2023-2024學年九年級上學期期末考試化學試題
- 環(huán)境衛(wèi)生學及消毒滅菌效果監(jiān)測
- 2024年共青團入團積極分子考試題庫(含答案)
- 碎屑巖油藏注水水質(zhì)指標及分析方法
- 【S洲際酒店婚禮策劃方案設(shè)計6800字(論文)】
- 鐵路項目征地拆遷工作體會課件
- 醫(yī)院死亡報告年終分析報告
- 中國教育史(第四版)全套教學課件
- 2023年11月英語二級筆譯真題及答案(筆譯實務)
- 上海民辦楊浦實驗學校初一新生分班(摸底)語文考試模擬試卷(10套試卷帶答案解析)
評論
0/150
提交評論