1、国家二级( C+)笔试模拟试卷 143及答案与解析 1 算法的时间复杂度是指 ( )。 ( A)执行算法程序所需要的时间 ( B)算法程序的长度 ( C)算法执行过程中所需要的基本运算次数 ( D)算法程序中的指令条数 2 下列描述中,不是线性表顺序存储结构特征的是 ( )。 ( A)不便于插入和删除 ( B)需要连续的存储空间 ( C)可随机访问 ( D)需另外开辟空间来保存元素之间的关系 3 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向 链表 ( D)二叉树 4 有下列二叉树,对此二叉树前序遍历的结果为 ( )。( A) ACBEDGFH
2、( B) ABDGCEHF ( C) HGFEDCBA ( D) ABCDEFGH 5 对建立良好的程序设计风格,下列描述中正确的是 ( )。 ( A)程序应该简单、清晰、可读性好 ( B)符号名的命名只需要符合语法 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 6 下列选项中不属于软件工程 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 7 下 列选项中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 8 使用白盒测试法时,确定测试数据应该根据 ( )和指定的覆盖标准。 ( A)
3、程序的内部逻辑 ( B)程序的复杂结构 ( C)使用说明书 ( D)程序的功能 9 数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是 ( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关系 10 对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运算 ( D)积运算 11 下列运算符中, ( )运算符在 C+中不能重载。 ( A) int b=a+1; cout a/b en
4、dl; ( A) 0.66667 ( B) 0 ( C) 0.7 ( D) 0.66666666 16 下列程序的输出结果是 ( )。 #include iostream.h main() int m=5; if(m+ 5) cout m; else cout m-; ( A) 7 ( B) 6 ( C) 5 ( D) 4 17 下列关于模板的叙述中,错误的是 ( )。 ( A)模板声明中的第一个符号总是关键字 template ( B)在模板声明中用 “ ”和 “ ”括起来的部分是模板的形参表 ( C)类模板不能有数据成员 ( D)在一定条件下函数模板的实参可以省略 18 类模板 templ
5、ate class T class x.,其中友元函数 f对特定类型 T(如 int),使函数 f(x int )成为 x int模板类的友元,则其说明为 ( )。 ( A) friend voidf(); ( B) friend voidf(x T ); ( C) friend voidA:f(); ( D) friend void C T :f(x T ); 19 下列是重载为非成员函数的运算符函数原型, 其中错误的是 ( )。 ( A) Fraction operator+(Fraction,Fraction); ( B) Fraction operator-(Praction); (
6、C) Fraction ( D) Fraction 20 下列程序的运行结果为 ( )。 #include iostream.h void main() int a=2; int b=a+1; cout a/b endl; ( A) 0.66667 ( B) 0 ( C) 0.7 ( D) 0.66666666 21 只能作为成员函数重载的是 ( )。 ( A) = ( B) + ( C) * ( D) new 22 下列函数的运行结果是 ( )。 #include iostream.h int add(int a,int b); void main() extern int x,y; cou
7、t add(x,y) endl; int x(20),y(5); int add(int a,int b) int s=a+b; return s; ( A) 25 ( B) 30 ( C) 20 ( D) 15 23 下列程序的输出结果是 ( )。 #ificlude iostream using namespace std; int main() cout.fill(*); cout.width(5); cout oct 100 endl; return 0; ( A) *100 ( B) *144 ( C) 100* ( D) 144* 24 由于常对象不能被更新,因此 ( )。 ( A
8、)通过常对象只能调用它的常成员函数 ( B)通过常对象只能调用静态成员函数 ( C)常对象的成员都是常成员 ( D)通过常对象可以调用任何不改变对象值的成员函数 25 有如下程序: int x=3; do x-=2; cout x; while(!(-x); 执行这个程序的输出结果是 ( )。 ( A) 1 ( B) 30 ( C) 1-2 ( D)死循环 26 有如下程序: #include iostream using namespace std; int main() int *p; *p = 9; cout “The value at p: “ *p; return 0; 编译运行程序
9、将出现的情况是 ( )。 ( A)编译时出现语法错误,不能生成可执行文件 ( B)运行时一定输出: The value at p:9 ( C)运行时一定输出: The value at p:*9 ( D)运行时有可能出错 27 有如下类定义: class AA int a; public: int getRef()const return / int getValue()const return a; / void set(int n)const a=n; / friend void show(AA aa)const cout a; / ; 其中的四个函数定义中正确的是 ( )。 ( A) (
10、 B) ( C) ( D) 28 有如下程序: #include iostream using namespace std; class Base public: void fun() cout “Base:fun“ endl; ; class Derived : public Base public: void fun() _ cout“Derived:fun“ endl; ; int main() Derived d; d.fun(); return 0; 已知其执行后的输出结果为: Base:fun Derived:fun 则程序中下划线处应填入的语句是 ( )。 ( A) Base.f
11、un(); ( B) Base:fun(); ( C) Base- fun(); ( D) fun(); 29 有如下类定义: class Foo public: Foo(int v) : value(v) / Foo() / private: Foo() / int value = 0; / ; 其中存在语法错误的行是 ( )。 ( A) ( B) ( C) ( D) 30 下列程序的输出的结果是 ( )。 #include iostream.h void main() int i,k,a10,p3; k=5; for (i=0;i 9;i+)ai=i; for(i=0;i 3;i+)pi=
12、ai*(i+1); for(i=0;i 3;i+)k+=pi*2; cout k; ( A) 20 ( B) 21 ( C) 22 ( D) 23 31 下列有关指针的用法中错误的是 ( )。 ( A) int i;int *p= ( B) int i;int *p;i=*p; ( C) int *p;p=0; ( D) int i=5;int *p;p= 32 下列程序运行后的输出结果是 ( )。 #include iostream.h void fun(int,int,int*); void main() int x,y,z; fun(5,6, fun(7,x, fun(x,y, cout
13、 x “,“ y “,“ z endl; void fun(int a,int b,int *c) b+=a; *c=b-a; ( A) 5,5,5 ( B) 6,6,6 ( C) 5,6,7 ( D) 7,7,7 33 下列程序输出的结果是 ( )。 #include stdio.h fun1(char a,char b)char c;c=a;a=b;b=c; fun2(char*a,char b)char c;c=*a;*a=b;b=c; fun3(char*a,char*b)char c;c=*a;*a=*b;*b=c; void main() char a,b; a=A;b=B;fun
14、1 (a,b);putchar(a);putchar(b); a=A;b=B;fun2(putchar(a);putchar(b); a=A;b=B;fun3(putchar(a);putchar (b); putchar(n); ( A) BABBAB ( B) ABBBBA ( C) ABBABA ( D) ABABBA 34 在 C+程序中,如果要求通过函数来实现一种简单的功能,并且要求尽可能加快程序的执行速度,则应该选用 ( )。 ( A)内联函数 ( B)重载函数 ( C)递归调用 ( D)嵌套调用 35 下列关于类和对象的叙述中,错误的是 ( )。 ( A)一个类只能有一个对象 (
15、 B)对象是类的具体实例 ( C)类是对某一类对象的抽象 ( D)类和对象的关系是一种数据 类型与变量的关系 36 在数据库的概念结构设计中,常用的描述工具是【 】。 37 数据库系统中实现各种数据管理功能的核心软件称为【 】。 38 数组是有序数据的集合,数组中的每个元素具有相同的【 】。 39 按照逻辑结构分类,数据结构可分为线性结构和非线性结构,栈属于【 】。 40 在程序设计阶段应该采取【 】和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序。 41 若 a=12,b=14,c=0,则表达式 “(y=(a B) ?a:B) C) ?y:
16、c”的值为【 】。 42 下面程序的输出结果为【 】。 #include iostream using namespace std; void initialize(int printNo,int state=0); void initialize(int printNo=1,int state); int main() initialize(); return 0; void initialize(int printNo, int state) cout printNo “,“ state end1; 43 下列程序的输出结果是【 】 #include iostream using name
17、space std; int int main () int a =10; getVar( cout a end1; return 0; 44 若有以下程序 : #include iostream using namespace std; class Base public: void who()cout “ Base“ end1: ; class Derived1: public Base public: void who() cout “Derived“ end1; ; int main() Base *p; Derived1 obj1; p= p- who(); return 0; 则该
18、程序运行后的输出结果是【 】。 45 多态性分为两类:编译时的多态性和【 】的多态性。 46 C+中,设置虚基类的目的是【 】。 47 下列程序的输出结果是【 】。 #include iostream using namespace std; template typename T T total (T *data) T s = 0; while(*data) s+=*data+; return s; int main() int x=2,4,6,8,0,12,14,16,18; cout total(x) end1; return 0; 48 下面程序的输出结果是【 】。 #include
19、iostream.h #include math.h class point double x; double y; public: point(double a, double b) x=a; y=b; friend double distance(point a, point b) ; ; double distance(point a, point b) return sqrt (a. x-b.x) * (a. x-b.x)+ (a. y-b. y) * (a. y-b. y) ); void main() point p1(1,2); point p2(5,2); cout dista
20、nce(p1,p2) end1; 国家二级( C+)笔试模拟试卷 143答案与解析 1 【正确答案】 C 【试题解析】 所谓的算法时间复杂度是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 2 【正确答案】 D 【试题解析】 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。 3 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,其插 入和删除运算都只在线性表的一端进行,而另一端是封闭的。进行插入、
21、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,而栈底元素是最后被删除的栈,是按 “先进后出 ”的原则组织数据的。 4 【正确答案】 B 【试题解析】 对二叉树的前序遍历是指先访问根结点,然后访问左子树,最后访问右子树,并且在访问左、右子树时,先访问根结点,再依次访问其左、右子树。 5 【正确答案】 A 【试题解析】 “清晰第一,效率第二 ”,在考虑到程序的执行效率的同时,一定要保证程序清晰、可读;对符号名的命 名,除了要符合语法要求外,还要具有一定的含义;程序的注释可以帮助程序员理解程序,不是可有可无的。 6 【正确答案】 D 【试题解析】 软件工程包括 3个要素,即方法
22、、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制、管理。 7 【正确答案】 C 【试题解析】 软件的生命周期可分为软件定义、软件开发及软件运行维护 3个阶段。其中软件定义阶段的主要工作有可行性研究与计划制定和需求分析等;软件开发阶段的主要工作有概要设计、详细设计和 测试等;软件运行维护阶段的主要工作是软件的运行及后期的维护等。 8 【正确答案】 A 【试题解析】 白盒测试是把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构及相关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。所以,白盒测试的对象基本上是
23、源程序,以程序的内部逻辑和指定的覆盖标准测试数据。 9 【正确答案】 C 【试题解析】 数据库系统 (DBS)由数据库 (DB)、数据库管理系统 (DBMS)、数据库管理员、硬件平台和软件平台 5个部分组成,可见 DB和 DBMS都是 DBS的组成部分。 10 【正确答案】 A 【试题解析】 关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。 11 【正确答案】 C 【试题解析】 此题考查的是运算符的有关概念。运算符重载是针对 C+原有运算符进行的,不能通过重载创造新的运算符;除了 “.”、 “.*”、 “- *”、 “:”、 “?:”这5个运算符之外,
24、其他运算符都可以重载。 12 【正确答案】 D 【试题解析】 C+中函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时 系统就能决定调用的是哪个函数。动态多态性是在程序运行过程中才动态确定操作所针对的对象。动态多态性是通过虚函数实现的。 13 【正确答案】 D 【试题解析】 此题考查的是标识符。标识符是由数字、字母以及下划线构成,其中第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过 31个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。符合这些要求的只有选项 D)。 14 【正确答案】 A 【试题解析】 格式控制
25、标志 hex格式控制是整数按 十六进制输出; oct格式控制是整数按八进制输出: dec格式控制是整数按十进制输出; left输出数据在指定的宽度内左对齐。 15 【正确答案】 B 【试题解析】 因为题目中定义的变量 a和 b均为整型数据,所以 a/b即 2/3得到的仍然是整型数据,得到 0。 16 【正确答案】 B 【试题解析】 此题中,因为 m+ 5成立 (此时 m的值变为 6),所以执行语句cout m;输出结果为 6。 17 【正确答案】 C 【试题解析】 类模板不是一个实实在在的类,本身在编译中不会生成任何代码;用类模 板定义一个对象时,不能省略实参;类模板的成员函数都是模板函数。
26、C+中可以为类模板的参数设置默认值,可以有数据成员,选项 C)错误。 18 【正确答案】 B 【试题解析】 声明一个函数模板的格式: template棋板形参表声明函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。 19 【正确答案】 C 【试题解析】 由于取负运算符 “-”是一元运算符,当作为成员函数重载时参数表中没有参数,那个唯一的操作数以 this指针 的形式隐藏在参数表中。故选项 C)错误。 20 【正确答案】 B 【试题解析】 因为题目中定义的变量 a和 b均为整型数据,所以 a/b即 2/3得到的仍然是整型数据
27、,得到 0。 21 【正确答案】 A 【试题解析】 运算符重载为成员函数的形式为:函数类型 operator运算符 (形参表 )函数体 ;;运算符重载为友元函数的形式为: friend函数类型 operator运算符(形参表 )函数体; 。一般来讲,单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。 =、 、 ()、 -以及所有的类型转 换运算符只能作为成员函数重载。 22 【正确答案】 A 【试题解析】 由主函数 main入手,定义外部变量 x和 y,调用函数 add。因为x, y为外部变量,所以 “int x(20),y(5);”的赋值在 add也是有效的,即 add函数的运算结
28、果为 25。 23 【正确答案】 B 【试题解析】 cout.fill()用于设置或返回输出的填充字符,默认是空格, fill()函数的设置一直有效,直到下一个 fiN()函数改变该值为止。 cout.width()用于设置或返回 (不带参数 )输出数据的字段宽度,此函 数的设置只对下一个输出有效。注意:默认为输出数据在指定宽度内右对齐, oct格式控制是整数按八进制输出。 24 【正确答案】 A 【试题解析】 此题考查的是常对象与常成员函数的概念。使用 const关键字修饰的对象称为常对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其他成员函数;使用 const关键字声明的成员函数
29、是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其他函数。 25 【正确答案】 C 【试题解析】 此题考查的是 do-while循环语句。 do-while循环首先执行 do语句中的循环体,再判断是否需要继续执行循环。题目中 do语句 “x-=2”, while语句中 “-x”即 x为 0,取反为非 0,循环继续执行;执行 “x-=2”和 “-x”取反后,循环结束程序退出。 26 【正确答案】 D 【试题解析】 此题考查的是指针的使用。本题中,在给 *p赋值前,指针 p并没有指向一个具体的对象。此时可以通过编译,但运行时由于 p中为随机值,该赋值可能会破坏内存中某个重要的地
30、址空间的内容,导致程序出错。 27 【正确答案】 B 【试题解析】 此题考查了常成员函数 和友元函数的概念。选项 A)中, getRef()函数的返回值和函数类型不符,故错误;选项 C)中 set()常成员函数改变了数据成员的值,这是不允许的;选项 D)中 show()函数被同时定义成友元函数和常成员函数是错误的。 28 【正确答案】 B 【试题解析】 此题考查的是继承的使用。分析题目可知,横线处应填入对基类成员函数 fun()的调用语句,此处只能使用作用域运算符 “:”才能调用到基类的同名函数。 29 【正确答案】 D 【试题解析】 此题考查的是类的定义。 C+语言规定,在类体内不允许对 所
31、定义的数据成员进行初始化。 30 【正确答案】 B 【试题解析】 程序中首先在第一个 for循环中将 a每一个元素赋值为 0, 1,2 。然后在第二个循环中 p的第 i元素为 a中的第 i*(i+1),即 0, 2, 6,第三个循环中每个 p中的元素值乘以 2,然后加上 5,累加。答案为 21。 31 【正确答案】 B 【试题解析】 “int i;”语句定义了一个整型变量 i。 “int *p”定义了一个整型指针p。选项 A)中的 “int *p=”是定义整型指针变量 p,并指向整型 i的地址。选项 B)中 “i=*p”语 句是将 p指向的变量赋值给 i,而指针 p没有初始化,所以选项 B)错
32、误。选项 C)中 “p=0;”表示 p指向 0的地址。选项 D)中 “&i”为取 i的地址,并赋值给 p。 32 【正确答案】 B 【试题解析】 由程序中的 main函数入手,分别调用 fun函数,第一个调用中 x参数为引用地址,调用后 x的值为 6,因为参数为地址,所以第二个调用中的 x参数值为 6,调用后 y的计算结果为 6。同理, z在第三个函数调用后 z的值为 6。 33 【正确答案】 B 【试题解析】 由程序中的主函数 main入手,分别调用 fun1, fun2, fun3函数,得出输出结果。其中, 3个函数都是实现的两个形参的交换功能,只是值传递的方式不同,有的是引用,有的是传值
33、。第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。所以 d调用 fun1后,实参 a和 b并没有交换,仍然是AB。第二个调用中,实参 a采用的是地址,即传递的是地址,所以形参 a的改变会影响实参 a的值,即 BB。同理,调用 fun3后为 BA。 34 【正确答案】 A 【试题解析】 此题考查的是内联函数的相关知识点。 C+引入内联函数是用它来代替 C语言中的预处理宏函数,内联函数在调用时 ,是将表达式用内联函数体来替换,这样会加快程序的执行速度。 35 【正确答案】 A 【试题解析】 此题考查的是类和对象的相关概念。类是将不同的数据和与这些数据相关的操作封装起来装在一起的集合体。
34、对象是类的具体实例,也即类是对某一类对象的抽象,类和对象之间可以说是数据类型与变量的关系。一个类可以有无数个对象。 36 【正确答案】 E-R图 37 【正确答案】 数据库管理系统 38 【正确答案】 数据类型 39 【正确答案】 线性结构 40 【正确答案】 自顶而下 41 【正确 答案】 14 【试题解析】 本题考核运算符的应用。条件运算符是一种在两个表达式中选择一个的操作,它是 C+中惟一的三元运算符。在本题中,先计算 (a B) ?a: b,因为a b,所以条件表达式的值为 0,因此 y=b=14,而 y c的逻辑值为真,所以表达式的值为 y的值,即 14。 42 【正确答案】 1,0
35、 【试题解析】 本题考核带有缺省值的函数,本题中函数 initialize()进行了两次函数原型的说明,使本来不带默认值的形参带上默认值。由于主函数中调用initialize()时没有给定实参,所以 函数自动调用其参数缺省值。输出 1和 0。 43 【正确答案】 20 【试题解析】 本题考核引用的使用。题中函数 getVar返回的为实参的引用,即将 a的引用赋值为 20,所以最后输出 a的值为 20。 44 【正确答案】 Derived 【试题解析】 本题考核对象指针的使用。题中基类 Base对象指针 p用派生类 Derived对象 obj1来初始化,那么通过对象指针 p调用的 who函数版本
36、为基类Base中定义的版本,所以程序输出 Derived。 45 【正确答案】 运行时 【试题解析】 本题考 核多态性的概念。在 C+语言中,多态性可分为两类:编译时的多态性和运行时的多态性。 46 【正确答案】 解决二义性问题 【试题解析】 C+中可以将共同基类设置为虚基类,这时从不同的路径继承过来的该类成员在内存中只有一个拷贝。这样就解决同名成员的二义性。 47 【正确答案】 20 【试题解析】 本题考核函数模板的应用。解此题的关键是理解函数 total的作用, total的作用是将数组的元素值相加,直到某个元素值为 0截至,并返回相加的结果。数组 x的第 5个元素的值为 0,所以 tot
37、al返回的 结果为前 4个元素值的相加,即 20。 48 【正确答案】 4 【试题解析】 本题考核友元函数的应用。分析程序:类 point中定义了两个私有成员 x和 y,以及一个友元函数 distance。从而,函数 distance可以访问类 point中的任何成员。在函数 distance中,返回值为 sqrt(a. x-b. x)*(a. x-b. x)+ (a. y-b. y)*(a. y-b. y)。由此可知,函数 distance的功能是计算 a、 b两点之间的距离。在土函数 main中,先定义两点: p1(1, 2)和 p2(5, 1)。然后调用函数 distance计算两点之间的距离为 4,所以程序最后输出为 4。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1