C理论自测题及参考答案第3次.docx
- 文档编号:3544913
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:23.68KB
C理论自测题及参考答案第3次.docx
《C理论自测题及参考答案第3次.docx》由会员分享,可在线阅读,更多相关《C理论自测题及参考答案第3次.docx(20页珍藏版)》请在冰豆网上搜索。
C理论自测题及参考答案第3次
一、单选题
1.以下关于函数的叙述中,正确的是。
A.在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值
B.在函数体中至少必须有一个return语句
C.在函数体中可以定义另一个函数
D.在函数体中可以调用函数自身
2.以下关于变量的叙述中,不正确的是。
A.一个变量的作用域完全取决于该变量声明的位置
B.全局变量可以在函数以外的任何位置声明
C.动态局部变量的生存期仅限于本次函数调用,无法将局部变量的值保存到函数下一次调用
D.用static声明一个变量是为了限制其他编译单位引用该变量
3.以下选项是一个自定义函数的头部,其中正确的是。
A.intfun(inta,b)B.intfun(inta,inta)
C.intfun(inta[],intb)D.intfun(staticinta,intb)
4.关于函数返回值,以下叙述中正确的是。
A.函数返回值的类型由函数体内return语句包含的表达式类型决定
B.函数返回值的类型由函数头部定义的函数类型决定
C.若函数体中有多个return语句,则函数返回值是排列在最后的return语句中表达式的值
D.若函数体内没有return语句,则函数没有返回值
5.以下程序中main函数需要调用fun函数,所给选项中正确的调用语句是。
A.fun(1,2);B.fun((1,2));C.f();D.fun(fun
(1));
voidfun(intc)
{printf(“%d”,c);}
6.已知函数f定义如下:
voidf(void)
{printf(“That’sgreat!
”);}
则调用f函数的正确形式是。
A.f;B.f();C.f(void);D.f
(1);
7.已知有函数f的定义如下:
intf(inta,intb)
{if(a
在main函数中若调用函数f(2,3),得到的返回值是。
A.2B.3C.2和3D.3和2
8.在以下程序中,需要在fun函数中声明一个int型的变量,所给选项中不能用作该变量名的是。
A.xB.yC.aD.fun
#include
inty;
main()
{inta=1;
fun(a);
}
intfun(intx)
{/*int型变量声明位置*/
}
9.若有程序:
intx;
intf(inty)
{return标识符;}
#include
intw;
main()
{intz=2;f(z);}
则在函数f中,return语句后允许出现的标识符是。
A.x或wB.x或yC.z或wD.NULL
10.在main函数体内部和外部均允许出现的实体是。
A.预处理命令B.操作语句C.另一函数的定义D.函数形式参数声明
11.设有下列程序段:
staticcharb=2;
voidY()
{staticfloatd=4;.......}
inta=1;
voidX()
{intc=3;......}
关于程序段中各变量的属性,以下叙述中错误的是。
A.a是全局变量,函数X可以访问,函数Y不能访问
B.b是全局变量,函数X和函数Y都可以访问
C.c是动态局部变量,函数X可访问,函数Y不可访问
D.d是静态局部变量,函数X和函数Y都可以访问
12.对应main函数中的fun函数调用,以下给出的四个fun函数定义的首部中,错误的是。
main()
{inta,n;
fun(n,&a);
}
A.voidfun(intm,intx[])B.voidfun(ints,inth[41])
C.voidfun(intp,int*s)D.voidfun(intn,inta)
13.下列全局变量声明中,正确的是。
A.autointi=1;B.floata=1,b=0.5,c=a+b;
C.charfor=1;D.staticcharch;
14.若有数组A和B的声明“staticcharA[]="ABCDEF",B[]={'A','B','C','D','E','F'};”,则数组A和数组B的长度分别是。
A.7,6B.6,7C.6,6D.7,7
15.以下程序运行后的输出结果是。
A.22B.72C.75D.62
#include
main()
{chara[7]="a0\0a0\0";inti,j;
i=sizeof(a);j=strlen(a);
printf("%d%d",i,j);
}
16.假定已有声明“chara[30],*p=a;”,则下列语句中能将字符串"ThisisaCprogram."正确地保存到数组a中的语句是。
A.a[30]="ThisisaCprogram.";B.a="ThisisaCprogram.";
C.p="ThisisaCprogram.";D.strcpy(p,"ThisisaCprogram.");
17.以下数组声明中正确的是。
A.intn=10,a[n];B.inta[];
C.inta[2][3]={{1},{2},{3}};D.inta[][3]={{1},{2},{3}};
18.若有声明inta[10],b[3][3];则以下对数组元素赋值的操作中,不会出现越界访问的是。
A.a[-1]=0B.a[10]=0C.b[3][0]=0D.b[0][3]=0
19.已有声明“intS[2][3]”,以下选项中正确地引用了数组S中的元素。
A.S[1>2][!
1])B.S[2][0]C.S[1]D.S
20.已知函数fun的定义如下:
voidfun(intx[],inty)
{intk;
for(k=0;k x[k]+=y; } 若main函数中有声明inta[10]={10};及调用fun函数的语句,则正确的fun函数调用形式是。 A.fun(a[],a[0]);B.fun(a[0],a[0]);C.fun(&a[0],a[0]);D.fun(a[0],&a[0]); 21.以下单目运算符均只需要一个操作数,其中要求操作数类型必须是指针型的选项是。 A.&B.++C.! D.* 22.已有声明“inta[5];”,以下表达式中不能正确取得数组元素a[1]地址的选项是。 A.&a[1]B.++aC.&a[0]+1D.a+1 23.已知有声明: “intgood=1;”,若要使得表达式p="good"+good在编译时不出现语法错和警告,p应当声明为。 A.charp;B.char*p;C.intp;D.int*p; 24.下列程序段的输出结果是。 inti,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1]; for(i=0;i<4;i+=2) printf("%d",*(p+i)); A.52B.51C.53D.97 25.若有以下声明和定义,如果在main函数中需要调用fun函数,以下调用语句中错误是。 A.fun (1);B.(*a) (1);C.b=fun;(*b) (1);D.c=a;(*c) (1); voidfun(intc){printf(“%d”,c);} main() {void(*a)(int)=fun,*b(int),(*c)(int); /*调用fun函数语句位置*/ } void*b(intc){} 26.若有声明“inta[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);”,则值为9的表达式是. A.p+=3,*p++B.p+=4,*(p++)C.p+=4,*++pD.p+=4,++*p 27.已知某程序中有声明inta[4],j;及语句for(j=0;j<4;j++)p[j]=a+j;,则标识符p正确的声明形式应为。 A.intp[4];B.int*p[4];C.int**p[4];D.int(*p)[4]; 参考答案: 1~5: DDCBB6~10: BBABA11~15: DDDAB16~20: DDDAC 21~25: DBBCC26~27: BB 二、多选题 1.在定义一个函数时,下列选项中(21)可以缺省。 A.函数名之前的数据类型B.函数名之后一对圆括号 C.函数名D.形式参数声明 E.函数体中的语句 2.以下程序中需要在main函数之后定义一个函数,在所给的选项中不能用作该函数名的标识符是。 A.xB.yC.pD.a #definep1 inty; main() {inta=1; 函数名(a); } int函数名(intx) {returnx*x; } 3.若已定义一个无返回值的函数,则以下关于调用该函数的叙述中错误的是。 A.函数调用可以作为独立的语句存在 B.函数调用可以出现在表达式中 C.函数调用可以作为一个函数实参 D.函数调用可以作为一个函数形参 参考答案: 1.ADE2.BCD3.BCD 三、填空题 1.以下程序运行后输出结果是。 #include fun(intk) {staticinti; intj=0; return(++k*(++i+(++j))); } main() {inti,n; for(i=0;i<3;i++) printf("%3d\t",fun(i)); } 2.以下程序运行后输出结果是。 voidfun1(int); voidfun2(void); main() {externintx; printf("%d",x+=2); fun1 (2); } intx=1; voidfun1(intx) {printf("%d",x++); fun2(); } voidfun2(void) {printf("%d",x); while (1) {intx=5; printf("%d",x);break; } } 3.以下程序运行后输出结果是。 intx=1; main() {inty,k; y=f(3);printf("%d,%d",x,y); } intf(intx) {if(x==3) {intx=2; returnx; } elsebreturnx; } 4.下列程序运行后输出结果是。 #include trans(intm,intn) {intq; if(m q=m; else {q=m%n;trans(m/n,n);} if(q<10) printf("%d",q); else printf("%c",'a'+q-10); } main() {trans(30,4); } 5.下列程序运行后输出结果是。 #include intfun(intn); main() {printf("%d",fun(5)); } intfun(intn) {if(n==1)return1; returnn-fun(n-1); } 6.以下程序运行后的输出结果是。 voidfun(intx,inty,int*z) {y=x*x; *z=x*x*x; } voidmain() {inta=2,b=0,c=0; fun(a,b,&c); printf("%d%d%d",a,b,c); } 7.以下程序运行后输出结果中第一行为 (1),第二行为 (2)。 #include intfun(inta[],intn,intb[]) {inti=0,j,m=0,c,x; for(i=0;i {x=a[i];c=1; for(j=i+1;j if(a[j]==x)c++; else{i=j-1;break;} if(j>=n)i=j; if(c==1)b[m++]=x; else{b[m++]=-c;b[m++]=x;} } returnm; } voidmain() {intx[]={4,4,4,4,4,4,4,4,1,2},y[10],i,j,n=10; n=fun(x,n,y); for(i=0;i {if(i%2==0)printf("\n"); printf("%5d",y[i]); } } 8.以下程序运行后输出结果第一行是 (1),第二行是 (2)。 #include intconvert(chars1[],chars2[]) {inti=0,j,s; chartab[8][4]={"000","001","010","011","100","101","110","111"}; for(i=0,j=0;s1[i]! ='\0';i++,j=j+3) strcpy(&s2[j],tab[s1[i]-'0']); for(i=0,s=0;i s=s*2+s2[i]-'0'; returns; } main() {charss1[]="15",ss2[80]; inty; y=convert(ss1,ss2); printf("%d\n%s",y,ss2); } 9.以下程序运行后输出结果第一行是 (1),第二行是 (2)。 main() {inta[3][3]={1,2,3,4,5,6,7,8,9},m,k,t; for(m=0;m<3;m++) for(k=0;k<=m;k++) if((m+k)%2)t=a[m][k],a[m][k]=a[k][m],a[k][m]=t; for(m=0;m<3;m++) {for(k=0;k<3;k++) printf("%d",a[m][k]); printf("\n"); } } 10.以下程序运行后输出结果第一行是 (1),第三行是 (2)。 #include voidmat_change(intb[4][4]) {inti,j,m,n,k,c[6][6]; for(i=0;i<6;i++) for(j=0;j<6;j++)c[i][j]=1; for(i=1;i<5;i++) for(j=1;j<5;j++)c[i][j]=b[i-1][j-1]; for(i=1;i<5;i++) for(j=1;j<5;j++) {if(c[i][j]==0) {k=0; for(m=-1;m<=1;m++) for(n=-1;n<=1;n++) if(! (m==0&&n==0))k=k+c[i+m][j+n]; if(k==8)c[i][j]=1; } } for(i=1;i<5;i++) for(j=1;j<5;j++) b[i-1][j-1]=c[i][j]; } main() {inti,j,a[4][4]={{0,1},{1,1,1,1},{0,1,0,1},{0,1,1,1}}; mat_change(a); for(i=0;i<4;i++) {for(j=0;j<4;j++)printf("%d",a[i][j]); printf("\n"); } } 11.已知某程序中有如下片段: inti;floatf; /*p的声明*/ p=&i;p=&f; 若要保证该段程序没有任何语法错误,p应当声明为。 12.以下程序运行时输出结果是。 main() {inti,a[6]={1,2,3,4,5,6}; fun(a,a+5); for(i=0;i<6;i++)printf("%2d",a[i]); } fun(int*p1,int*p2) {intt; if(p1 {t=*p1;*p1=*p2;*p2=t; fun(p1+=2,p2-=2); } } 13.以下程序运行时输出结果第一行是 (1),第二行是 (2)。 voidswap(int*a,int*b) {intc; c=*a;*a=*b;*b=c; } main() {inti,j,a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=0;j<2-i;j++) if(i==j) swap(&a[i][j],&a[i+2][j+2]); else swap(&a[i][j],&a[i+1][j+1]); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n"); } } 14.以下程序运行时输出结果第一行是 (1),第二行是 (2),第三行是(3)。 #include #include longfun(char*s) {longn,sign,base=10,t; for(;isspace(*s);s++); sign=(*s=='-')? -1: 1; if(*s=='+'||*s=='-')s++; if(*s=='0'&&s++) {if(*s=='x'||*s=='X') {base=16;s++;} else base=8; } for(n=0,t=1;t&&(isdigit(*s)||isalpha(*s));s++) switch(base) {case10: n=n*base+*s-'0';break; case8: if(*s>='0'&&*s<='7') n=n*base+*s-'0'; elset=0; break; default: if(isdigit(*s)) n=n*base+*s-'0'; else if(toupper(*s)>='A'&&toupper(*s)<='F') n=n*base+toupper(*s)-'A'+10; elset=0; } returnsign*n; } main() {charc1[]="0x1f",c2[]="0409",c3[]="-33"; printf("%ld\n%ld\n%ld",fun(c1),fun(c2),fun(c3)); } 15.以下程序运行时,输出结果的第一行是 (1),第二行是 (2)。 voidq(char*s,intleft,intright) {inti,j; charx,y; i=left;j=right; x=s[(left+right)/2]; do {while(s[i]>x&&i while(s[j] if(i<=j) {y=s[i]; s[i]=s[j]; s[j]=y; i++;j--; } }while(i<=j); } main() {charstr1[6]="abcde",str2[7]="25134"; q(str1,0,4);puts(str1); q(str2,1,4);puts(str2); } 参考答案: 1.26122.32353.1,24.1325.36.2087. (1)-84 (2)12 8. (1)13 (2)9. (1)143 (2)25810. (1)1100 (2)011111.void*p; 12.6,2,4,3,5,113. (1)963 (2)85214. (1)31 (2)32(3)-33 15. (1)edcba (2)25431 四、完善程序 1、以下程序中函数sort的功能是把a、b数组中的数据从大到小有序归并到c数组中,m保存a数组中数据的个数,n保存b数组中数据的个数,函数返回归并到c数组的数据个数。 算法提示: 首先将b数组中数据倒序,再将a、b数组有序合并到c数组中。 #include voidswap(int*a,int*b) {intc;c=*a,*a=*b,*b=c;} intsort(int*a,intm,int*b,intn,int*c) {inti,j,k,x; for(i=0;i swap(&b[i], (1)); i=0;j=0;k=0; while(i {if( (2)) {x=a[i];i++;} else {x=b[j];j++;} c[k]=x;k++; } while(k {if(j {c[k]=b[j];k++;j++;} elseif(i {(3);k++;i++;} } returnm+n; } voidmain
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理论 自测 参考答案