版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(选择题)模拟试卷20(共9套)(共221题)国家二级C++机试(选择题)模拟试卷第1套一、选择题(本题共18题,每题1.0分,共18分。)1、下列语句中,与语句“n=(a>b?co>c?1:0):0);”的功能等价的是()。A、if(a<b)n=0;B、if((a>b)‖(b>c))n=l;elsen=0;C、if(a>b)ifco>c)n=1;elsen=0;elsen=0;D、if(a>b)n=1;elseif(b<=c)n=1;elseif(b>c)n=1;elsen=0;标准答案:C知识点解析:条件表达式(a>b?(b>c?1:0):0)的含义是,如果a>b成立,则此表达式的值等于条件表达式(b>c?1:0)的值,否则其值等于0。而条件表达式(b>c?1:0)的含义是,如果b>c成立,其值等于1,否则其值等于0。2、在深度为7的满二叉树中,叶子结点的个数为()。A、32B、31C、64D、63标准答案:C知识点解析:所谓满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点。也就是在满二叉树中,每一层上的结点数都是最大结点数,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。对于深度为7的满二叉树,叶子结点所在的是第7层,一共有27-1=64个叶子结点。全部结点共27-1=127个。3、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A、O(n)B、O(n2)C、O(log2n)D、O(nlog2n)标准答案:C知识点解析:对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较n次。4、若已定义inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是()。A、a[p-a]B、*(&a[i])C、p[i]D、a[10]标准答案:D知识点解析:数组有N个元素,则数组元素引用为a(0)~a(m-1),共计N个,没有a(10)2这个元素,最后的元素是a(9)。5、下列程序的输出结果为2,横线处应添加语句()。#include<iostream>usingnamespacestd;classTestClass1{public:voidfun(){cout<<1;}};classTestClass2:publicTestClass1{public:voidfun(){cout<<2;}};intmain(){TestClass1*p=newTestClass2;p->fun();deletep;return0:}A、publicB、privateC、virtualD、protected标准答案:C知识点解析:由主函数main入手,定义TestClass1类的指针对象p指向派生类TestClass2。因为基类和派生类中都有fun函数,题目要求输出为2,就是基类对象访问派生类中fun函数。通过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同名函数。所以这里将基类中的:fun函数声明为virtual。并且当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。6、下面不属于软件设计原则的是()。A、抽象B、模块化C、自底向上D、信息隐藏标准答案:C知识点解析:软件设计的基本原则包括抽象、信息隐藏、模块化、局部化、确定性、一致性、完备性和可验证性。7、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、交C、投影D、并标准答案:A知识点解析:选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。投影也是单目运算,该运算从表中选出指定的属性值组成一个新表。自然连接是一种特殊的等价连接,它将表中有相同名称的列自动进行记录匹配。自然连接不必指定任何同等连接条件。8、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、并C、交D、差标准答案:D知识点解析:由关系T中的数据可以看出,其数据由属于关系R但是不属于关系S的数据组成。所以关系T是由关系R和S通过差运算得到的。9、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A。10、一个工作人员可使用多台计算机,而一台计算机被多个人使用,则实体工作人员与实体计算机之间的联系是A、一对一B、一对多C、多对多D、多对一标准答案:C知识点解析:如果一个工作人员只能使用一台计算机且一台计算机只能被一个工作人员使用,则关系为一对一;如果一个工作人员可以使用多台计算机,但是一台计算机只能被一个工作人员使用,则关系为一对多;如果一个工作人员可以使用多台计算机,一台计算机也可以被多个工作人员使用,则关系为多对多。11、有如下程序:#includeusingnamespacestd;intmain(){int*p;*p=9;cout<<ˊˊThevalueatp:ˊˊ<<ˊˊ*p;return0;}编译运行程序将出现的情况是()。A、编译时出现语法错误,不能生成可执行文件B、运行时一定输出:Thevalueatp:9C、运行时一定输出:Tbevalueatp:*9D、运行时有可能出错标准答案:D知识点解析:此题考查的是指针的使用。本题中,在给*p赋值前,指针p并没有指向一个具体的对象。此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。12、在数据库设计中,将E-R图转换成关系数据模型的过程属于A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:数据库的设计阶段包括需要分析、概念设计、逻辑设计和物理设汁,其中将E—R图转换成关系数据模型的过程属于逻辑设计阶段。13、为了提高函数调用的实际运行速度,可以将较简单的函数定义为()。A、内联函数B、重载函数C、递归函数D、函数模板标准答案:A知识点解析:C++引入内联函数的原因是用它来取代C中的预处理宏函数。两者的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的。内联函数在调用时像宏函数一样展开,所以它没有一股函数的参数压栈和退栈操作,减少了调用开销,因此,内联函数比普通函数有更高的执行效率。14、有如下程序:#inc1ude<iostream>usingruunespacestd;c1assObj{staticinti;public:Obj(){i++}——Obj(){i——;}staticintgetVal(){returni;}};intObj::i=0;voidf(){Objob2;cout<<ob2.getVal();}intmain(){Objobl;f();Obj*ob3=newObj;cout<<ob3—>getVal();deleteob3;cOut<<Obj::getVal();retutn0;}程序的输出结果是()。A、232B、231C、222D、221标准答案:D知识点解析:此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0.在主函数中,首先定义了1个该类对象obl,所以构造函数被调用1次,i加1;然后调用函数f0,该函数中又定义了一个对象ob2,此时j再次加1变为2,然后通过函数getVal0输出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1:回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为l,输出1。故最终的输出结果是221。15、已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//……c2=c1+10;由此可知:为类MyClock重载的“+”运算符函数的声明是()。A、friendMyClockoperator+(MyClock,int);B、friendMyClockoperator+(MyClock,MyClock);C、friendMyClockoperator+(int,MyClock);D、MyClockoperator+(MyClock);标准答案:A知识点解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。16、下列关于派生类构造函数和析构函数的说法中,错误的是()。A、派生类的构造函数会隐含调用基类的构造函数B、如果基类中没有缺省构造函数,那么派生类必须定义构造函数C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D、在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数标准答案:D知识点解析:此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。17、下列程序段中包含4个函数。其中具有隐含this指针的是()。intfun1();classTest{public:intfun2();friendintfun3();staticintfun4();}A、fun1B、fun2C、fun3D、fun4标准答案:B知识点解析:this指针是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针知道自己属于哪一个对象。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确的地表示出了成员函数当前操作的数据所属的对象。18、下列关于继承方式的描述中,错误的是()。A、如果不显式地指定继承方式,缺省的继承方式是私有(private)B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员标准答案:D知识点解析:基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。国家二级C++机试(选择题)模拟试卷第2套一、选择题(本题共23题,每题1.0分,共23分。)1、算法的有穷性是指A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。2、下列符号中可以用作C++标识符的是()。A、_radiusB、foo~barC、elseD、3room标准答案:A知识点解析:此题考查的是C++语言中标识符的定义。标识符有字母、数字和下划线构成,其第一个字母必须是字母或下划线;定义标识符时,不要采用系统的保留字。3、下列数据结构中,属于非线性结构的是A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类:线性结构和非线性结构。循环队列、带链队列和带链栈都是线性结构,而二叉树是非线性结构。4、下列叙述中正确的是()。A、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D、循环队列中元素的个数是由队头指针和队尾指针共同决定标准答案:D知识点解析:循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变化也是通过队头指针和队尾指针来反映的。5、设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,reaF15,则循环队列中的元素个数为()。A、15B、16C、20D、0或35标准答案:D知识点解析:循环队列的队头指针和尾指针都等于15,此循环队列中元素的个数有两种情况,第一种情况是队头指针和尾指针都是第一次到达15,此时元素个数为O:第二种情况是队头指针第一次到达l5,而尾指针第二次到达15,此时元素个数为35。6、下列叙述中正确的是A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)标准答案:A知识点解析:本题主要考查的知识点为查找技术。顺序查找的使用情况:①线性表为无序表;②表采用链式存储结构。二分法查找只适用于顺序存储的有序表,并不适用于线性链表。7、在软件开发中,需求分析阶段产生的主要文档是()。A、可行性分析报告B、软件需求规格说明书C、概要设计说明书D、集成测试计划标准答案:B知识点解析:需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标与确认,又可以作为控制软件开发进程的依据。8、软件(程序)调试的任务是()。A、诊断和改正程序中的错误B、尽可能多地发现程序中的错误C、发现并改正程序中的所有错误D、确定程序中错误的性质标准答案:A知识点解析:在对程序进行了成功的测试之后将进入程序调试(通常称Debug,即排错)。程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执行并找出错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。9、数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。A、DB包含DBS和DBMSB、DBMS包含DB和DBSC、DBS包含DB和DBMSD、没有任何关系标准答案:C知识点解析:数据库系统(DatabaseSystem简称DBS)由下列几个部分组成:数据库(DB)、数据库管理系统(DBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。这五个部分构成了一个以数据库为核心的完整的运行实体,称为数据库系统。其中DB(DataBase)即数据库,是统…管理的相关数据的集合;DBMS(DatabaseManagementSystem)即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件。为用户或应用程序提供访问DB的方法。10、下列for循环的循环体执行次数为()。for(inti(0),j(10);i=j=4;i++,j--)A、0B、1C、4D、无限标准答案:D知识点解析:循环条件i=i=4;是个赋值语句,使得i,i的值非0,所以是死循环。11、有如下两个类定义:classXX{private:doublex1;protected:doublex2;public:doublex3;};classYY:protectedXX{private:doubleyl;protected:doubley2;public:doubley3;};在类YY中保护成员变量的个数是()。A、1B、2C、3D、4标准答案:C知识点解析:本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,所以基类的成员x2、x3变成了保护成员,派生类中的y2也是保护成员所以共有3个保护成员。本题答案为C。12、有如下程序:#includeusingnamespacestd;classAA{intk;protected:intn;voidsetK(intk){this->k=K;}public:voidsetN(intn){this->n=n;}};classBB:publicAA{/*类体略*/};intmain(){BBx;x.n=1;∥1x.setN(2);∥2x.k=3;∥3x.setK(4);∥4return0;}在标注号码的四条语句中正确的是()。A、1B、2C、3D、4标准答案:B知识点解析:因为类BB公有继承自类AA,所以AA中的保护成员和公有成员在类BB中仍是保护成员和公有成员。在选项B中调用了公有成员函数setN(intn){this->n=n;),对保护成员n进行赋值操作。13、有如下程序#include<iostream>usingnamespacestd;intmain(){chara;cin>>a;if(a=’*’)cout<<’’***’’<<end1;elsecout<<’’###’’<<end1;rerurn0:}输入字符+时,程序的运行结果是()。A、***B、###C、***###D、无输出标准答案:A知识点解析:本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算if后表达式的值,如果表达式的值为非零,则执行if后面的分支,否则执行与其匹配的else后面的分支。本题执行时虽然输入变量a的值为‘+’,但是在执行if后括号内表达式(a=’*’)的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值’*’,其ASCII码的值非零,执行if后面的输出语句“***”后回车。14、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assMyClass{public:MyClass(){++count;)~MyClass(){——count;)staticintgetCount(){retumcount;}private:staticintcount;};intMyClass::count0;intmain0{MyClassobj;cout<<obj.getCounto;MyClass*ptr=newMyClass;cout<<MyClass::getCount0;deleteptr;cout<<MyClass::getCount();return0;}程序的输出结果是()。A、121B、232C、221D、122标准答案:A知识点解析:此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了obj对象,其构造函数使静态数据成员count增l,故输出“1”;然后通过指针动态创建了MyClass类的对象,构造函数被再次调用,count变为2,输出“2”;接着删除创建的MyClass类的对象,调用析构函数,count减1变为1,输出“1”。故最终输出结果是121。15、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlong>>fun(Samples);public:Sample(longa){x==a;}private:};longfun(Samples){if(s.x<2)return1:returns.X*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}return0;}运行时输出的结果是()。A、120B、16C、154D、34标准答案:C知识点解析:此题考查的是友元函数和递归函数。因为fun函数是Sample类的友元函数,所以fun函数可以直接访问Sample类对象的私有成员x。主函数调用fun函数,构造参数为0~5。当n小于2时,fun函数返回1,其余返回值为n*fun(n-1)。n取0~5的值时fun(n)依次为1,1,2,6,24,120,累加结果为154。16、有如下程序:#inc1ude<iostream>usingnamespacestd;classA{public:A(){cout<<"A";}};classB{public:B(){cout<"B";}}classC:publicA{Bb;public:C(){cout<<"C";)};intmain(){Cobj;return0;}执行后的输出结果是()。A、CBAB、BACC、ACBD、ABC标准答案:D知识点解析:此题考查的是类的继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。17、有如下程序:#include<iostream>#include<cstfing>usingoamespacestd;classXCF{inta;public:XCF(intaa=0):a(aa){cout<<’’1’’;}XCF(XCF&x){a=x.a;cout<<’’2’’;}-XCF(){cout<<a;}intGeta(){return,a;}};intmain(){XCFd1(5),d2(d1);XCF*pd=newXCF(8);cout<<pd->Geta0;deletepd;return0;}运行时的输出结果是()。A、1215588B、1218855C、12185D、128512标准答案:B知识点解析:在这个程序中在建立对象dl(5)时,调用构造函数XCF(intaa=0):a(aa){tout<<"1";),输出1;在建立d2(d1)时,调用拷贝构造函数XCF(XCF&x){a=x.a;cout<<"2";},输出2;在建立newXCF(8)对象时,调用构造函数XCF(intaa=0):a(aa){cout<<"1";},输出1;语句cout<<pd->Geta()的功能是输出8;语句deletepd;调用析构函数~XCF(),输出8;当退出程序时,分别释放对象d2、d1,输出55。18、有如下类定义:classAA{inta:public:AA(intn=0):a(n){}};classBB:publicAA{public:BB(intn)_________};其中横线处缺失部分是()。A、:a(n){}B、:AA(n){}C、{a(n);}D、{a=n;}标准答案:B知识点解析:根据派生类构造函数的一般格式:<派生类名>(<总参数表>):<基类名1>(<参数表1>),…<基类名n>(<参数表n>),<成员对象名1>(<参数表n+l>),…<成员对象名m>(<参数表n+m>)<派生类构造函数体>。在派生类BB的构造函数总参数表后面应该接上基类名AA和其参数。19、有如下程序:#include<iostream>usingnamespacestd;classInstrument{public:virtualvoidDisplay()=0;};classPiano:publicInstrument{public:voidDisplay(){/*函数体程序略*/}};intmain(){Instruments:Instrument*p=0;//…;return0;}下列叙述中正确的是()。A、语句"Insturment*p=0;"编译时出错B、语句"Instruments;"编译时出错C、类Piano中的Display函数不是虚函数D、类Instrument是一个虚基类标准答案:B知识点解析:由于函数Display()是一个纯虚函数,所以类Instrument是抽象类,而抽象类是不能定义对象的,因而选项B)为正确选项。20、若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为()。A、aB、AA.aC、a{}D、AA::a{}标准答案:A知识点解析:类AA的成员函数直接引用类AA的非静态数据成员。21、将运算符“+”重载为非成员函数,下列原型声明中,错误的是()。A、Myc1oCkoperator+(Myc1ock,long);B、Myc1oCkoperator+(Myc1ock,Myc1ock);C、Myc1oCkoperator+(long,long);D、Myc1oCkoperator+(long,Myc1ock);标准答案:C知识点解析:运算符重载不能有二义性,故选项C)不能区分运算符的准确含义。22、在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。A、ios_base::curB、ios_base::begC、ios_base::outD、ios_base::end标准答案:A知识点解析:C++流的定位方式(也就是指针移动方式)有三种,被定义为ios_base:.seekdir中的一组枚举符号:ios_base::beg相当于文件首;ios_base::cur相当于当前位置(负数表示当前位置之前);ios_base::end相对于文件尾。23、下列关于类模板的描述中,错误的是()。A、类模板的成员函数都是模板函数B、可以为类模板参数设置默认值C、类模板描述了一组类D、类模板中只允许有一个类型参数标准答案:D知识点解析:类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。一个类模板的格式是:template<<模板形参表声明><类声明>,<模板形参表声明>是由一个或多个模板形参组成。在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值。国家二级C++机试(选择题)模拟试卷第3套一、选择题(本题共22题,每题1.0分,共22分。)1、下面叙述中正确的是()。A、线性表是线性结构B、栈与队列是非线性结构C、线性链表是非线性结构D、二叉树是线性结构标准答案:A知识点解析:线性表是最简单的、最常用的一种线性结构。所谓线性链表指的是采用链式存储结构的线性表。栈和队列其实是一种特殊的线性表。树是一种简单的非线性结构,二叉树是树的一种。2、下列枚举类型的定义中,包含枚举值3的是()。A、enumtest{RED,YELLOW,BLUE,BLACK);B、enumtest{RED,YELLOW=4,BLUE,BLACK};C、enumtest{RED=-1,YELLOW,BLUE,BLACK);D、enumtest{RED,YELLOW=6,BLUE,BLACK};标准答案:A知识点解析:声明枚举类型的语法格式为:enum<类型名>{<枚举值表>};<枚举值表>包含多个枚举值,它们用逗号隔开,每个枚举值就是一个枚举常量。枚举值有两种定义形式:一是<值名>;二是<值名>=<整型常量>。关于枚举类型有以下4点说明:①一个enum类型实际上是int类型的一个子集,其每一个枚举值代表一个整数。②n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1,…n-1对应。③若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2…对应,直到下一个赋了值的枚举值或结束。因此,为枚举值赋的整型常量值应从左到右递增。④枚举类型的声明也可作为组声明若干整型符号常量的方法。也就是说,把每个要声明的符号常量作为一个枚举值,将各个枚举值合在一起定义成一个枚举类型。对于本题来说,在选项A中,对4个枚举值没有赋常量值,所以它们从左到右与整数0,1,2,3相对应。因而选项A为正确选项。3、要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是()。A、intx[3]={0,0,0);B、intx[]={0);C、staticintx[31={0};D、intx[]={0,0,0};标准答案:B知识点解析:当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项B)定义数组x时,没有给出数组的大小,初始化时只给出了一个元素0。所以数组x只包含一个元素为0的元素。4、冒泡排序在最坏情况下的比较次数是()。A、n(n+1)/2B、nlog2nC、n(n-1)/2D、n/2标准答案:C知识点解析:对n个结点的线性表采用冒泡排序,在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。5、下列叙述中正确的是A、带链栈的栈底指针是固定的B、带链栈的栈底指针是随栈的操作而动态变化的C、若带链队列的队头指针与队尾指针相同,则队列为空D、若带链队列的队头指针与队尾指针相同,则队列中至少有一个元素标准答案:B知识点解析:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。带链栈的栈底指针是随栈的操作而动态变化的;若带链队列的队头指针与队尾指针相同,则队列可能为0也可能为1。6、下列有关内联函数的叙述中,正确的是()。A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是return语句标准答案:C知识点解析:此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A)错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B)错误;内联函数只是比普通函数有更高的执行效率。7、下列描述中正确的是()。A、程序就是软件B、软件开发不受计算机系统的限制C、软件既是逻辑实体,又是物理实体D、软件是程序、数据与相关文档的集合标准答案:D知识点解析:计算机软件与硬件是计算机系统中相互依存的两部分。计算机软件是包括程序、数据及相关文档的完整集合。软件由两部分组成:一部分是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。软件具有以下六个特点:①软件是一种逻辑实体,而不是物理实体,具有抽象性。②软件的生产与硬件不同,它没有明显的制作过程。③软件在运行、使用期间不存在磨损、老化问题。④软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移值的问题。⑤软件复杂性高,成本昂贵。⑥软件的开发涉及诸多社会因素。8、软件生命周期中的活动不包括()。A、市场调研B、需求分析C、软件测试D、软件维护标准答案:A知识点解析:软件的生命周期描述了软件从产生到最终消亡的全过程,生命周期中的活动包括需求分析、软件设计(分为概要设计和详细设计)、软件实现、软件测试和软件维护,不包括市场调研。9、数据流图中带有箭头的线段表示的是()。A、控制流B、事件驱动C、模块调用D、数据流标准答案:D知识点解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。10、有如下类定义:classPoint{intX一,y;public:Point():x一(O),Y一(O){)Point(intX,intY=0):X_(x),y.(y){}};若执行语句Pointa(2),b[3],*c[4];则Point类的构造函数被调用的次数是()。A、2次B、3次C、4次D、5次标准答案:C知识点解析:此题考查的是类的构造函数。构造函数在对象创建的时候由系统自动调用。在Pointa(2),b[3],*c[4]语句中:a(2)是定义一个对象并传入构造函数2,所以此时会调用以此构造函数;b[3]是定义一个包含3个对象的数组,所以构造函数会被调用3次;*c【4]定义的是4个Point类对象指针的数组,它并没有创建任何Point对象,所以不调用构造函数。11、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;)~Test(){n一3;)staticintgetNum0{returnn;}private:staticintn;);intTest::n=l;intmain(){Test*P=newTest;deletep;cout<<"n"<A、n=0B、n=lC、n=2D、n=3标准答案:A知识点解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n一3”后n的值为0。12、数据库设计过程不包括()。A、概念设计B、逻辑设计C、物理设计D、算法设计标准答案:D知识点解析:数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计。13、)有如下程序#includeusingnamespacestd;classA{public:virtualvoidfunc1(){cout<<"A1";}voidfunc2(){cout<<"A2";}};classB:publicA{public:voidfunc1(){cout<<"B1";}voidfunc2(){cout<<"B2";}};intmain(){A*p=newB;P->func1();P->func2();return0;}运行此程序,屏幕上将显示输出()。A、B1B2B、A1A2C、B1A2D、A182标准答案:C知识点解析:此题考查的是虚函数的概念。此题中,func1是虚函数,func2是一般成员函数,而且在派生类与基类中都存在两个这样的函数。在主函数中,语句A*p=newB;定义了一个基类的指针p,并让它指向一个派生类对象。所以通过该指针调用func1时,运行的是派生类的版本,而通过该指针调用func2运行的是基类的版本。所以程序运行的最后输出是:B1A2。14、若字符指针p所指向的字符串为"abcdefg",在执行语句()。char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为A、9B、8C、7D、6标准答案:B知识点解析:字符指针p所指向的字符串为”abcdefg”,所以函数strlen(p)的值等于7,再加l,等于8。15、下列关于C++函数的说明中,正确的是()。A、内联函数就是定义在另一个函数体内部的函数B、函数体的最后一条语句必须是return语句C、标准C++要求在调用一个函数之前,必须先声明其原型D、编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式标准答案:C知识点解析:此题考查的是有关函数的概念。内联函数是在函数定义之前加关键字inline来声明的函数,而不是定义在另一个函数体内部的函数,故选项A错误;无返回值的函数在执行完最后一条语句后,会自动返回而不必加入retum语句,故选项B错误;如果函数只是返回值类型不同,而其它完全相同,则不能作为函数重载来使用,故选项D错误。16、以下关键字不能用来声明类的访问权限的是()。A、publicB、staticC、protectedD、private标准答案:B知识点解析:此题考查的是类的访问权限。在C++语言中,类的访问权限有公有、保护和私有三种。故本题选B。17、如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected标准答案:D知识点解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。18、下列关于析构函数的描述中,错误的是()。A、析构函数可以重载B、析构函数由系统自动调用C、每个对象的析构函数只被调用一次D、每个类都有析构函数标准答案:A知识点解析:一般情况下,析构函数在对象的生存周期即将结束的时候由系统自动调用。在调用完成之后,对象也就消失了,相应的内存空间也被释放。析构函数没有参数,因此析构函数不能重载,一个类中只能定义一个析构函数。19、生成派生类对象时,派生类构造函数调用基类构造函数的条件是()。A、无需任何条件B、基类中显示定义了构造函数C、派生类中显式定义了构造函数D、派生类构造函数明确调用了基类构造函数标准答案:A知识点解析:因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构造函数。20、在类中重载赋值运算符时,应将其声明为类的()。A、静态函数B、友元函数C、成员函数D、构造函数标准答案:C知识点解析:赋值运算符只能作为类的成员函数重载。21、有如下函数模板定义:templateTfunc(Tx,Ty){returnx*x+y*y;}在下列对func的调用中,错误的是()。A、func(3,5);B、func(3.0,5.5);C、func(3,5.5);D、func(3,5.5);标准答案:C知识点解析:此题考查的是函数模板的使用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题C选项中,编译系统从第一个参数“3”获得信息“int”和从第二个参数获得信息“double”两者矛盾,错误;A、B选项正确;D选项中,函数名后的是模板实参表,编译系统会将double型的形参“5.5”自动转化成int类型。22、下列关于模板的叙述中,正确的是()。A、如果一个类中存在纯虚函数,这个类就是类模板B、函数模板不能有形式参数表C、类模板是一种参数化类型的类,是类的生成器D、类模板中不能包含构造函数标准答案:C知识点解析:对于函数模板,数据类型本身成了它的参数,是一种参数化类型的函数。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。国家二级C++机试(选择题)模拟试卷第4套一、选择题(本题共22题,每题1.0分,共22分。)1、按照“后进先出”原则组织数据的数据结构是()。A、队列B、栈C、双向链表D、二叉树标准答案:B知识点解析:栈是限定在一端进行插入与删除的线性表。在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素:栈底元素总是最先被插入的元素,也是最后才能被删除的元素。即栈是按照“后进先出”(LastInFirstOut,简称LIFO)或“先进后出”(FirstInLastOut,简称FILO)的原则组织数据的。因此,栈也称为“后进先出表”或“先进后出”表。2、下列叙述中正确的是()。A、循环队列是队列的一种链式存储结构B、循环队列是队列的一种顺序存储结构C、循环队列是非线性结构D、循环队列是一种逻辑结构标准答案:B知识点解析:本题主要考查循环队列的概念,循环队列作为队列的种也应该是线性结构。队列是一种逻辑结构,而循环队列是一种顺序存储结构的队列。3、某系统总体结构图如下图所示:该系统总体结构图的深度是()。A、7B、6C、3D、2标准答案:C知识点解析:这个系统总体结构图是一棵树结构,在树结构中,根结点在第1层,同一层上所有子结点都在下一层,由系统总体结构图可知,这棵树共3层。在树结构中,树的最大层次称为树的深度。所以这棵树的深度为3。4、对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。A、log2nB、n/2C、nD、n+1标准答案:C知识点解析:在进行顺序查找过程中,如果被查的元素是线性表中的最后一个元素,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中的所有元素进行比较,这是顺序查找的最坏情况,需要比较的次数为n次。5、T列数据结构中,能用二分法进行查找的是A、顺序存储的有序线性表B、线性链表C、二叉链表D、有序线性链表标准答案:A知识点解析:二分法查找只适应于顺序存储的有序表。有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)的表。6、度为3的一棵树共有30个结点,其中度为3、l的结点个数分别为3、4。则该树中的叶子结点数为A、14B、15C、16D、不可能有这样的树标准答案:B知识点解析:根据题目可知本树中还有度为2的结点。树的总结点=(度1*个数+度2*个数…)+1,这里我们设度为2的结点数为x,那么30=3*3+2*x+1*4+1=2*x+14,由此可计算出x=8。树的叶子结点数等于总结点减去所有度不为0的结点,也就是30-3-8-4=15。7、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:编译软件、操作系统、汇编程序都属于系统软件,只有c教务管理系统才是应用软件。8、下列有关函数重载的叙述中,错误的是()。A、函数重载就是用相同的函数名定义多个函数B、重载函数的参数列表必须不同C、重载函数的返回值类型必须不同D、重载函数的参数可以带有默认值标准答案:C知识点解析:所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。所以本题答案为C。9、下面属于白盒测试方法的是()。A、等价类划分法B、逻辑覆盖C、边界值分析法D、错误推测法标准答案:B知识点解析:白盒测试的主要方法有逻辑覆盖、基本路径测试等。10、有如下程序:#includeusingnamespacestd;classCD{public:-CD0{cout<<一C;)private:charname[80];);intmain(){CDa,*b,d[2];retum0;}运行时的输出结果是()。A、CCCCB、CCCC、CCD、C标准答案:B知识点解析:在这个程序的主函数中定义了3个CD类的实例对象a,d[0],d[1】和一个指向CD类对象的指针变量b,所以当程序结束时,执行cD的析构函数输出字符C三次。11、有如下程序:#incluldeusingnamespacestd;classBase{private:voidfunl()const{tout<<"fun1";}protected:voidfun2()const{cout<<"fun2";}public:voidfun30const{cout<<"fun3";}};classDerived:protectedBase{public:voidfun4()const{tout<<"fun4";}};intmain(){Derivedobj;obj.fun1();∥①obj.tim2();∥②obj.fun3();∥③obj.fun40;∥④return0;}其中有语法错误的语句是()。A、①②⑧④B、①②③C、②③④D、①④标准答案:B知识点解析:此题考查的是保护继承。因为Derived以protected方式继承了Base类,所以父类Base中的公有成员和保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类不可访问。所以,主函数中通过Derived类的对象只能够访问到Derived类的公有成员。12、按照标识符的要求,下列选项中,()符号不能组成标识符。A、连接符B、下划线C、大小写字母D、数字字符标准答案:A知识点解析:此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格:标识符的长度是任意的,但由于编译系统的限制一般不超过31个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。13、在下列关系运算中,不改变关系表.中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、除标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S,交运算不改变关系表中的属性个数但能减少元组个数。14、下列枚举类型的定义中,包含枚举值3的是()。A、enumtest{RED,YELLOW,BLUE,BLACK};B、enumtest{RED,YELLOW=4,BLUE,BLACK);C、enumtest{RED=-1,YELLOW,BLUE,BLACK};D、enumtest{RED,YELLOW=6,BLUE,BLACK};标准答案:A知识点解析:声明枚举类型的语法格式为:enum<类型名>{<枚举值表>};<枚举值表>包含多个枚举值,它们用逗号隔开,每个枚举值就是一个枚举常量。枚举值有两种定义形式:一是<值名>;二是<值名>=<整型常量>。关于枚举类型有以下4点说明:①一个enum类型实际上是int类型的一个子集,其每一个枚举值代表一个整数。②n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1,…n-1对应。③若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2…对应,直到下一个赋了值的枚举值或结束。因此,为枚举值赋的整型常量值应从左到右递增。④枚举类型的声明也可作为组声明若干整型符号常量的方法。也就是说,把每个要声明的符号常量作为一个枚举值,将各个枚举值合在一起定义成一个枚举类型。对于本题来说,在选项A中,对4个枚举值没有赋常量值,所以它们从左到右与整数0。1,2,3相对应。因而选项A为正确选项。15、有如下程序:#inc1ude<iostream>usingnamespacestd;voidfunction2(intn);voidfunctionl(intn){if(n<=0)return;function2(n一2);}voidfunction2(intn){if(n<=0)return;functionl(n一1);}intmain(){functionl(5);return0:}下列关于程序运行情况的描述中,正确的是()。A、functionl运行1次,function2运行2次B、functionl运行2次,function2运行1次C、functionl运行2次,function2运行3次D、functionl运行2次,function2运行2次标准答案:D知识点解析:在土函数中执行functionl(5)时,会调用function2(3),function2(3)又会调用functionl(2),functionl(2)又会调用function2(0),到此相互调用结束。所以functionl()和function20各执行了2次。16、下列关于类和对象的叙述中,错误的是()。A、一个类只能有一个对象B、对象是类的具体实例C、类是对某一类对象的抽象D、类和对象的关系是一种数据类型与变量的关系标准答案:A知识点解析:此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。17、有如下类定义:classPoint{private;staticinthow_many;};________how_many=0;要初始化Point类的静态成员howmany,下划线处应填入的内容是()。A、ingB、staticintC、intPoint::D、staticintPoint::标准答案:C知识点解析:此题考查的是静态数据成员的初始化。静态数据成员应在类体外进行初始化,且初始化的一般格式为:数据类型类名::静态数据成员名=初始值。18、下列关于函数模板的描述中,错误的是()。A、从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准B、对于常规参数所对应的模板实参,任何情况下都不能省略C、虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参D、模板参数表不能为空标准答案:D知识点解析:在调用一个模板函数时,如果编译系统能够从模板实参表判断其中或全部虚拟类型参数对应的实际参数,而且它们正好是参数表中最后的若干参数,刚模板实参表中的那几个参数可以省略。19、有如下程序:#include<iostream>usingnamespacestd;classA{publicvirtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:PubliCA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb:show(b);return0:}运行时的输出结果是()。A、12B、34C、14D、32标准答案:D知识点解析:在派生类classB中对基类中的虚拟成员函数virtualvoidf()和实函数voidg()进行了重新定义,在主函数中通过语句show(b);调用派生类中的虚函数virtualvoidf(){cout<<3;}输出3,调用基类的实函数voidg(){cout<<2;}输出2。所以选项D为正确答案。20、要利用C++流进行文件操作,必须在程序中包含的头文件是()。A、iostreamB、fstreamC、strstreamD、iomanip标准答案:B知识点解析:要使用文件流对象进行针对磁盘文件的I/O操作,必须包含fstrem头文件。21、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+{Data};C、Data+operator{Data};D、operator+(Data,Data);标准答案:B知识点解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。22、已知将运算符’’+’’和’’*’’作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于()。A、c1.operator*(c2.operator+(c1))B、c1.operator+(c2.operator*(c1))C、c1.operator*(c1.operator+(c2))D、c2.operator+(c1.operator*(c1))标准答案:B知识点解析:表达式c1+c2*c1的含义是c1加上c2与c1的积。国家二级C++机试(选择题)模拟试卷第5套一、选择题(本题共18题,每题1.0分,共18分。)1、下列描述中正确的是A、数据的逻辑结构与存储结构必定是一一对应的B、由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C、程序设计语言中的数据一般是顺序存储结构,因此,利用数组只能处理线性结构D、以上三种说法都不对标准答案:D知识点解析:数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等。2、下列对队列的描述中正确的是()。A、队列属于非线性表B、队列按“先进后出”原则组织数据C、队列在队尾删除数据D、队列按“先进先出”原则组织数据标准答案:D知识点解析:队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾:允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最先能够被删除;反之,最后插入的元素将最后才能被删除。因此,队列又称“先进先出”或“后进后出”的线性表。3、下列叙述中正确的是()。A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、循环队列中的元素个数不会变化标准答案:A知识点解析:所谓循环结构就是将队列存储空间的最后一个位置绕到第一个位置上,形成逻辑上的环状空间,循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置,因此,队列中的元素数等于从队头指针front指向的后一个位置与队尾指针rear指向位置之间的元素数量。4、下列关于软件工程的描述中正确的是()。A、软件工程只是解决软件项目的管理问题B、软件工程主要解决软件产品的生产率问题C、软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D、软件工程只是解决软件开发中的技术问题标准答案:C知识点解析:软件工程是建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想是强调在软件开发过程中需要应用工程化原则。5、有如下两个类定义:classAA{};classBB{AAv1,*v2;BBv3;int*v4;};其中有一个成员变量的定义是错误的,这个变量是()。A、v1B、v2C、v3D、v4标准答案:C知识点解析:在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类BB时,不能包括其对象v3。6、下列对于软件测试的描述中正确的是()。A、软件测试的目的是证明程序是否正确B、软件测试的目的是使程序运行结果正确C、软件测试的目的是尽可能多地发现程序中的错误D、软件测试的目的是使程序符合结构化原则标准答案:C知识点解析:软件测试是为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。软件测试的目的要以查找错误为中心,而不是为了演示软件的正确功能。7、下列语句中,错误的是()。A、constintbuffer=-256;B、constanttemp;C、constdouble*point;D、constdouble*it=newdouble(5.5);标准答案:B知识点解析:符号常量声明语句的语法格式是:const类型名符号常量=初值表达式,选项B中未给常变量赋初值,故错误;而选项C中定义的是一个指向浮点型常量的指针,而不是定义一个浮点型常量,所以可以不赋初值。8、若字符指针p所指向的字符串为"abcdefg",在执行语句()。char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为A、9B、8C、7D、6标准答案:B知识点解析:字符指针p所指向的字符串为”abcdefg”,所以函数strlen(p)的值等于7,再加l,等于8。9、有如下程序:#includeUsingnamespacestd;ClassAmount{intmount;public;Amount(intn=0):amount(n){}IntgetAmountoconst{returnamount;}Amount&operator+=(Amounta){amount+=a.amount;return;}};intmain(){Amountx(3),y(7);X+=y;cout<A、*thisB、thisC、&amountD、amount标准答案:A知识点解析:比题考查的是“+”运算符重载和this指针。语句锄amount+=a.锄ount;实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。10、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assAA{intn;public:AA(intk):n(k){}intget0{returnn;}intget()const{retumn+1;)};intmain(){AAa(5);constAAb(6);eout<e_a.get()<<b.get();return0;}执行后的输出结果是()。A、55B、57C、75D、77标准答案:B知识点解析:此题考查的是常成员函数和函数的重载。所谓函数重载,是指同一个函数名可以对应着多个函数实现。一般对象a既可以调用普通成员函数get,也可以调用常成员函数get,由于常成员函数不能更新对象的数据成员,所以题目中通过对象a调用的函数为常成员函数:常对象b只能调用普通成员函数。11、有如下类声明:classSAMPLE{intn;public:SAMPLE(inti=0):n(i){}voidsetValue(intn0;};下列关于getValue成员函数的实现中,正确的是()。A、①B、②C、③D、④标准答案:D知识点解析:此题考查的是类的定义。一个类的长数据成员的初始化只能在成员初始化列表中进行,故选项A错误;常成员函数不能更新对象的数据成员,故选项B错误;静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,故选项C错误。12、有如下两个类定义:classAA{};classBB{AAvl,*v2;BBv3;int*v4;};其中有一个成员变量的定义是错误的,这个变量是()。A、v1B、v2C、v3D、v4标准答案:C知识点解析:在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类BB时,不能包括其对象v3。13、对于一个类定义,下列叙述中错误的是()。A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数标准答案:B知识点解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。14、下列有关继承和派生的叙述中,正确的是()。A、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成员C、基类对象可以赋值给派生类对象D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个描象类标准答案:D知识点解析:此题考查的是继承和派生。无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项A和B错误;公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象,所以选项C错误。15、有如下程序:#include<iostream>usingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}statichatgetVal(){returni;}};intObj::i=0;voidf(){Objob2;cout<<ob2.getVal();}intmain(){Objob1;f();Obj*ob3=newObj;cout<<ob3->getValq();deleteob3;cout<<Obj::getVal();return0;}程序的输出结果是()。A、232B、231C、222D、221标准答案:D知识点解析:此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0在主函数中,首先定义了1个该类对象ob1,所以构造函数被调用1次,i加1;然后调用函数f(),该函数中又定义了一个对象ob2,此时i再次加1变为2,然后通过函数getVal()揄出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1;回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为1,输出1。故最终的输出结果是221。16、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(){++count;}~MyClass(){--count;}staticintgetCount(){returncount;}private:staticintcount;};intMyClass::count=0;intmain(){MyClassobj;cout<<obj.getCount();MyClass*ptr=newMyClass;cout<<MyClass::getCount();deleteptr;cout<<MyClass::getCount();return0;}程序的输出结果是()。A、121B、232C、221D、122标准答案:A知识点解析:此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了obj对象,其构造函数使静态数据成员cout增1,故输出“1”;然后通过指针动态创建了Myclass类的对象,构造函数被再次调用,count变为2,输出“2”;接着删除创建的MyClass类的对象,调用析构函数,count减1变为1,输出“1”。故最终输出结果是121。17、下列运算符中,不能被重载的是()。A、&&B、!=C、.D、++标准答案:C知识点解析:此题考查的是运算符重载。在C++中,只有.、*、->*、::、?:这五个运算符不能重载。18、己知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为()。A、a.oper
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务产品代理权转让合同(二零二四年度)
- 二零二四年度办公设备采购及维护合同
- 二零二四年度版权兑换合同:文学作品版权交换协议
- 2024年度电站智能化升级改造合同
- 2024年度信息技术平台研发及运营合同
- 2024年体育赛事临时用电柴油发电机组租赁合同
- 2024年度委托合同标的及委托事务处理方式
- 2024年度广告发布合同:品牌宣传推广2篇
- 2024年度城市绿化用肥料采购与长期供应合同2篇
- 二零二四年度个人防护装备涂装协议
- 人文英语4写作
- 家族理事会成员职责
- 民航概论3-1大气层航空器活动的环境与空中导航
- 九年级上册语文《学习缩写》教案
- SDDC(孔内深层强夯)施工工法
- 两篇古典英文版成语故事画蛇添足
- 医院太平间管理规定
- 五脏养生大讲堂之肾脏与健康
- 华为的冬天 全文
- 安全文明建筑施工现场标识牌
- PPT用中国地图(可编辑)
评论
0/150
提交评论