1、国家二级( C+)笔试模拟试卷 169及答案与解析 1 下列叙述中正确的是 ( )。 ( A)一个算法的空间复杂度大,则其时间复杂度必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)上述三种说法都不对 2 下列叙述中正确的是 ( )。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 3 对长度为 n的线性表进行顺序查
2、找,在最坏情况下需要比较的次数为 ( )。 ( A) 125 ( B) n/2 ( C) n ( D) n+1 4 最简单的交换排序方法是 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 5 设计程序时应采纳的原则之一是 ( )。 ( A)程序的结构应有助于读者的理解 ( B)限制 GOTO语句的使用 ( C)减少或取消注释行 ( D)程序越短越好 6 下列关于结构化程序设计原则和方法的描述中,错误的是 ( )。 ( A)选用的结构只准许有一个入口和一个出口 ( B)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现 ( C)不允许使用 GOTO语句 ( D)语
3、言中所没有的控制结构,应该采用前后一致的方法来模拟 7 下列特征中不是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B)继承 ( C) 封装性 ( D)模块化 8 在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送 ( )。 ( A)调用语句 ( B)命令 ( C)口令 ( D)消息 9 下列描述中错误的是 ( )。 ( A)继承分为多重继承和单继承 ( B)对象间通信靠传递消息实现 ( C)在外面看不到对象的内部特征是基于对象的 “模块独立性好 ”这个特征 ( D)类是具有共同属性、共同方法的对象的集合 10 下列叙述中正确的是 ( )。 ( A)软件 交付使用后还
4、需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 11 下列关于 C+函数的说明中,正确的是 ( )。 ( A)内联函数就是定义在另一个函数体内部的函数 ( B)函数体的最后一条语句必须是 return语句 ( C)标准 C+要求在调用一个函数之前,必须先声明其原型 ( D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式 12 假定 MyClass为一个类,则执行 MyClass a b(2),*p;语句时,自动调用该类构造函数 ( )次。 ( A) 2 ( B) 3 ( C) 4 ( D
5、) 5 13 有下列程序: #include iostream using namespace std; classTest public: Test() n 2; Test() n- 3; static int getNum()return n; private: static int n; ; int Test:n 1; int main() Test*p new Test ( A) n=0 ( B) n=l ( C) n=2 ( D) n=3 14 关于运算符重载的表述中正确的是 ( )。 ( A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 (
6、C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 15 假定 MyCIass为一个类,那么下列的函数说明中, ( )为该类的析构函数。 ( A) void MyClass(); ( B) MyClass(int n); ( C) MyClass(); ( D) MyClass(); 16 关于拷贝初始化构造函数,正确的是 ( )。 ( A)在 C+语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数 ( B)必须为每个类定义拷贝初始化构造函数 ( C)如果要使用拷贝初始化构造函数,则必须 在类中先定义 ( D)
7、当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数 17 下列关于重载函数的描述中, ( )是错误的。 ( A)重载函数中不允许使用默认参数 ( B)重载函数中编译是根据参数表进行选择 ( C)不要使用重载函数来描述毫不相干的函数 ( D)构造函数重载将会给初始化带来多种方式 18 有下列程序: #include iostream using namespace std; class Complex double re,im; public: Complex(double r,double i):re(r),im(i) double real()constret
8、um re; double image()constreturn im; Complexi 5;i+)cout *(p+i) “,“;能够依次输出 int型一维数组 a的前 5个元素。由此可知,变量 P的定义及初始化语句是 ( )。 ( A) int*p=a; ( B) int p=a; ( C) *p=a; ( D) p=a; 24 有下列语句序列: int k=0; dok+=5;cout $; while(k 19); while(k- 0)cout *; 执行上面的语句序列输出字符 “$”和 “*”的个数分别是( )。 ( A) 4和 20 ( B) 5和 20 ( C) 4和 21
9、( D) 5和 21 25 若有如下定义和语句: int s45,(*p)5; p=S; 则指针对 s数组中第三个元素的正确引用形式是 ( )。 ( A) p03 ( B) p12 ( C) p02 ( D) p13 26 下列程序的输出结果是 ( )。 #include iostream using namespace std; int main() char a=“Hello,Test“; char*p=a; while(*p) if(*p=a else cout *p; p+; re ( A) hllo,test ( B) Hello,Test ( C) HELLO,TEST ( D)
10、hELLO,tEST 27 下列函数中对调用它的函数没有起到任何作用的是 ( )。 ( A) void f1(double ( B) double f2(double x)return x-1.5; ( C) void f3(double x)-x; ( D) double f4(double*x)-*x;return*x; 28 有如下的运算符重载函数定义: double operator+(inti,intk)return double(i+k); 但定义有错误,对这个错误最准确的描述是 ( )。 ( A) +只能作为成员函数重载,而这里的 +是作为非 成员函数重载的 ( B)两个 int
11、型参数的和也应该是 int型,而这里将 +的返回类型声明为 double ( C)没有将运算符重载函数声明为某个类的友元 ( D) C+已经提供了求两个 int型数据之和的运算符 +,不能再定义同样的运算符 29 下列程序的执行结果是 ( )。 #include iostream.h #include stdlib.h class TestClass public: intx,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout “X“=“ X “,y=“ y endl; ( A) x=2,y=2 ( B) x
12、=3,y=3 ( C) x=2,y=3 ( D) x=3,y=2 30 若有如下变量定义和函数调用语句: inta=5; fun( 则执行下面函数后正确的输出结果是 ( )。 void fun(int*x) cout +*xendl; ( A) 3 ( B) 4 ( C) 5 ( D) 6 31 关于下列程序段的描述中,正确的是 ( )。 #include iostream.h int fun(int,int); void main() cout fun(1,2) endl; int fun(int x,int y) return X+y; ( A)该函数定义正确,但函数调用方式错误 ( B)
13、该函数调用方式正确,但函数定义错误 ( C)该函数定义和调用方式都正确 ( D)该函数定义和调用方式都错误 32 有下列的程序: #include cstring.h #include iostream.h using namespace std; class MyString public: MyString(const char*s); MyString() deletedata; protected: unsigned len; char*data; ; ( A)构造函数的实参不允许是本类的对象 ( B)没有定义实现深层复制 (深拷贝 )的复制构造函数 ( C)构造对象 a时实参与形参类
14、型不符 ( D)系统不能生成默认的复制构造函数 33 有下列程序 : #include iostream.h using namespace std; class Demo public: Demo() cout “default constmctorn“; Demo(const Demo ; Demo userCode(Demo b)Demo c(b);return c; int ( A) 1和 1 ( B) 1和 2 ( C) 2和 3 ( D) 2和 4 34 已知在函数 func()中语句 this- ff=0;与语句 fi=O;的效果完全相同。对于这一现象,下列表述中错误的是 ( )
15、。 ( A) ff是某个类的数据成员, func()是该类的友元函数 ( B) ff是某个类的数据成员, func()是该类的成员函数 ( C) this- ff和 ff是同一个变量 ( D) func不是一个静态成员函数 35 下列说法中错误的是 ( )。 ( A)公有继承时基类中的 public成员在派生类中仍是 public成员 ( B)私有继承时基类中的 protected成员在派生类中仍是 protected成员 ( C)私有继承时基类中的 public成员在派生类中仍是 private成员 ( D)保护继承时基类中的 public成员在派生类中仍是 protected成员 36 数
16、据管理技术发展过程经过人工管理、文件系统和数据库系统 3个阶段,其中数据独立性最高的是 _阶段。 37 在关系模型中,把数据看成是二维表,每一个二维表称为一个 _。 38 软件结构是以 _为基础而组成的一种控制层次结构。 39 数据字典是各类数据描述的集合,它通常包括 5个部分,即数据项、数据结构、数据流; _和处理过程。 40 在岂个容量为 25的循环队列中,若头指针 front=9,尾指针 Year 16,则该循环队列中共有 _个元素。 41 假定 A为一个类,则语句 A(A Base() ; class Derived: public Base public: /完成类 Derive构造
17、函数的定义 ; int main() Derived Obj; re 48 下列程序用于将源文件中的字母进行大小写转换,请填写 while的请句。 #include iostream.h #include fstream.h #include iomanip.h void main() char ch; fstream file1, file2; char fnl10, fn210; cout “输入源文件名: ”; cin fn1; cout “输入目标文件名: ”; cin fn2; i 49 有如下程序: #include iostream using namespace std; cl
18、ass CA public: CA()cout+A; ; class CB: private CA public: CB()cout B; ; int main() CA a; CB b; return 0; 这个程序的输出结果是 _。 50 下列程序的输出结果是 _。 #include iostream using namespace std; template typename T T fun(T a, T b)return(a b)?a: b; int main() cout fun(3, 6) , fun(3.14F, 6.28F) end1; return 0; 国家二级( C+)笔
19、试模拟试卷 169答案与解析 1 【正确答案】 D 【试题解析】 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况的,它们之间没有内在联系。 2 【正确答案】 D 【试题解析】 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。 3 【正确答案】 C 【试题解析】 对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与 表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败
20、,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为 n。 4 【正确答案】 D 【试题解析】 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序快速排序。冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 5 【正确答案】 A 【试题解析】 程序设计的风格主要强调程序的简单、清晰和可理解 性,以便读者理解。程序滥用 GOTO语句将使程序流程无规律,可读性差;添加注释行有利于对程序的理解,不应减少或取消,程序的长短要依实际的需要而定,并不是越短越好。 6 【正确答案】 C 【试题解析】 限制使用 GOTO语句是结构化
21、程序设计的原则和方法之一,但不是绝对不允许使用 GOTO语句。选项 A)、 B)、 D)为结构化程序设计的原则。 7 【正确答案】 D 【试题解析】 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包 括分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。 8 【正确答案】 D 【试题解析】 在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。 9 【正确答案】 C 【试
22、题解析】 对象的封装性是指从外面看只能看到对象的外部特性:而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。 10 【正确答案】 A 【试题解析】 软件生命周期一般可以分为软件定义、软件开发及软件运行维护 3个阶段。软件交付并投入运行后,需要不断地进行维护,并根据新提出的需求进行必要而且可能的扩展和删改。 11 【正确答案】 C 【试题解析】 选项 A)中,内联函数不是定义在另一个函数体内部的函数,而是将 incline放在函数定义中函数类型之前;函数题的最后一条语句可以是任意的语句,所以选项 B)错误;编译器不会根据函数返回值的类型宋区分重载形式,所以选项 D)错误。标准 C
23、+要求在调用一个函数之前,必须先声明其原型,所以选项C)正确。 12 【正确答案】 A 【试题解析】 C+在创建一个对象时,会调用类的构造函数。语句 MyClass a b(2),*p;创建了两个对象 a、 b和指针 p,在创建对象 a和 b后会调用构造函数,而创建指针 p时,由于 p本身不是对象,所以不调用类的构造函数。 13 【正确答案】 A 【试题解析】 语句 Test*p=new Test;会调用类的构造函数 Test() n+=2; ,使 n的值由原来的 1变为 3,然后 delete p调用类的析构函数 Test() n-=3; ,因为 n是 static型变量,所以会在 3的基础
24、上减 3使得输出结果为 0。 14 【正确答案】 C 【试题解析】 此题考查的是运算符的有关概念。运算符重载是针对 C+原有运算符进行的,不能通过重载创造新的运算符:除了 “.”、 “.*”、 “- *”、 “ ”、 “?:”这 5个运算符之外,其他运算符都可以重载;在类型转换符函数的定义中不需要声明返回类型,所以选项 C)正确;运算符函数的返回值类型可以声明为基本数据类型。 15 【正确答案】 D 【试题解析】 C抖语言中析构函数为符号 “ ”加类名,且析构函数 没有返回值和参数,故前不加 void关键字。所以正确的形式应该是 -MyClass()。 16 【正确答案】 A 【试题解析】 拷
25、贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型:只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会自动生成一个公有的拷贝构造函数。 17 【正确答案】 A 【试题解析】 在选项 A)中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函 数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择,包括参数的个数和类型。 18 【正确答案】 C 【试题解析】 此题考查的是 “+”运算符的重载。重载后的 “+”运算符的功能是对参数的两部分分别进行加法运算,然后返回复数值。所以
26、 x+=y使得对象 x(1, 2)与 y(2, 3)的 re和 im分别相加,最后输出结果 (3, 5)。 19 【正确答案】 C 【试题解析】 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。但函数的 返回类型不能作为判断重载的依据。 20 【正确答案】 A 【试题解析】 此题考查的是模板的特点。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 21 【正确答案】 D 【试题解析】 此题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入流中读取多个字符,并且允许指
27、定输入终止字符 (默认是换行符 ),在读取完成后,从读取的内容中删除该终止字符。 22 【正确答案】 B 【试题解析】 此题考查的是标识符。标识符是由 数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过 31个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。符合这些要求的只有选项 B)。 23 【正确答案】 A 【试题解析】 从循环语句中可以看出,是在 0 4的循环中输出数组 a中的前,5个元素,输出的值为 *(p+i),即为指针 p向后移动指向的元素。所以初始化要将指针 p指向数组 a,即 in
28、t*P=a;。 24 【正确答案】 A 【试题解析】 此题 考查的是 dowhile 语句和 while语句的使用。题目中dowhile 语句循环了 4次, while语句循环了 20次,故最后输出字符 “$”4个,字符 “*”20个。 25 【正确答案】 C 【试题解析】 “p=s; ”语句将指针 p指向数组 s。而数组为二维数组,下标标识由 0开始,所以第二个元素为下标为 0行的 2列,即 p02。 26 【正确答案】 C 【试题解析】 用一个指针变量 p指向字符数组 a,在 while循环中,当不指向数组尾时,将小写字母转换为大写字母,然后将其输出。 27 【正确答案】 C 【试题解析】
29、 此题考查的是函数的调用和函数参数值的传递。选项 C)中函数 S的调用采用按值传递的方式,函数中对形参的修改不能改变实参的值,并且 f3函数没有返回值,所以 f3对调用它的函数没有起到任何的作用。选项 A)采用的是引用传递方式;选项 B)中 f2有返回值;选项 D)中函数 f4是指针调用并且函数有返回值。 28 【正确答案】 D 【试题解析】 此题考查的是运算符的重载。 C+语言规定,不能作为非成员函数重载的运算符有 =、 、 ()、 -以及所有的类型转换运算符,故选项 A)错误 :运算符重载对返回值类型没有限制,故选项 B)错误; C+并不强制要求非成员重载的运算符一定是某个类的友元,所以选
30、项 C)错误;题目中重载的 “+”运算符的两个参数都是 int类型,而 C+已经提供了求两个 int型数据之和的运算符 +,编译器无法区分应该调用哪一个,所以应该选择选项 D)。 29 【正确答案】 C 【试题解析】 由主函数入手,定义了类 TestClass的对象 s1(2, 3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的 “TestClass(int a,int b) x=a; y=b; )”。然后引用成员函数 disp(),则输出为 “cout ”x=“ x ”, y=“ y endl; ”。即 x=2,y=3。 30 【正确答案】 D 【试题解析】 fun函数中
31、的 x参数为整型指针变量。调用 fun函数, 数据流:可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出,数据存储:处理过程中存取的数据,通常是手工凭证、手工文档或计算机文件,处理过程。 40 【正确答案】 7。 【试题解析】 设循环队列的容量为 n。如果 rear front,则循环队列中的元素个数为 rear-front;如果 rear front,则循环队列中的元素个数为 n+(rear-front)。本题中, front=9, rear 16,即 rear front,因此,循环队列中的元素个数为 rear-front=16-9=7。 41 【正确答案 】 拷贝构造。 【试题
32、解析】 本题考查的是拷贝构造函数的定义,它是一种特殊的成员函数,作用是使用一个已知的对象来初始化一个被创建的同类的对象,定义格式是类名:拷贝构造函数名 (类名 &引用名 )。 42 【正确答案】 纯虚函数。 【试题解析】 纯虚函数是在声明虚函数时被 “初始化 ”为。的函数。纯虚函数没有函数体,只有函数名而不具备函数的功能,只是在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。 43 【正确答案】 1。 【试题解析】 本题考查的是运算符重载。当运算符重载 为类的成员函数时,第一操作数就是对象本身,并不是显式的出现在参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一
33、个参数,它代表第二操作数。 44 【正确答案】 5。 【试题解析】 因为 b的值为 1,所以 b&a 5相当于 a 5,当 a 5时退出循环,一共进行 5次循环。 45 【正确答案】 Base: 97。 【试题解析】 本题主要考查两个知识点,一是基类指针可以指向派生类对象,并可以访问派生类的所有成员。二是在函数重载中进行隐式类型转换。如 pd-f(a);系统到底 调用哪个重载函数呢 ?实参既不是派生类中的形参,也不是基类中f函数的形参类型。此时系统根据就近原则和从高优先级到低优先级的规则尝试隐式转换。单字符更接近整数,故调用的是基类的 f函数。 46 【正确答案】 A(aa), c(aaq+1
34、)或 c(aa+1), A(aa)。 【试题解析】 题中要求用 aa初始化基类 A,用 aa+1初始化类对象成员 c,用的初始化列表的形式,即 A(aa), c(aa+1)或 c(aa+1), A(aa)。 47 【正确答案】 Derived(int i): Base(i)。 【 试题解析】 程序中,类 Derived是基类 Base的公有派生。在类 Derived的构造函数应该包括调用基类构造函数使基类的数据成员得以初始化。 48 【正确答案】 (eh=filel.get()! =eof。 【试题解析】 本题是判断文件是否达到结尾,可以使用流输入的 get函数获得当前字符,然后判断该字符是否
35、是 eof即可。 49 【正确答案】 AAB。 【试题解析】 本题考查的是派生类的构造函数。建立派生类对象时,构造函数的执行顺序:执行基类的构造函数,调用顺序按照各个基类被继 承时声明的顺序(自左向右 ),接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序 -执行派生类的构造函数。题目中首先定义了类 CA的对象 a,输出 A;然后定义 CB类的对象 b,因为 CB类派生自 CA类,所以会先执行 CA类的构造函数,再执行 CB类的构造函数,即输出 A和 B。 50 【正确答案】 3, 3.14。 【试题解析】 C+编译系统将根据实参表中的实参的类型来确定函数的形参列表中的类型。函数 fun(3, 6)返回的值为 3,函数调用 fun(3.14F, 6.28F)返回的值为3.14。