1、国家二级( C+)笔试模拟试卷 59及答案与解析 1 假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为 ( A) log2n ( B) n2 ( C) O(n1.5) ( D) n(n 1)/2 2 算法分析的目的是 ( A)找出数据结构的合理性 ( B)找出算法中输入和输出之间的关系 ( C)分析算法的易懂性和可靠性 ( D)分析算法的效率以求改进 3 线性表 L=(a1, a2, a3, ai , an) ,下列说法正确的是 ( A)每个元素都有一个直接前件和直接后件 ( B)线性表中至少要有一个 元素 ( C)表中诸元素的排列顺序必须是由小到大或由大到小 ( D)除第一个
2、元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 4 在单链表中,增加头结点的目的是 ( A)方便运算的实现 ( B)使单链表至少有一个结点 ( C)标识表结点中首结点的位置 ( D)说明单链表是线性表的链式存储实现 5 软件工程的出现是由于 ( A)程序设计方法学的影响 ( B)软件产业化的需要 ( C)软件危机的出现 ( D)计算机的发展 6 软件开发离不开系统环境资源的支持,其中必要的测试数据 属于 ( A)硬件资源 ( B)通信资源 ( C)支持软件 ( D)辅助资源 7 在数据流图 (DFD)中,带有名字的箭头表示 ( A)模块之间的调用关系 ( B)程序的组成
3、成分 ( C)控制程序的执行顺序 ( D)数据的流向 8 分布式数据库系统不具有的特点是 ( A)数据分布性和逻辑整体性 ( B)位置透明性和复制透明性 ( C)分布性 ( D)数据冗余 9 关系表中的每一横行称为一个 ( A)元组 ( B)字段 ( C)属性 ( D)码 10 下列数据模型中,具有坚实理论基础的是 ( A)层次模型 ( B)网状模型 ( C)关系模型 ( D)以上 3个都是 11 C+语言中标点符号中表示一条预处理命令开始的是 ( A) # ( B); ( C) * ( D) 12 每个 C+程序中都必须有且仅有一个 ( A)类 ( B)预处理命令 ( C)主函数 ( D)语
4、句 13 sizeof(float)是 ( A)一个双精度型表达式 ( B)一个整型表达式 ( C)一种函数调用 ( D)一个不合法的表达式 14 设有 int x=11;,则表达式 (x+*2/3)的值是 ( A) 7 ( B) 8 ( C) 11 ( D) 12 15 设有程序段 int k=10; while(k=0)k=k-1; 则下面描述中正确的是 ( A)循环执行 10次 ( B)无限循环 ( C)循环体语句一次也不执行 ( D)循环体语句执行一次 16 对表达式 for(表达式 1;表达式 3)可理解为 ( A) for(表达式 1;0;表达式 3) ( B) for(表达式 1
5、; 1;表达式 3) ( C) for(表达式 1;表达式 3; ) ( D) for(;表达式 3) 17 以下不正确的定义浯句是 ( A) double x5=2.0, 4.0, 6.0, 8.0, 10.0; ( B) int y5=0, 1, 3, 5, 7, 9; ( C) char c1=1, 2, 3, 4, 5; ( D) char c2=x10, xa, x8; 18 有如下说明 int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p=a;则数值为 9的表达式是 ( A) *p+9 ( B) *(p+8) ( C) *p+=9 ( D) p+8 1
6、9 下列函数的运行结果是 #include iostream h int f(int a, int b) int c; if(a b)c=1; else if(a=b)C=0; else c=-1; return(c); void main() int i=2, j=3; int p=f(i, j); cout p; ( A) -1 ( B) 1 ( C) 2 ( D)编译出错,无法运行 20 以下对 C+语言函数的有关描述中,正确的是 ( A) 在 C+语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参 ( B) C+语言函数既可以嵌套定义又可以递归调用 ( C)函数必须无返回
7、值,否则不能使用函数 ( D)函数必须有返回值,返回值类型不定 21 关于静态数据成员的描述中正确的是 ( A)类的静态数据成员不是类的所有对象共享的数据 ( B)类的静态数据成员不能被类的成员函数调用 ( C)类的静态数据成员不能被类的构造函数调用 ( D)类的静态数据成员必须进行初始化 22 拷贝构造函数的参数一般是 ( A)某对象名 ( B)某对象 成员名 ( C)某对象的引用名 ( D)指向对象的指针名 23 下表正确的是 在父类中的访问属性 访问修饰符 在子类中的访问属性 ( A) public private 不能直接访问 ( B) protect public public (
8、C) private public 不能直接访问 ( D) protect Pnvate protect 24 下面这个程序的结果是 #include iostream h class A private: int a; public: void seta(); int geta(); ; void A seta() a=1; int A geta() return a; class B pnvate: int a; publiC: void sera(); int geta(); ; void B seta() a = 2; int B geta() return a; class C: p
9、ublic A, public B private: int b; public: void display(); ; void C display() int b=geta(); cout b; void main() C c; c seta(); c display(); ( A) 1 ( B) 2 ( C)随机输出 1或 2 ( D)程序有错 25 下列运算符中全都可以被友元函数重载的是 ( A) =, +, -, ( B) , +, (), new ( C) - , + , * , ( D) , , + , * 26 对于模板定义关键字 class和 typename说法不正确的是 (
10、 A)程序中的 class并不能都替换为 typename ( B) class和 typename都可互相替换 ( C)程序中的 typename都能替换为 class ( D)程序中的部分 class可以替换为 typename 27 对于下面的程序 ifstream fin(C: test tXt); if(fin) cout “ok“; else cout “wrong“; 对于 if语句中的内容可以换为 ( A) fin fail() ; ( B) fin bad() ; ( C) fin, good() ; ( D) fin eof(); 28 以下程序的输出结果是 #includ
11、e iostream h long fun(int n) long s; if (n 1|n=2)s=2; else s=n-fun(n-1); return s; void main() coutfun(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 29 不合法的 main函数命令行参数表示形式是 ( A) main(inta, char*c) ( B) main(int arc, char * * arv) ( C) main(int argc, char * argv) ( D) main(int argv, char * argc) 30 有如下程序 #include
12、 iostream h void main() charch 25=“6937“,“8254“, *p2; int i, j, s=0; for(i=0;i 2; i+)pi=chi; for(i=0; 2;i+) for(j=0; pij 0; j+=2) s=10*s+pij-0; cout s; 该程序的输出结果是 ( A) 69825 ( B) 63825 ( C) 6385 ( D) 693825 31 下面叙述不正确的是 ( A)基类的保护成员在派生类中仍然是保护的成员 ( B)基类的保护成员在公有派生类中仍然是保护的 ( C)基类的保护成员在私有派生类中仍然是私有的 ( D)对基
13、类成员的访问必须是无二义性 32 以下程序的输出结果是 #include iostream h void main() char x=040; cout (x 1); ( A) 100 ( B) 80 ( C) 64 ( D) 32 33 下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,在划线处应填入的选项是 #include iosweam h void main() int a, b, t; cin a b; while(_) if(a b) t=a; a=b;b=t; cout a “ “ b endl; cin a b; ( A) ! a=b ( B
14、) a!=b ( C) a=b ( D) a=b 34 对以下说明语句的正确理解是 int a10=6, 7, 8, 9, 10; ( A)将 5个初值依次赋给 al至 a5 ( B)将 5个初值依次赋给 a0至 a4 ( C)将 5个初值依次赋给 a6至 al0 ( D)因为数组长度与初值的个数不相同,所以此语句不正确 35 类 A是类 B的友元,类 B是类 C的友元,则下列说法正确 的是 ( A)类 B是类 A的友元 ( B)类 C是类 A的友元 ( C)类 A是类 C的友元 ( D)以上都不对 36 fstream、 ifstream和 ofstream文件流类的成员函数 _关闭文件。
15、37 以下程序的执行结果是 _。 #include iostream.h #include iomanip.h voidmain() cout.fill(*); cout.width(10); cout setiosflags(ios:left) 123.45 endl; cout.width(8); cout “123.45“ endl; cout.width(4); cout “123.45“ endl; 38 数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和 _两个含义。 39 以下程序的执行结果是 _。 #include iostream.h class base pub
16、lic: virtual void who()cout “base class“ endl: ; class derrvel:public base public: void who()cout “derivel class“ endl: ; class derive2; public base public: void who() cout “derive2 class“ endl; ; void main() base obj1, *P; derive1 obj2; derive2 obj3: p= for(i=0; _!=0; i+); return(i); 41 有如下的类模板定义:
17、template typenameTYPE classMyClass TYPE n; public: MyClass(TYPE k); ; 其中构造函数 MyClass用的值初始化数据成员 n。因此在模板类体外,构造函数MyClass应定义 _。 42 以下程序的执行结果是 _。 #include iostream.h #include iomanip.h void main() cout.fi1(*); cout.width(10); cout setiosflags(ios:hex) 160 endl; cout.width(8); cout 160 endl; cout.width(4)
18、; cout 160 endl; 43 如果一个类中定义了成员对象,则该类的对象和成员对象先被初始化的是_。 44 流操 作子 _可跳过输入流中的前导空白字符。 45 以下程序的执行结果是 _。 #include iostream.h #include fstream.h #include stdlib.h void main() char ch; fstream file; file.open(“abc. dar“, ios:out|ios: in|ios:binary): if(! file) cout “abc.dat文件不能打开 “ endl; abort() ; file “12 3
19、4 56“ endl; file.seekg(o,ios:beg): while(!file.eof() streampos here=file.tellg(); file.get(ch); if(ch= ) cout here “ “; cout endl: 46 _是 C+语言程序的人口。 47 派生类构造函数的执行顺序是先执行【 】的构造函数,然后执行成员对象的构造函数,最后执行【 】的构造函数。 48 已知程序的结果为 1 2 3,请填空。 #include iostream h template class T class A public: T x, y, z; void disp
20、lay() cout x “ “ y “ “ z; ; void main() A int a1; 【 】 【 】 【 】 a1 display(); 国家二级( C+)笔试模拟试卷 59答案与解析 1 【正确答案】 D 【试题解析】 假设线性表的长度为 n,则在最 坏情况下,冒泡排序要经过 n/2遍的从前往后的扫描和 n/2遍的从后往前的扫描,需要的比较次数为 n(n- 1)/2。 2 【正确答案】 D 【试题解析】 算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的
21、执行效率。 3 【正确答案】 D 【试题解析】 线性表可以为主表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。 4 【正确答案】 A 【试题解析】 头结点不仅标识了表中首结点的位置,而且根据单链表 (包含头结点 )的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。 5 【正确答案】 C 【试题解析】 软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向了程科学的途径,逐步形成了软件工程的概念。 6 【正确答案】 D 【试题解析】 软件测试过程中,
22、辅助资源包括测试用例 (测试数据 )、测试计划、出错统 计和最终分析报告等。 7 【正确答案】 D 【试题解析】 数据流相当于一条管道,并有一级数据 (信息 )流经它。在数据流图中,用标有名字的箭头表示数据流。数据流可以从加工流向加工,也可以从加下流向文件或从文件流向加工,并且可以从外部实体流向系统或从系统流向外部实体。 8 【正确答案】 D 【试题解析】 分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是 一对多,即一个片段分配到多个场地存放,则是冗余
23、的数据库,否则是非冗余的数据库。 9 【正确答案】 A 【试题解析】 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为表中的一个属性,对应表中的一个字段;在二维表中儿能惟一标识元组的最小属性集称为该表的键或码。 10 【正确答案】 C 【试题解析】 关系模型较之格式化模型 (网状模型和层次模型 )有以下方面的优点,即数据结构比较简单、具有很高的数据独立性、可以盲接处理多对多的联系,以及有坚实的理论基础。 11 【正确答案】 A 【试题解析】 C+语言中预处理语句的开始符号是 #。 12 【正确答案】 C 【试题解析】 每个 C+程序中都要有且仅有一个主函数,该函数是程序的人口,而语
24、句、预处理命令和函数及类在程序中都可以有多个。 13 【正确答案】 B 【试题解析】 该函数用于数据类型和变量。注意: sizeof操作符不能用 于函数,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、 void类型等。 14 【正确答案】 A 【试题解析】 当自加运算符做后缀表达式的时 候,表达式的值不变,只有变量的值增 1,所以表达式 (x+*2/3)相当于 (11*2/3)取整后为 7。 15 【正确答案】 C 【试题解析】 本题中,首先将 0赋给 k,表达式变为 0,跳出循环,没有执行循环体语句。解答本题的关键是掌握 while语句。 16 【正确
25、答案】 B 【试题解析】 本题中,若要保证 for表达式能正常进行,首先要保证第 2个表达式的条件判断值应该为真,从而保证循环进行。 17 【正确答案】 B 【试题解析】 在一维数组中要注意的是作为下标表达式的常量表达式的值必 须是大于等于 0,并且小于自身,本题中选项 B)的下标表达式的值超过了自身。 18 【正确答案】 B 【试题解析】 在 c+语言的数组元素的引用方法,如数组元素 a0,可以用表达式。 (p+0),即 *p来引用,对于数组元素 a1,可以用表达式。 (p+1)来引用,在这里, p+1的值就是数组元素 a1的地址,对此地址使用 “间接访问运算符 ”: *(P+1)就代表存储
26、单元 a1,注意:一对圆括号不可少。同样,对于数组元素 a2,则可以用表达式。 (p+2)来引用 ,对于数组元素 a9,可以用表达式 *(p+9)来引用。因此,当指针变量 p指向 a数组的起始地址时,若 0i 10,则数组元素 ai可以用, (p+i)。 19 【正确答案】 A 【试题解析】 本题的函数是根据 a和 b的值来给 c赋值。 20 【正确答案】 A 【试题解析】 形参的值的改变,不能影响实参的值。选项 B)函数只能嵌套调用,不能嵌套定义;函数要是有返回值其类型必须确定;函数也可无返回值,用 void表示。 21 【正确答案】 D 【试题解析】 C+类中的静态成员变量是该类中所有对象
27、所共有的,它能够被类中的任何 函数调用,所以选项 A),选项 B),选项 C)是错误的。而类的静态数据成员是必须要进行初始化才能使用的。 22 【正确答案】 C 【试题解析】 C+语言中拷贝构造函数的参数一般是某个对象的引用名。 23 【正确答案】 C 【试题解析】 基类的私有成员在派生类中是隐藏的,只能在基类内邮访问,派牛类中的成员不能访问基类中的私有成员,可以访问基类中的公有和受保护的成员。 24 【正确答案】 D 【试题解析】 在类 A中有 geta()函数,在类 B中也有 geta()函数,类 C继承了类A和类 B,这样就产生了二义性,所以程序会出错。 25 【正确答案】 D 【试题解
28、析】 C+中只能用成员函数重载的运算符是 =, , (), - ,只能用友元函数重载的是,。 26 【正确答案】 B 【试题解析】 在 C+程序中的 typename是都可以替换为 class的,但 class不能都替换为 typename。 27 【正确答案】 C 【试题解析】 C+语言中判断文件操作成功主要有两个函数 good()和 fail(),其中if文件流名 good()和 if(!文件流名 fail(),还有 if文件流名 )都可以表示判断文件操作是否成功。 28 【正确答案】 A 【试题解析】 题中 fun函数进行了递归调用,第 1次调用: fun(3)n=3 s=3-fun(2
29、),第二次调用时: fun(2)n=2 s=2,返回第一次调用后, s=3-2=1。 29 【正确答案】 C 【试题解析】 在 C+语言里, main函数也可以有参数,例如: main(int arvc,char*argv), argc:是指向字符串的指针数组,而选项 C)是第二个形参是指向字符变量的指针,是错误的。 30 【正确答案】 C 【试题解析】 该题主要要搞清楚以下几点: 定义了一个指针数组 char*P2后,程序中第一个循环 for(i=0; i 2; i+)Pi=chi;的作用是使指针数组的 P0元素 (它本身是一个指针 )指向了二维数组 ch的第一行字符串,并使指引数组的 P1
30、元素指向了二维数组汕的第二行字符中。这样,就使指针数组 p和二维数组 ch建立起了一种对应关系,以后对二维数组 ch的某个元素的引用就有两种等价的形式: chij或 pij。 对二维数组 ch的初始化,使其 第一行 ch0中存入了字符串 “6937,第二行 ch1中的内容为字符串 “8254”。 程序中第二个循环中的循环体 s=s*10+pij-0;的功能是这样的,每执行一次,将 s中的值乘以 10(也即,将 s中的数值整体向左移动一位,并在空出来的个位上添一个 0),再将当前 Pij中的字符量转换为相应的数字,然后把这个数字加到 s的个位上 注意到内层循环的循环条件 Pij 0,是指 pij
31、中的字符只要不是字符串结束标志 0就继续循环,语句。 j+2;是使下标 j每次增加 2,也 即一个隔一个地从 pi所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从 P 0所指向的字符申 “6937中一个隔一个地取出字符,分别是 “6”和 “3”,然后从 p1所指向的字符串 “8254中一个隔一个地取出字符,分别是 “8”和 “5”,同时经过转换和相加运算后,结果 s中的值应该是 6385。 31 【正确答案】 A 【试题解析】 C+语言中如果基类的成员址保护的,它被继承后在子类中该成员叫能是保护的,也可能不是,主要看继承的权限是 public,还是 protected或 pri
32、vate的, 32 【正确答案】 C 【试题解析】 左移 l位,相当于乘以 2,题中的 x的值是一个八进制数,转换为十进制数是 32,再乘以 2, x的值为 64。 33 【正确答案】 B 【试题解析】 根据本题提出的条件可知,控制循环的表达式应该是所输入的两数互不相等,也即只有满足这一条件时,两数才能进行排序输出的操作,由此得出循环的控制表达式应该为 a!=b 34 【正确答案】 B 【试题解析】 本题中,表达式将 5个初值赋给 a0至 a4,后面的部分,将自动会被依次补零处理, 35 【正确答案】 D 【试题解析】 选项 A)、选项 B)和选项 C)都不正确,因为友元关系是单项的,并且没确
33、交换性、传递性。 36 【正确答案】 close 37 【正确答案】 123.45* 123.45* 123.45 38 【正确答案】 逻辑独立性 39 【正确答案】 base class derivel class derive2 class 40 【正确答案】 *(str+i)或 stri 41 【正确答案】 template typename TYPE TyClass TYPE :MyClass(TYPE k):n(k) 42 【正确答案】 *a0 *a0 *a0 43 【正确答案】 类的成员对象 44 【正确答案】 ws 45 【正确答案】 25 46 【正确答案】 main()函数 47 【正确答案】 基类 派生类 【试题解析】 本题主要考查的是派生类构造函数的执行顺序,在 C+语言中构造函数的执行顺序是先基类后派生类,而析构函数 的执行顺序正好相反,是先调用派生类后调用基类。 48 【正确答案】 a1 x=1; a1 y=2; a1 z=3; 【试题解析】 通过程序的结果知道数据类型是 int,所以调用时声明模板实参为int的,再对 x, y, z进行赋值。