1、二级 C+分类模拟 258及答案解析(总分:56.50,做题时间:90 分钟)一、选择题(总题数:35,分数:56.50)1.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0):valB(x)coutvalB; Base()coutvalB; private: int valB; ; class Derived:public Base public: Derived(int x=0,int y=0):Base(x),valD(y)coutvalD; Derived()coutvalD; pr
2、ivate: int valD; ; int main() Derived obj12(2,3); return 0; 运行时的输出结果是_。(分数:3.00)A.2332B.2323C.3232D.32232.结构化程序设计的基本原则不包括_。(分数:1.00)A.多态性B.自顶向下C.模块化D.逐步求精3.以下程序的输出结果是 _ 。 min() int i=0,a=0; while(i20) for(;) if(i%10)=0)break; else i-; i+=11;a+=i; coutaendl; (分数:2.00)A.21B.32C.33D.114.下列关于运算符重载的叙述中,正
3、确的是_。(分数:2.50)A.通过运算符重载机制可以为 C+语言扩充新的运算符B.运算符重载的作用是使已有的运算符作用于类的对象C.重载运算符的操作数类型可以全部为基本类型D.所有运算符都可以重载5.下列叙述中,不属于软件需求规格说明书的怍用的是_。(分数:1.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析6.类的析构函数的作用是(分数:2.00)A.一般成员函数的初始化B.类的初始化C.对象的初始化D.删除类创建的对象7.下列情况中,不会调用拷贝构造函数的是_。(分数:1.00)A
4、.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时8.结构化程序设计的基本原则不包括_。(分数:1.00)A.多态性B.自顶向下C.模块化D.逐步求精9.下面对对象概念描述错误的是_。(分数:1.00)A.任何对象都必须有继承性B.对象是属性和方法的封装体C.对象间的通讯靠消息传递D.操作是对象的动态性属性10.若已定义; inta=0,1,2,3,4,5,6,7,8,9,*p=a,i; 其中 0i=9,则对 a数组元素不正确的引用是 _ 。(分数:2.00)A
5、.ap-aB.x( class TV public: TV(int s=41):size(s) TV(const TV TV() private: int size; ; TV fun(TV return t; int main() TV x, y; x=fun(y); return 0; 此程序运行时输出字符 1的个数是_。(分数:1.00)A.1B.2C.3D.414.有如下两个类定义: class XX private: double x1; protected: double x2; public: double x3; ; class YY: protected XX private
6、: double y1; protected: double y2; public: double y3; ; 在类 YY中保护成员变量的个数是_。(分数:1.00)A.1B.2C.3D.415.下面程序的输出结果是_。 #include iostream using namespace std; int fun(char *s); int main() coutfun(“Hello“); return 0; int fun(char *s) char *t=s; while(*t!=“/0“)t+; return(t-s); (分数:3.00)A.语法错,不能输出正确结果B.5C.6D.01
7、6.有如下程序: #includeiostream using namespace std; class Instrument public: virtual void Display()=0; ; class Piano: public Instrument public: void Display() /*函数体略*/ ; int main() Instrument s; Instrument*P=0; /; return 0; 下列叙述中正确的是_。(分数:1.00)A.语句“Insturment*P=0;”编译时出错B.语句“Instrument s;”编译时出错C.类 Piano中的
8、 Display函数不是虚函数D.类 Instrument是一个虚基类17.已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是_。(分数:1.00)A.这是运算符一的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变类的任何数据成员的值18.凡是函数中未指定存储类别的局部变量,其隐含的存储类型是 _ 。(分数:2.00)A.autoB.staticC.regiserD.extern19.已知类 MyClass的定义如下: class HyClass public: HyC
9、lass(int d)data=d; NyClass() private: int data; ; 下列对 MyClass类对象数组的定义和初始化语句中,正确的是_。(分数:2.50)A.MyClass arrays2;B.MyClass arrays2=MyClass(5);C.MyClass arrays2=MyClass(5), MyClass(6);D.MyClass*arrays2=new MyClass(2);20.有如下程序: #includeiostream using namespace std; class Point public: static int number;
10、public: Point() number+; Point() number -; ; int Point:number=0; int main() Point *ptr; Point A, B; Point *ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; deleteptr; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.3B.4C.6D.721.下面程序的执行结果是 #include“iostream.h“ void main() int*p,r; pnew int; *p2
11、0; rsizeof(*p); coutrendl; delete p; (分数:2.00)A.程序错误B.内存为 20地址的大小C.20D.422.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 _ 。(分数:2.00)A.publicB.protectedC.privateD.static23.索引属于(分数:1.00)A.模式B.内模式C.外模式D.概念模式24.在一个长度为 n的线性表中删除一个元素,最坏情况下需要移动的数据元素数目为 _ 。(分数:1.00)A.1B.n-1C.n+1D.n225.对类成员访问权限的控制,是通过设置成员的访问控制属
12、性实现的,下列不是访问控制属性的是_。(分数:1.00)A.公有类型B.私有类型C.保护类型D.友元类型26.下列对于软件测试的描述中正确的是_。(分数:2.50)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误D.软件测试的目的是使程序符合结构化原则27.若 MyClass为一个类,执行“MyClass a4,*p5;”语句时会自动调用该类构造函数的次数是_。(分数:2.50)A.2B.5C.4D.928.有如下程序: #includeiostream using namespace std; class Base pu
13、blic: virtual void Show()cout“B“; ; class Derived:public Base public: void Show()cout“D“; ; int main() Base *p1=new Derived; Derived *p2=new Derived; p1-Show(); p2-Show(); delete p1; delete p2; return 0; 运行这个程序的输出结果是_。(分数:2.00)A.BBB.BDC.DBD.DD29.下列有关类继承的叙述中,错误的是_。(分数:1.00)A.继承可以实现软件复用B.虚基类可以解决由多继承产生
14、的二义性问题C.派生类构造函数要负责调用基类的构造函数D.派生类没有继承基类的私有成员30.下面程序的输出结果是_。 #includeiostream.h #includestring.h void main() char p110,p210; strcpy(p1,“abc“); strcpy(p2,“ABC“); char str50=“xyz“; strcpy(str+2,strcat(p1,p2); coutstr; (分数:1.00)A.xyzabcABCB.zabcABCC.xyabcABCD.yzabcABC31.有如下函数定义: void func(int a,intb+; 若执
15、行代码段: int x=0,y=1; func(x,y); 则变量 x和 y的值分别是_。(分数:2.00)A.0和 1B.1和 1C.0和 2D.1和 232.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析33.下面 _ 机制允许对一个函数名给出多个函数定义(分数:2.00)A.封装性B.继承性C.函数重载D.多态性34.下列语句中,正确的是_。(分数:1.00)A.char str=“abcde“;B.char*str=“abcde“;C.char str5=“abcde“;D.char*str5=“abcde“;35
16、.下列关于基类和派生类关系的叙述中,正确的是_。(分数:1.00)A.每个类最多只能有一个直接基类B.派生类中的成员可以访问基类中的任何成员C.基类的构造函数必须在派生类的构造函数体中调用D.派生类除了继承基类的成员,还可以定义新的成员二级 C+分类模拟 258答案解析(总分:56.50,做题时间:90 分钟)一、选择题(总题数:35,分数:56.50)1.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0):valB(x)coutvalB; Base()coutvalB; private:
17、int valB; ; class Derived:public Base public: Derived(int x=0,int y=0):Base(x),valD(y)coutvalD; Derived()coutvalD; private: int valD; ; int main() Derived obj12(2,3); return 0; 运行时的输出结果是_。(分数:3.00)A.2332 B.2323C.3232D.3223解析:解析 在主函数中创建类 Derived对象 obj12(2,3)时,因为类 Derived是从基类 Base派生而来,所以首先调用基类的构造函数,输出
18、 2,再调用派生类构造函数,输出 3。当主函数运算结果时,首先调用派生类的析构函数,输出 3,再调用基类的析构函数输出 2。所以输出结果为 2332。2.结构化程序设计的基本原则不包括_。(分数:1.00)A.多态性 B.自顶向下C.模块化D.逐步求精解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。3.以下程序的输出结果是 _ 。 min() int i=0,a=0; while(i20) for(;) if(i%10)=0)break; else i-; i+=11;a+=i; coutaendl; (分数:2.00)A.21B.32
19、C.33D.11解析:解析 本题是两个循环语句和一个判断语句的嵌套。For 循环的作用是在 i等于 10的时候跳出循环,故本题的答案为 B。4.下列关于运算符重载的叙述中,正确的是_。(分数:2.50)A.通过运算符重载机制可以为 C+语言扩充新的运算符B.运算符重载的作用是使已有的运算符作用于类的对象 C.重载运算符的操作数类型可以全部为基本类型D.所有运算符都可以重载解析:解析 运算符重载的主要目的是为了扩充运算符的应用范围,使对象直接参与表达式的运算。但并不能改变运算符的优先级、目数和结合性等基本性质。只能对已有的运算符进行重载,用户不能重载一个并不存在的运算符。不是所有运算符都能重载,
20、如以下运算符都不可以重载:成员运算符“.”、指针操作运算符“*”、作用域运算符“:”、三目运算符“?:”、求字节数运算符“sizeof()”。5.下列叙述中,不属于软件需求规格说明书的怍用的是_。(分数:1.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析 解析:解析 使用软件需求规格说明书的目的是便于用户、开发人员进行理解和交流,它能够反映出用户问题的结构,可以作为软件开发工作的基础和依据,而且可以作为确认测试和验收的依据。它是需求分析的结果,而不是为了便于开发人员进行需求分析。因此答
21、案是选项 D。6.类的析构函数的作用是(分数:2.00)A.一般成员函数的初始化B.类的初始化C.对象的初始化D.删除类创建的对象 解析:解析 析构函数就是用来释放对象的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放了。7.下列情况中,不会调用拷贝构造函数的是_。(分数:1.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时 C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时解析:解析 本题考查复制构造函数,在以下 3种情况下使用:程序中需要新建立一个对象,并用另一个对象对它初始化;函数的参
22、数为类的对象;函数的返回值是类的对象。其中 B选项是由赋值运算符重载实现的。8.结构化程序设计的基本原则不包括_。(分数:1.00)A.多态性 B.自顶向下C.模块化D.逐步求精解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。9.下面对对象概念描述错误的是_。(分数:1.00)A.任何对象都必须有继承性 B.对象是属性和方法的封装体C.对象间的通讯靠消息传递D.操作是对象的动态性属性解析:解析 由题意可知,对对象概念描述错误的是选项 A。10.若已定义; inta=0,1,2,3,4,5,6,7,8,9,*p=a,i; 其中 0i=9,则
23、对 a数组元素不正确的引用是 _ 。(分数:2.00)A.ap-aB.x( class TV public: TV(int s=41):size(s) TV(const TV TV() private: int size; ; TV fun(TV return t; int main() TV x, y; x=fun(y); return 0; 此程序运行时输出字符 1的个数是_。(分数:1.00)A.1B.2 C.3D.4解析:解析 只有调用拷贝构造函数 TV(const TV protected: double x2; public: double x3; ; class YY: prot
24、ected XX private: double y1; protected: double y2; public: double y3; ; 在类 YY中保护成员变量的个数是_。(分数:1.00)A.1B.2C.3 D.4解析:解析 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,所以基类的成员 x2、x3 变成了保护成员,派生类中的 y2也是保护成员,所以共有 3个保护成员。本题答案为 C。15.下面程序的输出结果是_。 #include iostream using namespace std; int fun(char *s);
25、 int main() coutfun(“Hello“); return 0; int fun(char *s) char *t=s; while(*t!=“/0“)t+; return(t-s); (分数:3.00)A.语法错,不能输出正确结果B.5 C.6D.0解析:16.有如下程序: #includeiostream using namespace std; class Instrument public: virtual void Display()=0; ; class Piano: public Instrument public: void Display() /*函数体略*/
26、; int main() Instrument s; Instrument*P=0; /; return 0; 下列叙述中正确的是_。(分数:1.00)A.语句“Insturment*P=0;”编译时出错B.语句“Instrument s;”编译时出错 C.类 Piano中的 Display函数不是虚函数D.类 Instrument是一个虚基类解析:解析 本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化”为 0的函数,包含纯虚函数的类为抽象类,抽象类不能被实例化,所以语句“Instrument s;”在编译时出错。17.已知在一个类体中包含如下函数原型:VOLUMEOPER ATO
27、R-(VOLUME)const;,下列关于这个函数的叙述中,错误的是_。(分数:1.00)A.这是运算符一的重载运算符函数B.这个函数所重载的运算符是一个一元运算符 C.这是一个成员函数D.这个函数不改变类的任何数据成员的值解析:解析 本题考核运算符的重载。题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用 const修饰的成员函数。18.凡是函数中未指定存储类别的局部变量,其隐含的存储类型是 _ 。(分数:2.00)A.auto B.staticC.regiserD.extern解析:解析 变量说明时使用 auto修饰的局部
28、变量是自动变量,auto 经常省略,在未指定存储类别时,默认为 auto。19.已知类 MyClass的定义如下: class HyClass public: HyClass(int d)data=d; NyClass() private: int data; ; 下列对 MyClass类对象数组的定义和初始化语句中,正确的是_。(分数:2.50)A.MyClass arrays2;B.MyClass arrays2=MyClass(5);C.MyClass arrays2=MyClass(5), MyClass(6); D.MyClass*arrays2=new MyClass(2);解析:
29、解析 该题考查的内容是类对象数组的构造函数的调用情况。考生应该清楚当对象数组被创建时系统会自动调用构造函数,类的定义中构造函数为有参数的构造函数,所以在初始化时,对象也应含有参数,根据题目要求知,正确答案为 C。20.有如下程序: #includeiostream using namespace std; class Point public: static int number; public: Point() number+; Point() number -; ; int Point:number=0; int main() Point *ptr; Point A, B; Point *
30、ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; deleteptr; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.3B.4C.6 D.7解析:解析 本题考查默认构造函数,题目中定义一个对象 A、B 以及对象数组 Point3,又定义了对象 C,共执行 6次构造函数,number 变为了 6,所以本题答案为 C。21.下面程序的执行结果是 #include“iostream.h“ void main() int*p,r; pnew int; *p20; rsizeof(*p); co
31、utrendl; delete p; (分数:2.00)A.程序错误B.内存为 20地址的大小C.20D.4 解析:解析 考查指针和运算符 sizeof的运用。 解题要点 理解 sizeof的用法,它可以运算出各种数据类型所占内存空间的多少。 错解分析 选项 C)中是指针 p所指向的内存地址中内容是 20。 考点链接 在用完申请后的内存应立刻释放。22.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 _ 。(分数:2.00)A.public B.protectedC.privateD.static解析:解析 因为 public类型的权限控制属性允许类对象对
32、类属性和方法进行访问。23.索引属于(分数:1.00)A.模式B.内模式 C.外模式D.概念模式解析:解析 内模式(Internal Schema)又称物理模式(Physical Schema),它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash等存取方式与存取路径。24.在一个长度为 n的线性表中删除一个元素,最坏情况下需要移动的数据元素数目为 _ 。(分数:1.00)A.1B.n-1 C.n+1D.n2解析:解析 在一般情况下,要删除第 i个元素时,首先是从第 i+1个元素开始,直到第 n个元素之间共 n-i个元素依次向前移动一个位置,删除结束后,线性表
33、的长度减 1。最坏情况指的是删除线性表的第一个元素,则需要移动表中第 1个元素以外所有的元素,答案为 B。25.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是_。(分数:1.00)A.公有类型B.私有类型C.保护类型D.友元类型 解析:解析 所谓的访问控制只包含公有类型、私有类型和保护类型 3种,友元可以是一个函数,也可以是一个类。26.下列对于软件测试的描述中正确的是_。(分数:2.50)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:
34、解析 软件测试是保证软件质量的关键环节,直接影响着软件的质量评估。软件测试不仅要讲究策略,而且要讲究时效性。软件测试的目的是尽可能多地发现程序中的错误。27.若 MyClass为一个类,执行“MyClass a4,*p5;”语句时会自动调用该类构造函数的次数是_。(分数:2.50)A.2B.5C.4 D.9解析:28.有如下程序: #includeiostream using namespace std; class Base public: virtual void Show()cout“B“; ; class Derived:public Base public: void Show()c
35、out“D“; ; int main() Base *p1=new Derived; Derived *p2=new Derived; p1-Show(); p2-Show(); delete p1; delete p2; return 0; 运行这个程序的输出结果是_。(分数:2.00)A.BBB.BDC.DBD.DD 解析:解析 在基类 Base中定义了虚函数 Show()输出字符B,而在派生类 Derived中对虚函数Show()进行了重新定义,输出字符D。在主函数中对基类和派生类中的虚函数 Show()进行了多态调用,此时调用的是派生类中重新定义的 Show(),输出字符D。29.下列
36、有关类继承的叙述中,错误的是_。(分数:1.00)A.继承可以实现软件复用B.虚基类可以解决由多继承产生的二义性问题C.派生类构造函数要负责调用基类的构造函数D.派生类没有继承基类的私有成员 解析:解析 3 种继承方式中,派生类继承了基类的私有成员,但不能被直接访问,可以通过派生类的友元函数去访问基类的私有成员。30.下面程序的输出结果是_。 #includeiostream.h #includestring.h void main() char p110,p210; strcpy(p1,“abc“); strcpy(p2,“ABC“); char str50=“xyz“; strcpy(st
37、r+2,strcat(p1,p2); coutstr; (分数:1.00)A.xyzabcABCB.zabcABCC.xyabcABC D.yzabcABC解析:解析 该函数的调用方式是 strcpy(字符数组,字符串),其中字符串可以是串常量,也可以是字符数组。函数的功能是将字符串完整地复制到字符数组中,字符数组中原有内容被覆盖。使用该函数时注意:字符数组必须定义得足够大,以便容纳复制过来的字符串,复制时,连同结束标志/0 一起复制;连接前两个字符串都有结束标志“/0“,连接后“符数组“中存储的字符串的结束标志“/0“被舍弃,只在目标串的最后保留一个“/0“;不能用赋值运算符=将一个字符串直
38、接赋值给一个字符数组,只能用strcpy()函数来处理,strcat(字符数组,字符串)的功能是把字符串连接到字符数组中的字符串尾端,并存储于字符数组中,字符数组中原来的结束标志,被字符串的第一个字符覆盖,而字符串在操作中未被修改。31.有如下函数定义: void func(int a,intb+; 若执行代码段: int x=0,y=1; func(x,y); 则变量 x和 y的值分别是_。(分数:2.00)A.0和 1B.1和 1C.0和 2 D.1和 2解析:解析 此题考查的是函数参数的传递方式。此题中形参 a是普通参数,即传值调用,函数中对 a增 1不会影响到实参 x的值;形参 b是传
39、址调用,函数中对 b增 1同时会改变实参 y的值。故最终结果是0和 2。32.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析 解析:解析 软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。它的基本活动包括软件规格说明、软件开发、软件确认、软件演进。33.下面 _ 机制允许对一个函数名给出多个函数定义(分数:2.00)A.封装性B.继承性C.函数重载D.多态性 解析:34.下列语句中,正确的是_。(分数:1.00)A.char
40、 str=“abcde“;B.char*str=“abcde“; C.char str5=“abcde“;D.char*str5=“abcde“;解析:解析 本题考查字符串的定义,A 选项中,定义了一个字符,而用字符串赋值,所以错误,C 选项定义了字符数组,一个字符所占空间是 1位,再加上隐含的“0”,一共是 6位,所以字符数组的大小应该为 6,D 选项定义了一个字符串指针数组,是指一个数组里面装着指针,赋值错误。所以答案为 B。35.下列关于基类和派生类关系的叙述中,正确的是_。(分数:1.00)A.每个类最多只能有一个直接基类B.派生类中的成员可以访问基类中的任何成员C.基类的构造函数必须在派生类的构造函数体中调用D.派生类除了继承基类的成员,还可以定义新的成员 解析:解析 本题考查派生类与基类的关系,派生类可以有多个直接基类,而派生类有三种继承方式,在私有继承中,派生类的成员并不能访问基类的成员。如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数时,在派生类构造函数的定义中可以省略对基类构造函数的调用。所以本题答案为 D。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1