点击查看:2017年12月计算机二级考试C语言考前提分卷汇总
一、选择题(每小题1分,共40分)
1 [单选题] 下列关于线性链表的叙述中,正确的是( )。
A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续
C.进行插入与删除时,不需要移动表中的元素
D.以上说法均不正确
参考答案:C
参考解析:
一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的.并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。
2 [单选题] 以下关于字符串处理的叙述正确的是( )。
A.进行字符串复制时,目的串的存储空间必须足够大
B.两个字符串进行比较时,短的一个必定比长的一个小
C.计算一个字符串的长度时,应包含串尾的结束标志
D.两个字符串连接时,对存储空间的大小没有要求
参考答案:A
参考解析:
两个字符串进行比较时,按照字符串中相同位置的字符ASCII码顺序进行比较,故选项B错误;字符串需要包含串尾的结束标志,但是计算字符串长度时,不包含串尾的结束标志,故选项c错误;要将字符串s2连接到s1后面,串s1所在存储空间必须可以存储字符串s1、字符串s2连接后构成新串的字符,故选项D错误。答案选A。
3 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.57,39
B.57,57
C.9,9
D.39,39
参考答案:A
参考解析:
本题考查宏定义。宏定义是在程序预处理阶段直接进行文本替换,所以本题中S(k+j)、S(j+k)可以替换为:S(k+j)=(k+j/k+j) ×k+j=(6+3/6+3)×6+3=57;S(j+k)=(j+k/j+k)×j+k=(3+6/3+6)× 3+6=39,故答案为A。(注:宏定义中的形参一定要使用小括号括起来,以避免出错)
4 [单选题] 设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为( )。
A.0
B.'\0'
C.非0值
D.NULL
参考答案:C
参考解析:
本题考查文件的定位,feof函数的用法是从输人流读取数据,如果到达文件末尾(遇文件结束符),eof函致值为非零值,否则为0,所以选项C正确。
5 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.2
B.4
C.6
D.8
参考答案:D
参考解析:
本题考查位运算符,题目中将a向左移两位,左移两位表示乘以4,所以答案为8,选项D正确。
6 [单选题] 以下叙述中错误的是( )。
A.C程序在运行过程中所有计算都以二进制方式进行
B.C程序在运行过程中所有计算都以十进制方式进行
C.所有C程序都需要编译链接无误后才能运行
D.C程序中字符变量存放的是字符的ASCII码值
参考答案:B
参考解析:
C程序在运行过程中的所有计算都以二进制方式进行,所以B选项错误。
7 [单选题] 设有定义和语句(假设short int型数据占2字节)nt型数据占2字节)
则以下叙述正确的是( )。
A.pi和pj指向了同一个short int型存储单元
B.pi和pj指向了2个连续的short int型存储单元的首地址
C.pi和pj分别指向了一个short int型存储单元
D.pi和pj分别指向了2个short int型存储单元
参考答案:A
参考解析:
语句pi=pj=(short*)ma11oc(2)首先使用动态分配函数ma11oc分配2个字节的内存空间,然后将内存首地址转换为short·类型并返回,赋值给pj,再将pj的值赋给pi,所以指针pi和pj的值是相同的,指向同一个short int型的存储单元,故选项A正确。
8 [单选题] 以下语句中存在语法错误的是( )。
参考答案:A
参考解析:
二维数组第一维的大小在初始化时可以不指定,当第一维的大小初始化没有指定时按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除。则所得的商加1作为第一维的大小,所以选项B相当于:char ss[1][20]={"right?"};其中ss[0][0]=‘r’、ss[0][1]=‘i’…,故选项B正确;选项中声明一个字符指针数组ss,ss中每个元素都是—个字符指针,ss[1]=“right?”相当于将字符串“right?”的首地址赋值给字符指针ss[1],故选项C正确;选项D声明一个字符指针数组ss,并初始化第一个元素,使它指向字符串“right?”,故选项D正确;选项A定义二维字符数组ss,所以s[1]可看作是一个字符数组,ss[1]=“right?”相当于将一个字符串的首地址赋值给一个字符数组,这是错误的,字符数组如果没有初始化,则只有对数组中的每个元素逐个赋值,因此答案为A。
9 [单选题] 设有定义:double x;,以下选项中不能将输入数据3.14读入赋给变量x的是( )。
A.scanf(“%4.2f”,&x);
B.scanf(“%If”&x);
C.scanf(“%le”,&x);
D.scanf(“%41f”,&x);
参考答案:A
参考解析:
scanf()函数格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。输入数据宽度必须是十进制的整数,它没有精度控制,%4.2f是错误的,不能企 图用此语句输入小数点为2位的实数,故选项A错误:scanf()函数的长度格式符为1和h,%If表示用小数形式输入双精度浮点数,满足条件,故选项B正确;%le表示用指数形式输入双精度浮点数,满足条件,故选项C正确;%41f表示用小数形式输入宽度为4的双精度浮点数,故选项D正确,因此答案为A。
10 [单选题] 以下选项中,不合法的C语言用户标识符是( )。
A.a_b
B.AaBc
C.a—b
D.1
参考答案:C
参考解析:
C语言规定,变量命名必须符合标识符的命名规则,C选项中包含了非法字符"一",所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。
11 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.10,20,14
B.20,20,20
C.10,10,10
D.14,14,14
参考答案:A
参考解析:
本题考查宏定义,宏定义在程序的预编译阶段直接进行文本替换,所以本题中宏定义展开如下:
程序输出结果为10,20,14答案为A。(注:宏定义中的形参一定要使用小括号括起来,以避免出错)
12 [单选题] 结构化程序所要求的基本结构不包括( )。
A.顺序结构
B.GOT0跳转
C.选择(分支)结构
D.重复(循环)结构
参考答案:B
参考解析:
l966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。
13 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.4321098765
B.5678901234
C.0987654321
D.0987651234
参考答案:B
参考解析:
该程序首先给一维数组赋值,然后三次调用fun函数,其中fun(a,0,3);功能是将一维数组中第1个元素和第4个元素互换,第2个元素和第3个元素互换;其中fun(a,4,9);功能是将一维数组中第5个元素和第10个元素互换,第6个和第9个元素互换,第7个元素和第8个元素互换;其中fun(a,0,9);功能是将将一维数组中第1个元素和第10个元素互换,第2个元素和第9个元素互换……依此类推。因此B选项正确。
14 [单选题] 建立表示学生选修课程活动的实体联系模型,其中的两个实体分别是( )。
A.课程和课程号
B.学生和课程
C.学生和学号
D.课程和成绩
参考答案:B
参考解析:
实体是概念世界中的基本单位,是客观存在并可以相互区别的事物。要建立表示学生选修课程活动的实体联系模型,能互相区别并可以联系起来的实体是学生和课程。故本题答案为B选项。
15 [单选题] 下列关于栈叙述正确的是( )。
A.栈顶元素最先能被删除
B.栈顶元素最后才能被删除
C.栈底元素永远不能被删除
D.栈底元素最先被删除
参考答案:A
参考解析:
栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后被删除。所以选择A。
16 [单选题] 有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是( )。
A.自然连接
B.并
C.交
D.差
参考答案:D
参考解析:
关系T中的元组是关系R中有而关系S中没有的元组的集合,即从关系R中除去与关系S中相同元组后得到的关系T。所以做的是差运算。
17 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.0
B.4
C.1
D.9
参考答案:D
参考解析:
由程序可知,for循环中a的取值为0~6,其中若if条件满足,则b+=a不会执行,所以当a取值为1,3,5时,b+=a才会被执行,所以循环结束,b=1+3+5,输出结果为9,故答案选D。
18 [单选题] 以下能正确定义字符串的语句是( )。
参考答案:B
参考解析:
C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故C选项和D选项不属于字符串,A选项定义的是一个字符变量str,却用来存放字符串,显然也不正确,因此B选项正确。
19 [单选题] 软件生命周期中的活动不包括( )。
A.市场调研
B.需求分析
C.软件测试
D.软件维护
参考答案:A
参考解析:
软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段、需求分析、软件设计、软件实现、软件测试、运行和维护.所以选择A。
20 [单选题] 设文件指针fp已定义,执行语句fp=fopen(“file”,“w”);后,以下针对文本文件file操作叙述的选项中正确的是( )。
A.只能写不能读
B.写操作结束后可以从头开始读
C.可以在原有内容后追加写
D.可以随意渎和写
参考答案:A
参考解析:
考查文件操作函数fopen的基础知识,以”w”方式打开文件,只能写不能读。选项A正确。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
21 [单选题] 某二叉树共有399个结点,其中有199个度为2的结点,则该二叉树中的叶子结点数为( )。
A.不存在这样的二叉树
B.200
C.198
D.199
参考答案:B
参考解析:
根据二叉树的基本性质,对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中度为2的结点为199个,则叶子结点为199+1=200。故本题答案为B选项。
22 [单选题] 有以下程序段:
程序的输出结果是( )。
A.a=10 b=50 c=10
B.a=10 b=50 c=30
C.a=10 b=30 c=10
D.a=50 b=30 c=50
参考答案:A
参考解析:
形式为 “if(表达式)语句”的if作用到语句的第一个分号结束,所以本题中jf语句的作用范围为a=b,b=C;。由于if条件为false,所以这两条语句不执行,执行C=a语句,所以程序最终输出结果:10,50,10,答案为A。
23 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.Zhao,m,85,90
B.Qian,m,85,90
C.Zhao,f,95,92
D.Qian,f,95,92
参考答案:D
参考解析:
本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D正确。
24 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.ab
B.a*b
C.*****a*b
D.a*b****
参考答案:D
参考解析:
在函数fun(char*a,char*b)中,while(*a==‘*’)a++的功能是:如果*a的内容为‘*’,则a指针向后移动,直到遇到非‘*’字符为止,退出循环进入下个while循环,在while(*b=*a){b++;a++;}中,把字符数组a中的字符逐个赋给字符数组b。所以在主函数中,执行fun(s,t)语句后,字符数组t中的内容为“a*b****”。因此D选项正确。
25 [单选题] 下面不属于需求分析阶段任务的是( )。
A.确定软件系统的功能需求
B.确定软件系统的性能需求
C.需求规格说明书评审
D.制定软件集成测试计划
参考答案:D
参考解析:
需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择D。
26 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.10,64
B.10,10
C.64,10
D.64,64
参考答案:A
参考解析:
本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(a+1)=a+l*a+1*a+l=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。
27 [单选题] 定义学生、教师和课程的关系模式S(S#,Sn,Sd,De,SA)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);C(C#,Cn,P#)(其属性分别为课程号、课程名、先修课);SC(S#,C#,G)(其属性分别为学号、课程号和成绩),则该关系为( )。
A.第二范式
B.第一范式
C.第三范式
D.BCNF范式
参考答案:A
参考解析:
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce —Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 第一范式:主属性(主键)不为空且不重复,字段不可再分(存在非主属性对主属性的部分依赖)。
第二范式:如果关系模式是第一范式,每个非主属性都没有对主键的部分依赖。
第三范式:如果关系模式是第二范式,没有非主属性对主键的传递依赖和部分依赖。
BCNF范式:所有属性都不传递依赖于关系的任何候选键。
题目中关系模式满足第二范式,但在关系模式s中,学生所在系依赖于学号(S# →Sd),但系本身确定了系主任(Sd→Dc),存在传递依赖,不满足第三范式。故本题答案为A选项。
28 [单选题] 设一棵树的度为4,其中度为4,3,2,1的结点个数分别为2,3,3,0。则该棵树中的叶子结点数为( )。
A.16
B.15
C.17
D.不可能有这样的树
参考答案:A
参考解析:
根据题目,树的结点数=4×2+3×3+2×3+1×0+根结点=8+9+6+0+1=24,即总结点数为24,总结点数减去度不为0的结点数即是叶子结点,24-(2+3+3)=16。故本题答案为A选项。
29 [单选题] 下面结构体的定义语句中,错误的是( )。
参考答案:A
参考解析:
定义一个结构体的一般形式为: struct结构名{成员列表};
说明结构变量有3种方法:
1.先定义结构体,再说明结构变量
struet结构名
{成员列表};
struct结构名变量名1、变量名2;
故选项B正确。
2.在定义结构类型的同时说明结构变量
struct结构名
{
成员列表
{变量名列表;
故选项C正确。
3.直接说明结构变量
struct
}
成员列表
}变量名列表;
故选项D正确。
使用方法1定义结构体时,在右括号的后面不能省略分号,故选项A错误。
30 [单选题] 一棵二叉树共有25个结点,其中5个是叶子结点,则度为l的结点数为( )。
A.16
B.10
C.6
D.4
参考答案:A
参考解析:
根据二叉树的性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中度为2的结点是5-1=4个,所以度为l的结点的个数是25-5-4=16个。
31 [单选题] 在数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是( )。
A.人工管理阶段
B.文件系统阶段
C.文件系统阶段和数据库阶段
D.人工管理阶段和文件系统阶段
参考答案:A
参考解析:
数据库管理技术的三个阶段是人工管理阶段、文件系统阶段和数据库系统阶段。人工管理阶段没有专门的软件对数据进行管理。故本题答案为A选项。
32 [单选题] 若变量已正确定义,在if(W)prinff(”%d\n”,k);中,以下不可替代w的是( )。
A.a<>b+c
B.ch=getchar()
C.a=b+c
D.a++
参考答案:A
参考解析:
if语句中的判断条件是表达式,该表达式通常是逻辑表达式或关系表达式,也可以是算术表达式或赋值表达式,甚至是一个常量或变量,只要是语句合法的表达式即可,选项B是合法的赋值表达式,正确;选项C是关系表达式,正确;选项D都算术表达式,也是合法的表达式,正确;选项A中的符号<>不合法,故答案选A。
33 [单选题] 以下叙述错误的是( )。
A.若用户标识符的命名与预定义标识符相同,命名无效
B.若用户标识符的命名与关键字相同,将产生编译错误
C.若用户标识符的命名与预定义标识符相同,预定义标识符失去原有含义
D.若用户标识符的命名与预定义标识符相同,可能引发运行错误
参考答案:A
参考解析:
标识符分为关键字、预定义标识符、用户标识符,关键字不可以作为用户标识符,故选项B正确;预定义标识符可以作为用户标识符,原来的预定义标识符将会被用户标识符覆盖,预定义标识符的原意失效,故选项A错误,选项C正确;用户标识符与预定义标识符同名时,可能会导致运行错误,故选项D正确,因此答案为A。
34 [单选题] 有以下程序:
若运行时输入:246<回车>,则输出结果为( )。
A.246
B.200
C.240
D.204
参考答案:D
参考解析:
分析程序可知,main函数首先初始化一个3 X2的二维数组x,其中每个元素的初值为0,然后通过for循环,为x的行首元素重新赋值(x[i]为每行行首元素的地址),当输入2、4、6后,行首元素x[0][0]、x[1][0]、x[2][0]的值为2、4、6,所以输出为:2、0、4。故答案选D。
35 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.1,1,2,6,
B.6,2,1,1。
C.6,4,3,2,
D.2,3,4,6,
参考答案:C
参考解析:
首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作.程序最后通过for语句输出二维数组第1行的4个元素。因此C选项正确。
36 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.2,3
B.1,3
C.1,4
D.1.2
参考答案:B
参考解析:
在f(int*p,int*q)函数中,执行p=p+11是将p所对应的地址加1,而*q=*q+1是将q所指向的n1的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。因此B选项正确。
37 [单选题] 以下结构体类型说明和变量定义中正确的是( )。
参考答案:B
参考解析:
本题考查结构体的相关知识,选项A中struct REC后面不能有分号,C选项中typedef struct REC的后面也不能有分号,选项D中REC已经是结构体变量,不能当作结构体类型来使用。
38 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.1
B.2
C.3
D.4
参考答案:B
参考解析:
本题重点考察函数的递归调用;题目中给出的fun()函数直接调用了自身,所以是一个递归函数。其功能是:当参数b为0时,返回参数a的值,否则返回fun(--a,--b)的值。从这里可以看出,当b不断递减时,a也不断递减,直到b为0时返回a的值。那么a递减的总值就是b原来的值。所以整个递归函数的作用就是返回a-b的值。因此B选项正确。
39 [单选题] 有以下程序段:
当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为( )。
A.name=Lili num=1001
B.name=Lili
C.Lili num=
D.Lili
参考答案:D
参考解析:
在输入格式控制“name=%s num=%d”中,普通字符“name=num=”在输入时要原样输入,而格式控制符%s和%d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入“name=Lili num=1001<回车>”后,将字符串Lili赋给字符数组name,整数1001赋给变量num。因此D选项正确。
40 [单选题] 有以下程序:
程序运行后的输出结果是( )。
A.z
B.0
C.元素ch[5]的地址
D.字符y的地址
参考答案:A
参考解析:
语句pc=ch;使得指针变量指向字符数组ch的首地址,即指向字符‘u’。则pc+5指向的是字符向后移动5位,指向字符‘z’。所以输出的*pc+5的值即为‘z’。因此A选项正确。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
二、程序填空题(共18分)
41 [填空题]
下列给定程序中,函数fun的功能是:将形参n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。
例如,输入一个整数27638496,函数返回值为64862。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
参考解析:
(1)0 (2)10 * X
(3)n/10
【考点分析】
本题考查:已知某数,如何求该数各个位数值,已知各个位数值,如何表示该数;除法运算。
【解题思路】
填空1:定义变量l用来存放某数的各个位数值,此处判断t是否为偶数,即对2求余结果是否为O。
填空2:将t作为x的个位数,原来X的各个位上升l位,即x=10*x+1。
填空3:每循环一次,通过除法运算,去掉数值最后一位。
【解题宝典】
如果知道某数n的各个位的数值,可以得到该数值n,如n的个位为a、十位为b、百位为e,那么n=e*100+b*10+a。如果知道数值n,可以采用求余和除法操作来表示其各个位,
如n%10(取个位)、n/10(取十位),读者可以自己考虑一下,如果是三位数,如何提取各个位?四位数呢?
微信搜索"考试吧"了解更多考试资讯、下载备考资料
三、程序修改题(共18分)
42 [简答题]
下列给定程序中函数fun的功能是:从整数l0到55之间,查找能被3整除且有一位上的数值是5的数,把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定函数中al放个位数,a2放十位数。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构!
参考解析:
【参考答案】 (1)a2=k/10:
(2)return i;
【考点分析】
本题考查:取数值n的各个位;return语句,将需要返回的函数值返回给函数main。
【解题思路】
(1)a2存放十位数,所以是a2=k/10,此处是一个书写错误。
(2)根据题意,要返回能被3整除的数的个数,从循环体中可以知道其个数是由i来计算的,所以返回的是i。
微信搜索"考试吧"了解更多考试资讯、下载备考资料
四、程序设计题(共24分)
43 [简答题]
规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的。号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数二
例如,字符串中的内容为:“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是:“****ABCDEFG”。
注意:部分源程序在文件PROG1.C中。
清勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句
参考解析:
【参考答案】
程序设计题解析:
【考点分析】
本题考查:指针型变量定义:while循环语句;if语句条件
表达式;字符串结束标识‘\O’。
【解题思路】
函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1)定义一个临时指针p,初始指向原串首地址;(2)利用循环语句把字符串前导t号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符‘\O’。
【解题宝典】
要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。
微信搜索"考试吧"了解更多考试资讯、下载备考资料