全国计算机等级考试二级C语言真题题库2 2014年3月
(总分:43.00,做题时间:120分钟)
一、选择题(每小题1分,共40分)(总题数:40,分数:40.00)
1.下列叙述中正确的是( )。 (分数:1.00)
A.每一个节点有两个指针域的链表一定是非线性结构 B.所有节点的指针域都为非空的链表一定是非线性结构 C.循环链表是循环队列的链式存储结构 D.线性结构的存储节点也可以有多个指针 √
解析:[解析]一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有—个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。双向链表节点具有两个指针域,属于线性结构,故A选项错误。循环链表所有节点的指针域都为非空,属于线性结构,故B选项错误。循环链表是链表,循环队列属于队列,队列只能在队尾入队,在排头退队,链表可以在任何位置插入、删除,故C选项错误。双向链表节点具有多个指针域,故D选项正确。 2.使用白盒测试方法时,设计测试用例应根据( )。 (分数:1.00)
A.程序的内部逻辑 √ B.程序的复杂结构 C.程序的功能 D.使用说明书
解析:[解析]白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试,故A选项正确。
3.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗,则实体医生和患者之间的联系是( )。 (分数:1.00) A.多对多 √ B.多对一 C.一对多 D.一对一
解析:[解析]一般来说,实体集之间必须通过联系来建立连接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,故A选项正确。
4.设序列长度为n,在最坏情况下,时间复杂度为O(log2n)的算法是(  )。 (分数:1.00) A.二分法查找 √ B.顺序查找 C.分块查找 D.哈希查找
解析:[解析]对长度为n的线性表排序,最坏情况下时间复杂度,二分法查找为O(log2n);顺序查找法为O(n);分块查找时间复杂度与分块规则有关;哈希查找时间复杂度为O(1),因其通过计算HashCode来定位元素位置,所以只需一次即可。故正确答案为A选项。
5.设数据集合为D={1,3,5,7,9},D上的关系为R,下列数据结构B=(D,R)中为非线性结构的是( )。 (分数:1.00)
A.R={ (5,1),(7,9),(1,7),(9,3) } B.R={ (9,7),(1,3),(7,1),(3,5) } C.R={ (1,9),(9,7),(7,5),(5,3) } D.R={ (1,3),(3,5),(5,9) } √
解析:[解析]一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。A选项中,5为根节点,线性表为51793。B选项中,9为根节点,线性表为97135。C选项中,1为根节点,线性表为19753。D选项中,节点1与7都是根节点,属于非线性结构,故D选项正确。
6.深度为7的二叉树共有127个节点,则下列说法中错误的是( )。 (分数:1.00)
A.该二叉树有一个度为1的节点 √ B.该二叉树是满二叉树 C.该二叉树是完全二叉树 D.该二叉树有64个叶子节点
解析:[解析]在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。完全二叉树指除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少有边的若干节点。满二叉树指除最后一层外,每一层上的所有节点都有两个子节点的二叉树。深度为7的二叉树,前6层共有节点个数为2-1=63,则第7层有127-63=64个节点,即第7层节点数达到最大值,故此二叉树为满二叉树,也是完全二叉树,该二叉树没有度为1的节点,有64个叶子节点。故正确答案为A选项。 7.二叉树的中序序列为BDCA,后序序列为DCBA,则前序序列为( )。 (分数:1.00) A.DCBA B.BDCA C.ABCD √ D.BADC
解析:[解析]二叉树遍历可以分为3种:前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。本题中中序序列为BDCA,后序序列为DCBA,可知A为根节点,BDC为左侧节点,C是B右子节点,D是C右子节点,故前序序列为ABCD,C选项正确。 8.下面能作为软件需求分析工具的是( )。 (分数:1.00) A.PAD图 B.程序流程图 C.甘特图
D.数据流程图(DFD图) √
解析:[解析]软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类,前者常用工具为数据流图(DFD)、数据字典(DD)、判定表、判定树等。故D选项正确。选项B是软件功能实现时设计图。 9.下面不属于对象主要特征的是( )。 (分数:1.00) A.唯一性 B.多态性 C.可复用性 √ D.封装性
解析:[解析]对象的基本特点如下表所示。 10. 可知C选项正确。
6
(分数:1.00) A.(c,c,11,4) √ B.(e,e,6,1) C.(a,a,2,4)
D.(a,a,2,4)和(e,e,6,1)
解析:[解析]从关系中找出满足给定条件的元组的操作称为选择,“∧”为交运算,它由属于前者且属于后者的元组组成。题目为选出属于属性B,同时属性C大于4,并且属性D大于3的元组,结果为(c,c,11,4),应保留全部属性。故A选项正确。 11.C语言整数不包括( )。 (分数:1.00)
A.带小数点的整数 √ B.正整数 C.负整数 D.无符号整数
解析:[解析]C语言整数包括正整数、负整数、无符号整数、不含带小数点的整数,故答案为A选项。 12.设a,b,c是整型变量,且已正确赋初值,以下选项中错误的赋值语句是( )。 (分数:1.00) A.a=1%(b=c=2); B.a=(b=3)*c C.a=b=c/10 D.a=2=(b=9)=1 √
解析:[解析]D选项中,“()”具有最高优先级,b先赋值9,再根据赋值运算符号白右向左进行赋值,再给b赋值为1,再计算2=b,赋值运算符左边必须是一个变量,但数值2是常量,语法错误,故答案为D选项。
13.以下选项中,合法的实数是( )。 (分数:1.00) A.1.5E2 √ B.E1.1 C.2.10E D.1.9E1.4
解析:[解析]E表示“10的幂次”,E的右侧必须是整数,排除B、C、D选项、答案为A选项。 14.关于程序设计基本概念,以下叙述错误的是( )。 (分数:1.00)
A.计算机可以直接执行由任意高级语言编写的程序 √ B.高级语言都有与之对应的编译程序或解释程序 C.用任何一种计算机高级语言都可以把算法转换为程序 D.结构化算法可以解决任何复杂的问题
解析:[解析]计算机只能识别机器语言,不能直接识别由高级语言编写的程序,故答案为A选项。 15.以下不能用于实型数据的运算符是( )。 (分数:1.00) A.% √ B./ C.* D.+
解析:[解析]“%”符号两边必须是整数,因此答案为A选项。 16.C语言中,最基本的数据类型包括( )。 (分数:1.00)
A.整型、实型、逻辑型 B.整型、字符型、数组 C.整型、实型、字符型 √ D.整型、实型、结构体
解析:[解析]C语言中,最基本的数据类型包括整型、实型、字符型,答案为C选项。
17.若有定义:int=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++)?c++:d++,以下关于其执行顺序的叙述正确是( )。 (分数:1.00)
A.先执行a++,表达式a++的值为0,短路,得a++,执行它 √
B.先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++
C.先执行a++,表达式a++的值为1;再执行b++,表达式b++的值为1,由此可确定(a++&&b++)值为1,由此可确定(a++&&b++)值为1,因此执行c++
D.先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++
解析:[解析]表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循“短路求值”策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++,答案为A选项。 18.有以下程序: (分数:1.00) A.123 √ B.ABC C.abc D.012
解析:[解析]当满足ch<'E',输出ch-'A',即字符在ASCII码相减进行输出,%d表示输出十进制整数。循环开始,ch=’B’,print(“%d”,ch-'A')=1,以此类推,答案为A选项。 19.以下关于指针的叙述,错误的是( )。 (分数:1.00)
A.两个基类型相同的指针变量不能指向同一个对象 √ B.可以通过对指针变量自增、自减来移动指针 C.只有两个类型相同的指针才能进行减运算
D.一个指针变量可以通过不同的方式获得一个确定的地址值
解析:[解析]只要两个指针变量基类型相同,可以指向同一个对象,故答案为A选项。 20.对于函数声明: void fun(float array[],int *ptr); 以下叙述正确的是( )。 (分数:1.00)
A.调用函数时,array数组的元素和Ptr都是按值传送 B.函数声明有语法错误,参数array缺少数组大小定义 C.调用函数时,array数组中将存储从实参中复制来的元素值 D.函数参数array,ptr都是指针变量 √
解析:[解析]void fun(float array[],int *ptr)定义了2个形参:array[]和*ptr,其中函数形参中int array[]其实相当于int *array,答案为D选项。 21.有以下程序: (分数:1.00) A.1,0,2,0,0,9 √ B.1,2,4,9,6,0 C.2,9,0,0,1,4 D.1,2,0,1,4,1
解析:[解析]本题定义一个4行2列数组,其中赋值6个数,其余自动为0,根据for循环,第一次输出第一列前三行数,分别是1,0,2;第二次输出第二列前三行数,分别是0,0,9,因此答案为A选项。 22.要求定义一个具有6个元素的int型一维数组,以下选项中错误的是( )。 (分数:1.00)
程序运行后的输出结果是( ) 程序运行后的输出结果是( )。
A.int N=6,a[N]; √ B.int a[2*3] ={0}; C.#define N 3 int a[N=N];
D.int a[] = {1,2,3,4,5,6};
解析:[解析]数组名后面括号内,必须是整型常量,不可以是变量,A选项定义错误,答案为A选项。 23.有以下程序: (分数:1.00)
A.Peachflower is pink. √ B.Peachfloweris Pink. C.Peachflowerispink. D.Peach flower is pink.
解析:[解析]由于用“%s”格式输出字符串时,是以空格作为间隔符,因此,输入给b[0]=“Peach”,b[1]=“flower”,而while语句给c赋值时,getchar()能识别空格符,b[2]=“is Pink”,答案为A选项。
24.有以下程序: (分数:1.00) A.agmrw B.ekpuy √ C.djotx D.flqvz
解析:[解析]在for循环中,执行完while语句后,j值为每行字符串的长度,此时a[i][j-1]为字符串数组每个元素的最后一个字符,a[i][j-2]为倒数第二个字符。因此w[i]=a[i][j—2],比如i=0;j=6,则w[0]=a[0][4]=’e’,循环依次赋值,最后输出’y’,答案为B选项。 25.有以下程序: (分数:1.00) A.9,7,4,7 √ B.8,6,9,6 C.8,6,3,6 D.10,8,5,8
解析:[解析]由于name是一个长度为9的一维数组,故在内存中占用9字节长度,而其中字符串“c##line”只有7个字符,strlen()函数返回的是该字符串的长度,不包含结束符,str是一个指针变量,占用4字节长度,但是由于name首地址赋给了str指针变量,在调用strlen()函数时,返回的是指针对应地址单元的字符串的长度7,因此答案为A选项。 26.有以下程序: (分数:1.00) A.#y#k#p#f √ B.#wi#nd# C.xj#oe D.#2222#
解析:[解析]首先定义了—个指针P指向数组的首地址,在while语句中,执行功能是如果当前指针指向地址单元内字符不等于空字符’\0’,则输'#'和指针对应地址元素的值在ASCII码加2后变换的字符常量,因此,答案为A选项。
27.若有定义:char*ps[]={“aa”,“bb”,“cc”,“dd“};,则以下叙述正确的是( )。 (分数:1.00)
程序运行时,从键盘输入2,输出结果是( )。 程序运行后的输出结果是( )。 程序运行后的输出结果是( )。
执行时若输入以下字符串: Peach flower is Pink.<回车> 则输出结果是( )。