1、国家二级( C+)笔试模拟试卷 96及答案与解析 1 最简单的交换排序方法是 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 2 栈通常采用的两种存储结构是 ( A)线性存储结构和链表存储结构 ( B)散列方式和索引方式 ( C)链表存储结构和数组 ( D)线性存储结构和非线性存储结构 3 线性表的顺序存储结构和线性表的链式存储结构分别是 ( A)顺序存取的存储结构、顺序存取的存储结构 ( B)随机存取的存储结构、顺序存取的存储结构 ( C)随机存取的存储结构、随机存取的存储 结构 ( D)任意存取的存储结构、任意存取的存储结构 4 完全不考虑程序的内部结构和内部特征,而
2、只是根据程序功能导出测试用例的测试方法是 ( A)黑箱测试法 ( B)白箱测试法 ( C)错误推测法 ( D)安装测试法 5 在结构化设计方法中,生成的结构图 (SC)中,带有箭头的连线表示 ( A)模块之间的调用关系 ( B)程序的组成成分 ( C)控制程序的执行顺序 ( D)数据的流向 6 下列选项中,不属于模块间耦合的是 ( A)数据耦合 ( B)同构耦合 ( C)异构耦合 ( D)公用耦合 7 一个关系中属性个数为 1时,称此关系为 ( A)对应关系 ( B)单一关系 ( C)一元关系 ( D)二元关系 8 为用户与数据库系统提供接口的语言是 ( A)高级语言 ( B)数据描述语言 (
3、DDL) ( C)数据操纵语言 (DML) ( D)汇编语言 9 相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和 ( A)可重用性差 ( B)安全性差 ( C)非持久性 ( D)冗余性 10 需求分析阶段的任务是确定 ( A)软件开发方法 ( B)软件开发工具 ( C)软件开发费用 ( D)软件系统功能 11 以下都是 C+语言标识符的是 ( A) dsfa, df4, f$ ( B) huhj, a, k2 ( C) 3k, h, j_9 ( D) _ok, jk, k8 12 C+语言中用于定义类的关键字是 ( A) class ( B) struct ( C) defa
4、ult ( D) sizeof 13 设以下变量均为 int类型,则值不等于 7的表达式是 ( A) (x=y=6, x+y, X+1) ( B) (x=y=6, x+y, y+1) ( C) (x=6, x+1, y=6, x+y) ( D) (y=6, y+1, x+y, x+1) 14 以下程序的输出结果是 #include iostream h void main( ) int a=21, b=11; cout - -a+b; ( A) 30 ( B) 31 ( C) 32 ( D) 33 15 while和 do-while循环的主要区别是 ( A) do-while的循环体至少无条
5、件执行一次 ( B) while的循环控制条件比 do-while的循环控制条件更严格 ( C) do-while允许从外部转到循环体内 ( D) do-while的 循环体不能是复合语句 16 与 y=(x 0? 1: x 0? -1: 0);的功能相同的 if语句是 ( A) if(x 0)y=1 else if(x 0)y=-1; else y=O; ( B) if(x) if(x 0)y=1; else if(x 0)y=-1; ( C) y=-1; if(x) if(x 0)y=1; else if(x =0)y=0; else y=-1; ( D) y=0; if(x =0) if
6、(x 0)y=1; else y=-1; 17 若二维数组 a有 m列,则计算任一元素 a i j 在数组中相对位置的公式为 (假设 a0)0位于数组的第一个位置上 ) ( A) i*m+j ( B) j*m+i ( C) i*m+j-1 ( D) i*m+j+1 18 下面程序段的运行结果是 #include iostream h void main( ) char*s=“abcde“; S+=2; cout void main( ) int a=10, b=20; cout a “ “ b; swap(i 1; i-) for(j=0; j i; j+) ( A) 20 ( B) 261
7、( C) 15 ( D) 25 34 对于下面的程序,说法正确的是 #include iostream h void main( ) int x=3, y=4, z=2; if(X=y+z) cout “x=y+Z“; else cout “x!=y+Z“; ( A)不能通过编译 ( B)输出 6 ( C)输出 x! =y+z ( D)输出 x=y+z 35 下列程序的输出结果是 #include iostream h void main( ) int a3, i, j, k=2; for(i=0;i 3; i+)ai=i; for(i=0; ik; i+) for(j=0; j k; j+)
8、 aj=ai; couta2; ( A) 2 ( B) 3 ( C) 1 ( D) 0 36 冒泡排序算法在最好的情况下的元素交换次数为【 】。 37 在 最坏情况下,堆排序需要比较的次数为【 】。 38 若串 s=“MathTypes“,则其子串的数目是【 】。 39 软件开发环境是全面支持软件开发全过程的【 】集合。 40 关系数据库的关系演算语言是以【 】为基础的 DML语言。 41 一个 C+语言程序的开发步骤通常包括编辑、【 】、链接、运行和调试。 42 若已知 a=10, b=20,则表达式! a b的值为【 】。 43 友元类的所有成员函数都是另一个类的【 】。 44 表达式 x
9、.operator+( )还可写成【 】。 45 以下程序的输出结果是 【 】 。 #include iostream.h void main( ) int a=0; a+= ( a=8 ); cout a; 46 若要在 C盘根目录下作为二进制文件打开文件 test.dat ,则应该用的语句是【 】。 47 下面程序的运行结果是 【 】 和 【 】 。 #include iostream.h #define N 10 #define s( x ) x*x #define f( x ) ( x*x ) void main( ) int i1,i2; i1=1000/s(N);i2=1000/f
10、(N); cout i 1 “ “ i2; 48 【 】是实现 C+语言编译时多态性的机制,【 】是实现 C+语言运行时多态性的机制。 国家二级( C+)笔试模拟试卷 96答案与解析 1 【正确答案】 D 【试题解析】 冒泡排序是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。注意:交换排序方法有冒泡排序和快速排序,显然选项 B)和选项 C)错误,冒泡排序比较简单,其算法也容易理解,但快速排序本身较为复杂,且采用了递归调用,其算法理解也稍难。注意:插入排序、选择排序、归并排序、基数排序等排序方法的特点。 2 【正确答案】 A 【试题解析】 和线性表类似,栈也有两种存
11、储方法,一是顺序栈,二是链式栈。栈 的顺序存储结构是利用一组地址连续的存储单元一次存储自栈底到栈顶的数据元素,同时附设指针 top 指示栈顶元素的位置,由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。注意:这 3种运算方法在各种存储结构中的应用。 3 【正确答案】 B 【试题解析】 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式 LOC(ai): LOC(all)+(i-l)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存 取的存储结构。注意:顺序存储结构和链式存储结构的定
12、义和性质,两种存储结构的操作方法。 4 【正确答案】 A 【试题解析】 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据功能导出测试用例。注意:白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试也称为逻辑覆盖测试,故选项 B)不正确;错误推测法只是黑箱测试所使用的一种具体的方法,故选项 C)不正确;安装测试是测试层次中的一种,它属于高级测试,故选项 D)不正确。注意:常用的黑箱测试方法及其定义,白箱测试用例的准则。 5 【正确 答案】 A 【试题解析】 常用的软件结构设计工具是结构图 (SC-Structure Chart),也称程序结构图。其中,矩形内用于注明模块的功能
13、和名字;箭头表示模块间的调用关系,带实心圆的箭头表示传递的是控制信息,带空心圆的箭头表示传递的是数据。注意:根据结构图设计思想,了解结构图构成的基本形式。 6 【正确答案】 C 【试题解析】 模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从弱到强,可以将其分成 5级,分别是:数据耦合、同构耦合、控制耦合、公用耦合和内容 耦合。选项 C),没有这种耦合方式。注意:评价模块独立性的主要标准,以及对它们的定义和分类。 7 【正确答案】 C 【试题解析】 在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有 N个属性的关系称为 N元关系
14、。注意:各种关系查询语言与过程性语言和非过程性语言的关系,过程性语言的特点。 8 【正确答案】 C 【试题解析】 DBMS 提供数据操纵语言 (DML)实现对数据库中数据的操作,数据操纵语言 (DML)是用户 (包括应用程序 )与数据库系统的接口。数据操纵语言通常 包括检索和更新功能。注意:程序模块中语言处理部分的分类,各子类的定义及其功能。 9 【正确答案】 D 【试题解析】 文件系统所管理的数据文件基本上是分散的、相互独立的,因此相对于数据库系统,以此为基础的数据处理存在 3个缺点,数据冗余大、数据的不一致性、程序与数据的相互依赖 (简称为数据依赖 )。注意:文件系统和数据库系统各自的特点
15、,人工管理阶段及数据库系统三代的特点。 10 【正确答案】 D 【试题解析】 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象 (组 织、部门、企业等 ),充分厂解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。注意:选项 A)软件开发方法是在总体设计阶段完成的任务;选项 B)软件开发工具是在实现阶段需完成的任务;选项 C)软件开发费用是在可行性研究阶段需完成的任务。注意:需求分析的任务和它的 6种方法。 11 【正确答案】 D 【试题解析】 C+语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为开头。 12 【正确答案】
16、A 【试题解析】 C+中类定义的关键字是 class。 class 不能 大写。 13 【正确答案】 C 【试题解析】 C+语言中逗号 “, ”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式 1,表达式 2,其求值过程是分别求两个表达式的值,并以表达式 2的值作为整个逗号表达式的值。逗号表达式的一般形式可以扩展为:表达式 1,表达式 2,表达式 3, ,表达式 n,它的值为表达式 n 的值。 14 【正确答案】 B 【试题解析】 自减运算符位于变量之前时,先使变量的值减 1,再进行运算。 15 【正确答案】 A 【试题解析】 w
17、hile是先判断条件再执行语句; do-while则是先执行一次语句再判断条件,从而决定是否继续再执行循环体中的语句,这正是二者主要区别。 16 【正确答案】 A 【试题解析】 条件运算符要求有三个操作对象,它是 c+语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式 1?表达式 2:表达式 3,先求解表达式 1,若为非 0(真 )则求解表达式 2,此时表达式 2的值就作为整个条件表达式的值。若表达式 1的值为 0(假 ),则求解表达式 3,表达式 3的值就是整个条件表达式的值。本题中用了两次三 目运算符。 17 【正确答案】 A 【试题解析】 oij元素之前有 i行元素 (每行有 m
18、个元素 ),在 aij的前面还有j个元素,因此 aij之前共有 i * m+j个元素。 18 【正确答案】 C 【试题解析】 对于字符串指针,其保留的是整个串的首地址,即为第一个字符的起始地址,当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。 19 【正确答案】 D 【试题解析】 C+语言中如果基类的成员是公有的,它被继承后在子类中该成员可能是公有的,也可能不 是,主要看继承的权限。 20 【正确答案】 D 【试题解析】 本题应该把 swap( )函数改成这样: swap(int * P, int * q)int t ; t= * p; * p=*q; *q=t; 执行程序时
19、,先将 a的地址传递给指针变量 p, b 的地址传递给指针变量 q,然后将 *p(a的值 )的值传递给 t,将 *q(b的值 )传递给 * p,将 t的值传递给 * q,从而将 a值和 b值互换。 21 【正确答案】 D 【试题解析】 C+中的友元可以在一个类中的任何位置声明,不一定必须在公有段,友元没 有自己的 this 指针,调用友元函数时必须在它的实参中给出要访问的对象,并且一个类的成员函数是可以作为另一个类的友元函数的。 22 【正确答案】 D 【试题解析】 C+语言中的抽象类就是类中至少有一个纯虚函数的类,抽象类不能被实例化,继承抽象类的类必须实现抽象类中的纯虚函数。 23 【正确答
20、案】 A 【试题解析】 C+语言中析构函数是在程序退出不用该类的对象时进行调用。 24 【正确答案】 B 【试题解析】 C+语言中用成员函数重载 -x为: x operator-( ), 用成员函数重载 x+y为: x operator+(y)。 25 【正确答案】 D 【试题解析】 C+语言中打开文件有两种方式 ifstream fin(“test dar“, ) if stream fin; fin open(“test dat“, );。 26 【正确答案】 B 【试题解析】 C+中纯虚函数的定义与虚函数的关键字一样,在函数末尾要加上“=0”。 27 【正确答案】 A 【试题解析】 首先
21、,当 i=0时,数组中的位置是 a00=1,当然,如果用排除法的话,就不 用考虑后面的循环了,因为在 4个选项中,第 1个数为 1的选项只有A)。本题执行第 2次循环时, i的值为 1,则 cout函数中的数组指向为 a11=5,依次循环,可求出答案。 28 【正确答案】 D 【试题解析】 派生类继承基类的方式有 3种: public, private和 protected,常用的是 public。 29 【正确答案】 A 【试题解析】 本题是一道简单的成员函数应用题,考生只要按着主函数中生成的类 Rectangle的对象 r1 进行成员函数的调用即可得到答案。 30 【正确答案 】 B 【试
22、题解析】 在内存中,字符数据以 ASCII码存储,它的存储形式就与整数的存储形式相类似。 C+语言使字符型数据和整型数据之间可以通用。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII码进行算术运算,在本题中, s+相当于 s=s +1,即让 s指向数组中的下一个元素。 31 【正确答案】 D 【试题解析】 解答本题时,先判断 if语句,因为 a=b+c为零,则执行 else语句。 32 【正确答案】 A 【试题解析】 选项 B)中 a在运算前未赋初值,在 C+语言里变量在运算 前必须赋初值;选项 C)中的模运算符 “ ”两侧均应为整型数据;选项 D)应改为y=(float)i。 3
23、3 【正确答案】 A 【试题解析】 本题中第 1个 for循环执行 5次后结束,第 2个 for循环执行 5次。第 2个 for循环中第 1次执行了 6次,第 2次执行了 5次,第 3次执行了 4次,第 4次执行了 3次,第 5次执行了 2次,共 20次。 34 【正确答案】 D 【试题解析】 解答本题关键是要理解 if 后面的括号里的是赋值语句而并非关系判断,赋完值后 x不等于零, C+语言里非零都作真处理,所以输出结果为“x=y+z”,故答案为选项 D),注意 “=”与 “=”的区别。 35 【正确答案】 A 【试题解析】 本题里有三个 for循环,但要分清楚,第一个是单独的给三个元素赋值
24、,赋完值后三个 a0=0, a1=1, a2=2;后面的两个 for是嵌套循环,对数组元素的赋值,但由于 k=2,初值已定 for里的条件是小于 k,所以不管怎么处理都影响不到 a 2,故答案为 2。 36 【正确答案】 0 【试题解析】 根据冒泡排序算法思想可知,若待排序的初始序列为 “正序 ”序列,则只需进行一趟排序,在排序过程中 进行 n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为 0。 37 【正确答案】 O(nlog2n) 【试题解析】 在最坏情况下,冒泡排序所需要的比较次数为 n(n-1)/2;简单插入排序所需
25、要的比较次数为 n(n -1)/2;希尔排序所需要的比较次数为 O(nl.5);堆排序所需要的比较次数为 O(nlog2n)。 38 【正确答案】 46 【试题解析】 串 s中共有 9个字符,由于串中字符各不相同,则其子串中有 0个字符的 1个 (空串 ), 1个字符的 9个, 2个字符的 8个, 3个字符的 7个, 4个字符的 6个, 5个字符的 5个, 6个字符的 4个, 7个字符的 3个, 8个字符的 2个, 9个字符的 1个,共有 1+2+3+4+5+6+7 +8+9+1=46。 39 【正确答案】 软件工具 40 【正确答案】 谓词演算 【试题解析】 关系数据库中的关系演算包括元组关
26、系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。 41 【正确答案】 编译 【试题解析】 C+语言程序开发的基本步骤是编辑、编译、链 接、运行和调试。 42 【正确答案】 1 【试题解析】 计算表达式 !a b,先计算 !a,因 a的值为 10, !a的值为 0。关系表达式 0 20为真,所以表达式 !a b 的值为 1。 43 【正确答案】 友元函数 【试题解析】 C+语言中友元类中的函数都是另一个类的友元函数。 44 【正确答案】 +x 【试题解析】 C+语言中用成员函数重载 +x为 x.operator+()用友元函数重载+x为: op
27、erator+(x) 45 【正确答案】 16 【试题解析】 解答本 题的关键是要分析清楚表达式 a+= (a=8)中, a的值已经被赋为 8,而不是 0。 46 【正确答案】 ifstream fin(“C: test dat“, ios_binary);或 ifstream fin;fin open(c: test dat“, ios_binary); 【试题解析】 C+中打开文件有两种方式 ifstream fin (“test.dat“); ifstream fin; fin open(“test.dat“);, ios_binary的意义是以二进制文件打开。 fin open(“test.dat“);, ios_binary的意义是以二进制文件打开。 47 【正确答案】 1000 10 【试题解析】 对于 define宏定义语句,系统会在编译前进行替换。本题替换过程如下: il=1000/s(N) il=1000/s(10) il=1000/10*10 il=1000 i2=1000/f(N) i2=1000/f(10) i2=1000/(10*10) i2=10 48 【正确答案】 静态联编或静态绑定 动态联编或动态绑定 【试题解析】 C+语言编译时多态性的机制是静态绑定,实现 C+语言运行时多态性的机制是动态绑定。