二级C语言笔试107.docx
- 文档编号:9760670
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:32
- 大小:27.77KB
二级C语言笔试107.docx
《二级C语言笔试107.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试107.docx(32页珍藏版)》请在冰豆网上搜索。
二级C语言笔试107
二级C语言笔试-107
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
50,分数:
60.00)
1.以下程序段的执行结果为______。
#definePLUS(X,Y)X+Y
main()
intx=1,y=2,z=3,sum;
sum=PLUS(x+y,z)*PLUS(y,z);
printf("SUM=%d",sum);
(分数:
2.00)
A.SUM=9
B.SUM=12 √
C.SUM=18
D.SUM=28
解析:
[分析]表达式sum=PLUS(x+y,z)*PLUS(y,z)用带参的宏替换为sum=x+y+z*y+z,sum的值为12。
2.下列说法中,正确的是______。
(分数:
2.00)
A.指针是一个变量
B.指针中存放的可以是任何类型的值
C.指针变量是变量地址
D.指针变量占用存储空间 √
解析:
[分析]指针是地址,存放指针的变量是指针变量,不同类型的指针变量存放不同类型数据的地址,指针变量作为可存储指针的变量,也要占用一定的存储空间。
3.设有两个串p和q,求q在p中首次出现位置的运算称作______。
(分数:
2.00)
A.连接
B.模式匹配 √
C.求子串
D.求串长
解析:
[分析]子串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一,算法的基本思想是:
从主串的开始字符起,与模式的第一个字符比较,若相等,则继续比较后续字符,否则从主串的下一个字符起再重新与模式的字符比较,依次类推,直至模式中的每一个字符依次和主串中的一个连续的字符序列相等,称匹配成功,否则称匹配不成功。
4.下列程序的执行结果是______。
in(f(char*s)
char*p=s;
while(*p!
='/0')p++;
return(p-s);
main()
printf("%d/n",f("goodbye!
"));
(分数:
2.00)
A.3
B.6
C.8 √
D.0
解析:
[分析]字符在内存中占一个字节的存储空间,按字符的存储顺序,其地址依次递增,在函数f中循环过后,p指向字符串的结束位置,s指向字符串首地址,p-s即为字符串长度。
5.C语言规定,简单变量作实参时,它和对应形参之间的数据传递方式是______。
(分数:
2.00)
A.由实参传给形参,再由形参传回给实参
B.地址传递
C.单向值传递 √
D.由用户指定传递方式
解析:
[分析]简单变量做实参时,相应的形参变量也是简单变量,它们之间的数据传递方式是单向值传递,即数据只能由实参传到形参,形参值的改变不影响实参值的变化。
6.设有说明:
inta=1,b=0;,则执行以下语句的输出结果是______。
switch(
(分数:
2.00)
A.
case1:
switch(
B.
case0:
printf("**0**/n");break;
case1:
printf("**1*/n");break;< √
解析:
[分析]本题是switch-case语句的嵌套使用,外层switch语句的第一个分支(嵌套switch语句)执行完后,没有break;语句,将继续执行第二个分支。
7.下列程序的输出结果是______。
main()
intx=0,a=0,b=2;
if(x=a+b)printf("****/n");
elseprintf("####/n");
(分数:
2.00)
A.有语法错,不能通过编译
B.通过编译,但不能连接
C.**** √
D.####
解析:
[分析]if语句中的条件表达式是赋值表达式,a+b值为2,赋给x,x值非0,输出****。
8.执行下面程序的结果是______。
main()
intx=2;
printf("%d/n",(x--,x<<1,x&&5));
(分数:
2.00)
A.0
B.1 √
C.2
D.编译时有语法错误,不能执行
解析:
[分析]逗号表达式x--,x<<1,x&&5先执行x--,x的值为1,再执行x<<1,表达式的值为2,但x的值仍是1(不是移位赋值表达式),最后执行x&&5,二者均不为0,逻辑与的结果是1。
9.下列程序的运行结果是______。
main()
inta[6],i;
for(i=2;i<6;i++)
a[i]=4*(i-2*(i>3))%5;
printf("%2d",a[i]);
(分数:
2.00)
A.2323
B.1212
C.3232 √
D.2222
解析:
[分析]本题程序的功能是对数组元素赋值,难点是对表达式4*(i-2*(i>3))%5的分析。
10.fseek函数是C语言系统提供的标准库函数,其实现的具体操作是______。
(分数:
2.00)
A.实现文件的顺序读写
B.实现文件的随机读写
C.改变文件的位置指针 √
D.以上答案均不正确
解析:
[分析]fseek函数的原形为intfseek(FILE*fp,longoffset,intbase);函数的功能是将fp所指向的位置指针移到以base所指位置为基准、以offset为位移量的位置。
可见,fseek是改变文件的位置指针。
11.下列用于printf函数的控制字符常量中,代表“竖向跳格”的转义字符常量是______。
(分数:
1.00)
A.'/b'
B.'/t'
C.'/v' √
D.'/f'
解析:
[分析]转义字符'/b/、'/t'、'/v'、'/f'的作用分别是退格、移到下一制表位、竖向跳格和换页。
12.下列程序的输出结果是______。
structexmple
intx;
inty;
num[2]=1,2,3,2;
main()
printf("%d/n",num[1].y*num[0].x/num[1].x);
(分数:
1.00)
A.0 √
B.1
C.3
D.6
解析:
[分析]结构体数组num初始化后,num[0]成员x、y的值分别为1、2,num[1]成员x、y的值分别为3、2,代入num[1].y*num[0].x/num[1].x,解得值是0。
13.下列4项说法中,不正确的是______。
(分数:
1.00)
A.数据库减少了数据冗余
B.数据库中的数据可以共享
C.数据库避免了一切数据的重复 √
D.数据库具有较高的数据独立性
解析:
[分析]数据库系统具有以下4个特点:
数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。
14.若有下列语句:
chara[]="xyz";
charb[]='x','y','z';
则下列叙述正确的是______。
(分数:
1.00)
A.数组a和数组b不等价
B.数组a和数组b的长度相同
C.数组a占用空间大小等于数组b占用空间大小
D.数组a占用空间大小大于数组b占用空间大小 √
解析:
[分析]数组a的存储空间占4个字节(结束符'/0'占一字节),数组a的存储空间占3个字节。
15.下列4项中,必须进行查询优化的是______。
(分数:
1.00)
A.关系数据库 √
B.网状数据库
C.层次数据库
D.非关系模型
解析:
[分析]关系数据模型诞生之后迅速发展,深受用户喜爱,但关系数据模型也有缺点,其最主要的缺点是由于存取路径对用户透明,查询效率往往不如非关系数据模型。
因此,为了提高性能,必须对用户的查询请求进行优化。
16.分析下面的程序
main()
int*p1,*p2,*p;
intx=4,y=6;
p1=&x;p2=&y;
if(x<y)
p=p1;p1=p2;p2=p;
printf("%d,%d,",*p1,*p2);
printf("%d,%d/n",x,y);
程序的输出结果为_______。
(分数:
1.00)
A.6,4,4,6 √
B.4,6,6,4
C.4,6,4,6
D.6,4,6,4
解析:
[分析]if语句执行前,指针变量p1指向变量x,指针变量p2指向变量y。
由于x<y成立,p1、p2分别指向变量y和变量x,因此,程序输出结果是6,4,4,6。
17.已知在ASCII字符集中,数字0的序号为48,下列程序的输出结果为______。
main()
chara='0',b='9';
printf("%d,%c/n",a,b);
(分数:
1.00)
A.因输出格式不合法
B.48,57
C.0,9
D.48,9 √
解析:
[分析]注意输出控制符%d,%c,分别表示以十进制形式输出字符的ASCII码值和字符。
18.下列字符串是用户自定义标识符的是______。
(分数:
1.00)
A._w1 √
B.3_xy
C.int
D.LINE-3
解析:
[分析]标识符是由字母或下划线打头,由字母、数字、下划线组成的字符串,包括关键字、编译预处理命令和用户自定义标识符3种,选项B、D不是合法的标识符,选项C是关键字。
19.软件设计中,有利于提高模块独立性的一个准则是______。
(分数:
1.00)
A.低内聚低耦合
B.低内聚高耦合
C.高内聚低耦合 √
D.高内聚高耦合
解析:
[分析]模块的独立程度是评价设计好坏的重要度量标准。
衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。
一般优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性,提高模块内的内聚性,有利于提高模块的独立性。
20.在C语言的循环语句for、while、do-while中,用于结束本次循环,继续执行下一次循环的语句是______。
(分数:
1.00)
A.switch
B.break
C.continue √
D.goto
解析:
[分析]循环辅助控制语句有continue;和break;,前者跳过本次循环,进行下一次循环,后者跳出整个循环语句。
21.下面函数的功能是______。
exchange(int*ptr1,*ptr2)
int*ptr;
ptr=-ptr1;
ptr1=ptr2;
ptr2=ptr;
(分数:
1.00)
A.交换*ptr1和*ptr2的值
B.无法改变*ptr1和*ptr2的值 √
C.可能造成系统故障,因为使用了空指针
D.交换*ptr1和*pb2的地址
解析:
[分析]函数中将指针变量ptr1和ptr2中的值交换,而不是交换指针ptr1和ptr2所指变量中的值。
22.下列程序段的输出结果是______。
int**pp,*p;
inta=10,b=20;
p=&a;
pp=&p;
p=&b;
printf("%d,%d/n",*p,**pp);
(分数:
1.00)
A.10,20
B.10,10
C.20,20 √
D.20,10
解析:
[分析]指针变量p先是指向变量a,后指向变量b,但二级指针变量始终指向指针变量p。
23.下列程序的输出结果是______。
main()
char*s="1221";
intk=0,a=0,b=0;
do
if(k%2==0)
a=a+s[k]-'0';
continue;
b=b+s[k]-'0';
while(s[++k]);
printf("k=%da=%db=%d/n",k,a,b);
(分数:
1.00)
A.k=3a=4b=3
B.k=3a=3b=3
C.k=4a=3b=3 √
D.k=4a=2b=3
解析:
[分析]将数字字符串中下标值能被2整除的元素值(字符)转换为数字累加到变量a中,将数字字符串中下标值不能被2整除的元素值(字符)转换为数字累加到变量b中,循环结束时,a、b的值均为3,k是字符结束符的下标值,为4。
24.下列语句所定义字符串在内存中占的字节数是______。
char*s="/'Name/'///'Age/'/n";
(分数:
1.00)
A.定义中有语法错误
B.20
C.19
D.14 √
解析:
[分析]转义字符在内存中占一个字节,字符串结束标志也占一个字节,实际存储空间是14个字节,但若用strlen函数求长度时,值为13,结束标志不算。
25.下列程序的输出结果是______。
main()
inta=2;
do
printf("%d/n",a-=2);
while(!
(--
(分数:
1.00)
A.);
解析:
[分析]do-while语句是先执行后判断,第一次执行循环体,输出0,循环控制条件!
(--A)的值为0,则结束循环。
26.对象实现了数据和操作的结合,是指对数据和数据的操作进行______。
(分数:
1.00)
A.结合
B.隐藏
C.封装 √
D.抽象
解析:
[分析]对象是由数据及可以对这些数据施加的操作组成的统一体。
对象的内部,即处理能力的实行和内部状态,对外是看不见的,这一特性称为对象的封装。
27.若i是int型变量,且有下面的程序段:
for(i=4;i<6;i++)
printf((i%2)?
("**%d/n"):
("##%d/n"),i);
上面程序段的输出结果是______。
(分数:
1.00)
A.**4
##5
B.##4
**5 √
C.**4
**5
D.##4
##5
解析:
[分析]函数printf中的参数是三目条件表达式,循环控制变量i值为4时,i%2为0,格式控制字符串为"##%d/n",输出为##4;循环控制变量i值为5时,i%2为1,格式控制字符串为"**%d/n",输出为*5,两次输出不在同一行。
28.下面程序的输出是______。
main()
inta=6,b=3;
printf("%d/n",b=(a/b,a%b));
(分数:
1.00)
A.0 √
B.1
C.2
D.不确定的值
解析:
[分析]逗号表达式的值为最后一个表达式的值,本题将a%b的值0赋给变量b。
29.若有说明语句:
intx=3,y=4,z=5;,则下面的表达式中,值为0的是______。
(分数:
1.00)
A.x&&y
B.x<=y
C.x||++y&&y-z
D.!
(x<y&&!
z||1) √
解析:
[分析]x&&y值为1,x<=y值为1,x||++y&&y-z值为1,!
(x<y&&!
z||1=值为0。
30.定义数组chara[]='0','1','2','3');,则将该数组中元素按反序转换成整数,正确的程序段是______。
(分数:
1.00)
A.intk=0,i;
for(i=0;i<4;i++)
k=k*10+a[i]-48;
B.intk=0,i;
for(i=3;i>=0;i--)
k=k*10+a[i]-'0'; √
C.intk=0,i;
for(i=3;i>=0;i--)
k=k+a[i]-'0';
D.intk,i;
for(i=3;i>=0;i--)
k=k*10+a[i]-'0';
解析:
[分析]将字符数组中的元素按反序转换成整数,数组第一个元素应当是四位整数的个位,依次类推,字符数字转换为数字的基本方法是将该字符的ASCII码值减去字符0的ASCII码值,程序的输出结果是3210。
31.由两个栈共享一个存储空间的好处是______。
(分数:
1.00)
A.减少存取时间,降低下溢发生的几率
B.节省存储空间,降低上溢发生的几率 √
C.减少存取时间,降低上溢发生的几率
D.节省存储空间,降低下溢发生的几率
解析:
[分析]常常一个程序中要用到多个栈,为了不发生上溢错误,就必须给每个栈分配一个足够大的存储空间。
但实际中,很难准确地估计,若每个栈都分配过大的存储空间,势必造成系统空间紧张;若让多个栈共用一个足够大的连续存储空间,则可利用栈的动态特性使它们的存储空间互补。
32.下列程序的输出结果是______。
main()
union
inta[2];
longk;
charc[4];
un,*sp=&un;
sp->a[0]=0x39;
sp->a[1]=0x38;
printf("%1x/n",sp->k);
(分数:
1.00)
A.3938
B.3839
C.390038
D.380039 √
解析:
[分析]结构体变量un的存储情况如图18-3所示,第一列表示地址,第二列为每个字节的值,可用两位的十六进制数表示,当把这4个字节的内容作为long型数据时,高地址字节的值表示高位,低地址字节的值表示低位。
[*]
33.分析下列程序,其最终执行结果是______。
main()
intn[3],i,j,k;
for(i=0;i<3;i++)n[i]=O;
k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
n[j]=n[i]-1;
printf("%d/n",n[0]);
(分数:
1.00)
A.-2
B.-1
C.0
D.-3 √
解析:
[分析]当i为0,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[0]-1,n[0]值变为-1:
在j为1时,执行n[j]=n[i]-1;,即n[1]=n[0]-1,将-2赋给n[1]。
当i为1时,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[1]-1,n[0]值变为-3;在j为1时,执行n[j]=n[i]-1;,即n[1]=n[1]-1,将-3赋给n[1];最后n[0]和n[1]的值均为-3。
34.对于下述说明,不能使变量p->b的值增1的表达式是______。
structexm
inta;
intb;
floatc
*p;
(分数:
1.00)
A.++p->b
B.++(p++)->b
C.p->b++
D.(++p)->b++ √
解析:
[分析]p->b应作为一个整体看待,++p->b和p->b++都使变量b增1,++(p++)->b先使b增1,再使p后移,D中表达式的含义是使p+1所指结构体变量中的成员b的值增1。
35.n个顶点的连通图中边的条数至少为______。
(分数:
1.00)
A.0
B.1
C.n-1 √
D.n
解析:
[分析]在无向图(边没有方向性的图)中,若从顶点vi到vj有路径,则称vi和vj是连通的,若该图中任意两个顶点都是连通的,则称该图为连通图。
36.下列程序段的执行结果是______。
inti;
intx[][3]=1,2,3,4,5,6,7,8,9;
for(i=0;i<3;i++)
printf("%d",x[i][2-i]);
(分数:
1.00)
A.159
B.147
C.357 √
D.369
解析:
[分析]数组x在初始化时赋9个值,列值为3,则行值为3。
i为0时,x[i][2-1]指的是元素x[0][2](值为3):
i为1时,x[i][2-i]指的是元素x[1][1](值为5):
i为2时,x[i][2-1]指的是元素x[2][0](值为7);输出结果是357。
37.最常用的一种基本数据模型是关系数据模型,它的表示应采用______。
(分数:
1.00)
A.树
B.网络
C.图
D.二维表 √
解析:
[分析]关系数据模型用统一的二维表结构表示实体及实体之间的联系(即关系)。
38.以下程序存在语法性错误,关于错误原因的正确说法是______。
main()
inta=5,b;
voidp_ch1();
…
b=p_ch1(
(分数:
1.00)
A.;
…A)语句“voidp_ch1():
”有错,它是函数调用语句,不能使用void说明
B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾 √
D.函数名中不能使用下划线
解析:
[分析]函数声明中指出函数没有参数,返回值为空类型,而调用语句却有参数,并将函数值赋给int型变量b,显然是不对的。
39.下列程序的输出结果是______。
char*fun(char*str,intn)
inti;
char*p=str;
for(i=0;i<10;i++,str++)
*str='a'+i;
return++p;
main()
chara[10];
printf("%s/n",fun(a,10));
(分数:
1.00)
A.ABCDEFGHIJ
B.abcdefghij
C.bcdefghij √
D.不确定的值
解析:
[分析]调用函数fun使字符数组中的内容是"abcdefghij",函数的返回值是字符数据的地址,该地址指向数组的第二个字符,因此,主函数的输出结果是字符串"bcdefghij"。
40.以下程序的输出结果是______。
fun(int**p,inta[2][3])
**p=a[1][2];
main()
inta[2][3]=1,3,5,7,9,11,*p;
p=(int*)malloc(sizeof(int));
fun(&p,
(分数:
1.00)
A.;
&
解析:
[分析]主函数中指针变量指向两字节的存储空间,这两个字节可以存放int型数据,函数fun是将实参数组a中的元素a[1][2]的值11赋给指针变量p所指的存储空间,程序输出该空间的值。
本题函数fun中形参p是二级指针变量,它指向实参指针变量p。
41.下列能正确进行字符数组赋初值的语句是______。
(分数:
1.00)
A.chart[5]='a','b','c','d','e'; √
B.char*t;t="abcde";
C.chart[5]="abcde";
D.chart[5];t="abcd";
解析:
[分析]可以赋初值的字符串一定是用字符数组存储的,选项B不对,它是将字符指针变量指向一个字符串常量;选项C中字符数组t需要6个字节的存储空间:
选项D是错误的形式,数组名是常量。
42.下列程序的输出结果是______。
intm=10;
intfun(inta,intB)
intm=2;
return(a*b-m);
main()
intx=7,y=5;
printf("%d/n",fun(x,y)%m);
(分数:
1.00)
A.1
B.2
C.7
D.3 √
解析:
[分析]本题考查全局变量和局部变量的区别。
在函数fun中的m是局部变量,值为2,在主函数中的m是全局变量,值为10。
43.下列程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 笔试 107