1、国家二级( C+)笔试模拟试卷 239及答案与解析 1 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 2 数据库 DB、数据库系统: DBS、数据库管理系统 DBMS之间的关系是( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括。 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关系 3 假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为 ( ) ( A) MyClass(MyClass x); ( B) MyClass(MyClass class A
2、private: int a; public: A(int i) a=i; void disp () cout a “,“; ; class B private: int b; public: B(int j) b=j; void disp () cout b “,“; ; class C : public B,public A private: int c; public: C(int k):A(k-2),B(k+2) c=k; void disp () A:disp(); B:disp(); cout c endl; ; int main() C obj(10); obj.disp();
3、return 0; ( A) 10,10,10 ( B) 10,12,14 ( C) 8,10,12 ( D) 8,12,10 13 若运行时给变量 x输入 12,则以下程序的运行结果是 #include iostream.h void main() int x,y; cin x; y X 12?x+10: x-12; cout y; cout endl; ( A) 0 ( B) 22 ( C) 12 ( D) 10 14 有关构造函数的说法中错误的是 ( A)构造函数名字和类的名字一样 ( B)构造函数在说明类变量时自动执行 ( C)构造函数无任何函数类型 ( D)构造函数有且只有一个 15
4、 语句 ofstream f(“SALARY. DAT“, ios: :app | ios: :binary) ;的功能是建立流对象f,试图打开文件 SALARY.DAT并与之连接,并且 ( A)若文件存在,将文件写指针定位于文件尾 ;若文件不存在,建立一个新文件 ( B)若文件存在,将其置为空文件 ;若文件不存在,打开失败 ( C)若文件存在,将文件写指针定位于文件首 ;若文件不存在,建立一个新文件 ( D)若文件存在,打开失败 ;若文件不存在,建立一个新文件 16 有如下函数模板定义: template typename T1, Typename T2 T1 Fun(T2 n)return
5、 n*5.0; 若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为 ( )。 A) FUN(9) B) FUN 9 C) FUN double 9 D) FUN 9 (doubl 17 一个类的友元函数或友元类可以访问该类的 ( )。 ( A)私有成员 ( B)所有成员 ( C)保护成员 ( D)公有成员 18 有如下程序: #include iostream using namespace std;class Base public: Base()cout “BB“; f(); Void f()cout “Bf“; ;class Derived
6、: public Base public: Derived() cout “DD“; void f() cout “Df“; ;int main() Derived d; return 0; 执行上面的程序将输出 ( )。 ( A) BBBfDD ( B) BBDfDDDf ( C) DD ( D) DDBBBf 19 下列关于类中成员函数特征的描述中错误的是 ( )。 ( A)类的成员函数一定是内联函数 ( B)类的成员函数可以重载 ( C)成员函数可以设置参数的默认值 ( D)成员函数可以是静态的 20 下面程序的结果为 ( )。 #include iostream.h void chan
7、ge(int a, int b) int temp; temp=a; a=b; b=temp; void main() int m,n; m=8; n=9; change(m,n); cout m “ n endl; ( A) 89 ( B) 98 ( C)程序有错 误 ( D) 99 21 在下面程序中,编译时出现错误的是 _。 Class A /(1) public: /(2) A() f(); /(3) void B() f(); virtual void f()const=0; /(4) ; ( A) -1 ( B) -2 ( C) -3 ( D) -4 22 下列关于运算符重载的描述
8、中,正确的是 _ 。 ( A)运算符重载可以改变操作数的个数 ( B)运算符重载可以改变运算符的优先级 ( C)运算符重载可以改变运算符的结合性 ( D)运算符重载可以使运算符实现特殊功能 23 以下程序中调用 cin函数给变量 a输人数值的方法是错误的,其错误原因是 #include iostream h void main() int*p, *q, a, b; p=i 5;i+)cout *(p+i) “,“;能够依次输出int型一维数组 a的前 5个元素。由此可知,变量 P的定义及初始化语句是 ( )。 ( A) int *p=a; ( B) int p=a; ( C) *p=a; (
9、D) p=a; 32 有如下的运算符重载函数定义: double operator+(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是 ( )。 ( A) #NAME? ( B)两个 int型参数的和也应该是 int型,而这里将 +的返回类型声明为 double ( C)没有将运算符重载函数声明为某个类的友元 ( D) C+已经提供了求两个 int型数据之和的运算符 +,不能再定义同样的运算符 33 下列有关类和对象的叙述不正确的是 ( A) 任何一个对象都归属于一个具体的类 ( B)类与对象的关系和数据类型与变量的关系相似 ( C)类的数据
10、成员不允许是另一个类的对象 ( D)一个类可以被实例化成多个对象 34 在表达式 x+y*z中, +是作为成员函数重载的运算符, *是作为非成员的函数重载的运算符。下列叙述中正确的是 ( A) operator+有两个参数, operator*有两个参数 ( B) operator+有两个参数, operator*有一个参数 ( C) operator+有一个参数, operator*有两个参数 ( D) operator+有一个参数, operator*有一个参数 35 若有如下类声明 class MyClasspublic: MyClass()cout 1; ;执行下列语句 MyClass
11、 a, b2, *p2;以后,程序的输出结果是 ( A) 11 ( B) 111 ( C) 1111 ( D) 11111 36 37 若有定义语句 :int x=3,y=2,z=1;则表达式 x y?x:y的值是 _。 38 为了克服软件危机提出了【 】概念。 39 队列是限定在表的 一端进行插入和在另一端进行删除操作的线性表。允许插入的一端称作 _。 40 在一个容量为 25的循环队列中,若头指针 front 15,尾指针 rear=6,则该循环队列中共有【 】个元素。 41 对基类数据成员的初始化必须派生类的构造函数中的 _处执行。 42 根据程序中的注释将下列缺失部分补充完整。 cla
12、ss A char*a; public: A(): a(0) A(char*aa) 把 aa所指字符串复制给 a所 指向的存储空间 a= 【 】 charstrlen(aa)+1; strcpy(a, aa); A()deletea; 43 下列程序的输出结果是【 】。 #include iostream. h void main() double d=3.2; int x, y; x=1.2; y=(x+ 3.8)/5.0; cout y*d end1; 44 在析构函数中调用虚函数时,采用【 】联编。 45 以下程序的执行结果 是【 】。 #include iostream using n
13、amespace std; class base public: virmal void who()cout “Base Class“ endl; ) ; class Derivedl:public Base public: virtual void who()cout “Derivedl Class“ endl; ; class derived2:public Base public: virtual void who()cout “Derived2 Class“ endl; ) ; int main(int argc, char*argv) base obj1, *P; deliVedl
14、obj2; derived2 obj3; p=。 32 【正确答案】 D 【试题解析】 此题考查的是运算符的重载。 c+语言规定,不能作为非成员函数重载的运算符有 =、 、 ()、 -以及所有的类型转换运算符,故选项 A)错误;运算符重载对返回值类型没有限制,故选项 B)错误; C+并不强制要求非成员重载的运算符一定是某个类的友元,所以选项 C)错误:题目中 重载的 “+”运算符的两个参数都是 int类型,而 C+已经提供了求两个血型数据之和的运算符 +,编译器无法区分应该调用哪一个,所以应该选择选项 D)。 33 【正确答案】 C 【试题解析】 对象是类的实例,类的成员可以是其他类的对象,那
15、么在该类实例化的时候,必须保证其他类的对象已经生成,否则将会出现错误。 34 【正确答案】 C 【试题解析】 本题考查运算符重载。运算符可重载为成员函数,也可重载为友元函数。当重载为成元函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个,当重载为友元函 数时,其参数个数应与操作数个数相同。 35 【正确答案】 B 【试题解析】 本题考查的知识点是:对象的构造。本题一共声明了 1个 MyClass对象 a, 1个包含 2个 MyClass对象的数组 b和 1个包含 2个 MyClass 对象指针的数组 p。所以一共创建了 3个 MyClass类的对象 (声明对象指针时并不会创建对象 )
16、,即调用了 3次构造函数。故本题应该选择 B。 36 【正确答案】 4, 5 37 【正确答案】 2 38 【正确答案】 软件工程 【试题解析】 软件工程的出现是由于软件危机的出现。 39 【正确答案】 队尾 【试题解析】 在队列中,允许插入的一端叫做 “队尾 ”,允许删除的一端叫做 “队头 ”。 40 【正确答案】 16 【试题解析】 设循环队列的容量为 m 如果 rear front则循环队列中的元素个数为 rear-front; 如果 rear front,则循环队列中的元素个数为 m+(rear-front)。 在本题中, front=15, rear=6,即 rear front,因
17、此,循环队列中的元素个数为 m+(rear-front) 25+(6-15)=16。 41 【正确答案】 成员初始化列表 【试题解析】 C+语言规定对基类数据成员的初始化必须在派生类的构造函数中的成员初始化列表中进行。 42 【正确答案】 new 【试题解析】 本题主要考查对动态存储分配的掌握。要将字符串复制给 a所指向的内存空间,需先给指针 a动态分配内存空间,故使用运算符 new。 43 【正确答案】 0 44 【正确答案】 静态 45 【正确答案】 Base Class Derivedl Class Derived2 Class 46 【正确答案】 函数名 【试题解析】 重载函数的函数名
18、应和原函数一致。注意:重载函数的方式方法,重载函数的参数,重载函数的返回值。 47 【正确答案】 编译 【试题解析】 C+语言是以编译方式实现的高级语言, C+语言程序的实现,必须要使用某种 C+语言的编译器对程序进行编译。 48 【正确答案】 基类或父类 【试题解析】 本题考查的知识点是:继承与派生的基本概念。用来派生新类的类称为基类,而派生出的新类称为它的子类或派生类。故本题应该填基类或父类。 49 【正确答案】 指针 【试题解析】 如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组称之为指针数组,它是指针的集合。 50 【正确答案】 类的静态 【试题解析】 类的非静态成员属于类的实例所有,每创建一个类的实例都在内存中为非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。