C理论自测题及参考答案第3次.docx

上传人:b****1 文档编号:3517747 上传时间:2023-05-06 格式:DOCX 页数:25 大小:23.77KB
下载 相关 举报
C理论自测题及参考答案第3次.docx_第1页
第1页 / 共25页
C理论自测题及参考答案第3次.docx_第2页
第2页 / 共25页
C理论自测题及参考答案第3次.docx_第3页
第3页 / 共25页
C理论自测题及参考答案第3次.docx_第4页
第4页 / 共25页
C理论自测题及参考答案第3次.docx_第5页
第5页 / 共25页
C理论自测题及参考答案第3次.docx_第6页
第6页 / 共25页
C理论自测题及参考答案第3次.docx_第7页
第7页 / 共25页
C理论自测题及参考答案第3次.docx_第8页
第8页 / 共25页
C理论自测题及参考答案第3次.docx_第9页
第9页 / 共25页
C理论自测题及参考答案第3次.docx_第10页
第10页 / 共25页
C理论自测题及参考答案第3次.docx_第11页
第11页 / 共25页
C理论自测题及参考答案第3次.docx_第12页
第12页 / 共25页
C理论自测题及参考答案第3次.docx_第13页
第13页 / 共25页
C理论自测题及参考答案第3次.docx_第14页
第14页 / 共25页
C理论自测题及参考答案第3次.docx_第15页
第15页 / 共25页
C理论自测题及参考答案第3次.docx_第16页
第16页 / 共25页
C理论自测题及参考答案第3次.docx_第17页
第17页 / 共25页
C理论自测题及参考答案第3次.docx_第18页
第18页 / 共25页
C理论自测题及参考答案第3次.docx_第19页
第19页 / 共25页
C理论自测题及参考答案第3次.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C理论自测题及参考答案第3次.docx

《C理论自测题及参考答案第3次.docx》由会员分享,可在线阅读,更多相关《C理论自测题及参考答案第3次.docx(25页珍藏版)》请在冰点文库上搜索。

C理论自测题及参考答案第3次.docx

C理论自测题及参考答案第3次

一、单选题

1.以下关于函数的叙述中,正确的是。

A.在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值

B.在函数体中至少必须有一个return语句

C.在函数体中可以定义另一个函数

D.在函数体中可以调用函数自身

2.以下关于变量的叙述中,不正确的是。

A.一个变量的作用域完全取决于该变量声明的位置

B.全局变量可以在函数以外的任何位置声明

C.动态局部变量的生存期仅限于本次函数调用,无法将局部变量的值保存到函数下一次调用

D.&

E.用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.yD.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=,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.以下程序运行后的输出结果是。

22C.752

"

#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]);(a[0],a[0]);(&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应当声明为。

p;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的表达式是.

+=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函数之后定义一个函数,在所给的选项中不能用作该函数名的标识符是。

C.p

#definep1

inty;

main()

{inta=1;

函数名(a);

}

int函数名(intx)

{returnx*x;

}

3.若已定义一个无返回值的函数,则以下关于调用该函数的叙述中错误的是。

A.函数调用可以作为独立的语句存在

B.函数调用可以出现在表达式中

{

C.函数调用可以作为一个函数实参

D.函数调用可以作为一个函数形参

参考答案:

2.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]left)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)0011019.

(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()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2