C理论自测题及参考答案第3次Word格式.docx
- 文档编号:16450246
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:23.68KB
C理论自测题及参考答案第3次Word格式.docx
《C理论自测题及参考答案第3次Word格式.docx》由会员分享,可在线阅读,更多相关《C理论自测题及参考答案第3次Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
{/*int型变量声明位置*/
9.若有程序:
intx;
intf(inty)
{return标识符;
stdio.h>
intw;
{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函数定义的首部中,错误的是。
{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
string.h>
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]="
B.a="
C.p="
D.strcpy(p,"
);
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<
y;
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)
%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
函数名(a);
int函数名(intx)
{returnx*x;
3.若已定义一个无返回值的函数,则以下关于调用该函数的叙述中错误的是。
A.函数调用可以作为独立的语句存在
B.函数调用可以出现在表达式中
C.函数调用可以作为一个函数实参
D.函数调用可以作为一个函数形参
1.ADE2.BCD3.BCD
三、填空题
1.以下程序运行后输出结果是。
fun(intk)
{staticinti;
intj=0;
return(++k*(++i+(++j)));
main()
{inti,n;
for(i=0;
3;
i++)
printf("
%3d\t"
fun(i));
}
2.以下程序运行后输出结果是。
voidfun1(int);
voidfun2(void);
{externintx;
x+=2);
fun1
(2);
intx=1;
voidfun1(intx)
{printf("
x++);
fun2();
voidfun2(void)
x);
while
(1)
{intx=5;
break;
3.以下程序运行后输出结果是。
{inty,k;
y=f(3);
%d,%d"
x,y);
intf(intx)
{if(x==3)
{intx=2;
returnx;
elsebreturnx;
4.下列程序运行后输出结果是。
trans(intm,intn)
{intq;
if(m<
n)
q=m;
else
{q=m%n;
trans(m/n,n);
if(q<
10)
%d"
q);
printf("
%c"
a'
+q-10);
{trans(30,4);
5.下列程序运行后输出结果是。
intfun(intn);
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);
%d%d%d"
a,b,c);
7.以下程序运行后输出结果中第一行为
(1),第二行为
(2)。
#include<
intfun(inta[],intn,intb[])
{inti=0,j,m=0,c,x;
for(i=0;
n;
{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);
{if(i%2==0)printf("
\n"
%5d"
y[i]);
8.以下程序运行后输出结果第一行是
(1),第二行是
(2)。
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;
strlen(s2);
s=s*2+s2[i]-'
returns;
{charss1[]="
15"
ss2[80];
inty;
y=convert(ss1,ss2);
%d\n%s"
y,ss2);
9.以下程序运行后输出结果第一行是
(1),第二行是
(2)。
{inta[3][3]={1,2,3,4,5,6,7,8,9},m,k,t;
for(m=0;
m<
m++)
=m;
if((m+k)%2)t=a[m][k],a[m][k]=a[k][m],a[k][m]=t;
{for(k=0;
a[m][k]);
10.以下程序运行后输出结果第一行是
(1),第三行是
(2)。
voidmat_change(intb[4][4])
{inti,j,m,n,k,c[6][6];
6;
for(j=0;
j++)c[i][j]=1;
for(i=1;
5;
for(j=1;
j++)c[i][j]=b[i-1][j-1];
{if(c[i][j]==0)
{k=0;
for(m=-1;
=1;
for(n=-1;
n<
n++)
if(!
(m==0&
&
n==0))k=k+c[i+m][j+n];
if(k==8)c[i][j]=1;
}
for(j=1;
b[i-1][j-1]=c[i][j];
{inti,j,a[4][4]={{0,1},{1,1,1,1},{0,1,0,1},{0,1,1,1}};
mat_change(a);
{for(j=0;
j++)printf("
a[i][j]);
11.已知某程序中有如下片段:
inti;
floatf;
/*p的声明*/
p=&
i;
p=&
f;
若要保证该段程序没有任何语法错误,p应当声明为。
12.以下程序运行时输出结果是。
{inti,a[6]={1,2,3,4,5,6};
fun(a,a+5);
i<
i++)printf("
%2d"
a[i]);
fun(int*p1,int*p2)
{intt;
if(p1<
p2)
{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;
{inti,j,a[3][3]={1,2,3,4,5,6,7,8,9};
for(j=0;
2-i;
if(i==j)
swap(&
a[i][j],&
a[i+2][j+2]);
swap(&
a[i+1][j+1]);
j++)
14.以下程序运行时输出结果第一行是
(1),第二行是
(2),第三行是(3)。
ctype.h>
longfun(char*s)
{longn,sign,base=10,t;
for(;
isspace(*s);
s++);
sign=(*s=='
-'
)?
-1:
1;
if(*s=='
+'
||*s=='
)s++;
s++)
{if(*s=='
x'
X'
)
{base=16;
s++;
else
base=8;
for(n=0,t=1;
t&
(isdigit(*s)||isalpha(*s));
switch(base)
{case10:
n=n*base+*s-'
case8:
if(*s>
*s<
7'
n=n*base+*s-'
elset=0;
break;
default:
if(isdigit(*s))
n=n*base+*s-'
else
if(toupper(*s)>
&
toupper(*s)<
n=n*base+toupper(*s)-'
+10;
returnsign*n;
{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&
right)i++;
while(s[j]<
j>
left)j--;
if(i<
=j)
{y=s[i];
s[i]=s[j];
s[j]=y;
i++;
j--;
}while(i<
=j);
{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数组中。
c=*a,*a=*b,*b=c;
intsort(int*a,intm,int*b,intn,int*c)
{inti,j,k,x;
n/2;
swap(&
b[i],
(1));
i=0;
j=0;
k=0;
while(i<
m&
j<
{if(
(2))
i++;
{x=b[j];
j++;
c[k]=x;
k++;
while(k<
m+n)
{if(j<
{c[k]=b[j];
elseif(i<
m)
{(3);
returnm+n;
voidmain
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理论 自测 参考答案