国家二级(C++)机试模拟试卷8(共367题)_第1页
国家二级(C++)机试模拟试卷8(共367题)_第2页
国家二级(C++)机试模拟试卷8(共367题)_第3页
国家二级(C++)机试模拟试卷8(共367题)_第4页
国家二级(C++)机试模拟试卷8(共367题)_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级(C++)机试模拟试卷8(共9套)(共367题)国家二级(C++)机试模拟试卷第1套一、选择题(本题共38题,每题1.0分,共38分。)1、由于常对象不能被更新,因此()。A、通过常对象只能调用它的常成员函数B、通过常对象只能调用静态成员函数C、常对象的成员都是常成员D、通过常对象可以调用任何不改变对象值的成员函数标准答案:A知识点解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选A。2、关于在调用模板函数时模板实参的使用,下列表述中正确的是()。A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略标准答案:D知识点解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用"<>"括起来的参数表)或从模板函数实参表(用"()"括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表"<>"也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。3、下列符号中可以用做C++标识符的是()。A、_radiusB、foo~barC、elseD、3room标准答案:A知识点解析:本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项B包含了字符"~",选项C是关键字,选项D不能以数字开头。故答案为A。4、有如下头文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函数中,具有隐含的this指针的是()。A、f1B、f2C、f3D、f4标准答案:C知识点解析:只有类的非静态成员函数才隐含this指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为C。5、要利用C++流实现输入输出的各种格式控制,必须在程序中包含的头文件是A、fstreamB、istreamC、ostreamD、iomanip标准答案:D知识点解析:本题考查格式控制相关知识,属于基础知识,需要包含iomanip,所以D选项正确。6、有如下程序段:inti=1;while(1){i++;if(i==30)break;if(i%3==0)cout<<’*’;}执行这个程序段输出字符*的个数是A、30B、8C、9D、10标准答案:C知识点解析:本题中while循环中当i为3的倍数时输出*,而i为30时跳出循环,所以输出9个*,答案为C。7、下列有关继承和派生的表述中,正确的是A、作为虚基类的类不能被实例化B、派生类不能访问基类的保护成员C、派生类应当向基类的构造函数传递参数D、虚函数必须在派生类中重新实现标准答案:C知识点解析:作为虚基类的类可以被实例化,派生类公用继承和保护继承基类,都可以访问基类的保护成员。如果派生类没有对虚函数重新定义,那么就调用基类的虚函数。所以C选项正确。8、下列叙述中正确的是A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。9、有如下程序:#includeusingnamespacestd;intmain(){intx=4;do{x--;cout<A、输出31B、输出20C、输出3210D、死循环标准答案:A知识点解析:本题考查dowhile循环,执行第一次时,输出x为3,执行第二次的时候为1,所以输出结果为31,A选项正确。10、有如下类定义:classBag{public:Bag(strings="Small",stringcr="Black"):size(s),color(cr){}~Bag(){}private:stringsize,color;};若执行语句Bag*ptr,my,colleage[2],&sister=my;则Bag类的构造函数被调用的次数是A、2次B、3次C、4次D、5次标准答案:B知识点解析:本题考查默认析构函数,题中定义了一个对象和包含2个元素的一维对象数组,而对象指针不占用空间,对象引用也不会占用内存空间,所以不调用构造函数,那么析构函数就执行3次,答案为B。11、在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数A、相同,元素的存储顺序与逻辑顺序一致B、相同,但其元素的存储顺序可以与逻辑顺序不一致C、不同,但元素的存储顺序与逻辑顺序一致D、不同,且其元素的存储顺序可以与逻辑顺序不一致标准答案:A知识点解析:顺序表具有以下两个基本特征:线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中,每个元素占有相同的存储单元。A选项正确。12、以下关键字用来声明类的访问权限的是A、constB、staticC、protectedD、case标准答案:C知识点解析:C++中,关键字public、protected、private用来声明类的访问权限,答案为C。13、有如下类声明:classBase1{};classBase2{};classDerived:publicBase2,publicBase1{};在一个Derived对象消亡时,析构函数被调用的顺序是A、~Derived、~Base1、~Base2B、~Derived、~Base1、~Base2C、~Base1、~Base2、~DerivedD、~Base2、~Base1、~Derived标准答案:A知识点解析:C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;而析构函数是按构造函数运行顺序的逆序进行调用的,可知题目中析构函数的调用顺序为:派生类Derived的析构函数,Base1的析构函数,Base2的析构函数;答案为A。14、下面是重载为非成员函数的运算符的函数原型,其中错误的是()。A、Fractionoperator+(Fraction,Fraction);B、Fractionoperator-(Fraction);C、Fraction&operator=(Fraction&,Fraction);D、Fraction&operator+=(Fraction&,Fraction);标准答案:C知识点解析:本题考查四种运算符作为非成员函数的重载的使用方法,根据重载规则,本题答案为C,C项正确原型为:Fractionoperator=(Fraction&)。15、有如下类声明:classHow{intk;public:friendvoidshow();};则类How所拥有的构造函数的数量是A、1B、2C、3D、4标准答案:B知识点解析:类How的定义体中没有定义任何构造函数,所以编译器需要自动生成一个默认构造函数和复制构造函数,答案为B。16、设c1和c2是类MyClass的对象,若将前缀运算符"--"和运算符"/"作为类MyClass的友元函数重载,则表达式--c1/c2等价于A、operator/(c1.operator--(),c2)B、operator/(operator--(c1),c2)C、c1.operator--().operator/(c2)D、c2.operator/(operator--(c1))标准答案:B知识点解析:友元函数不是类的成员函数,所以友元函数的调用不需要使用类对象;另外运算符重载不改变运算符的优先级,所以先执行"--"运算符重载函数,之后执行"/"运算符重载函数,选项A、C、D错误,B正确,答案为B。17、有如下类声明:classWhy{intn;public:doubled;protected:longl;floatf;private:charc;};类Why的保护数据成员和私有数据成员的数量分别是A、1和1B、1和2C、2和1D、2和2标准答案:D知识点解析:C++中,使用class关键字定义的类,默认的成员访问级别是私有的,所以类Why中,保护成员有:l、f;私有成员有:n、c。答案为D。18、下列情况中,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时标准答案:B知识点解析:本题考查复制构造函数,在以下3种情况下使用:①程序中需要新建立一个对象,并用另一个对象对它初始化;②函数的参数为类的对象;③函数的返回值是类的对象。其中B选项是由赋值运算符重载实现的。19、下列函数模板的定义中,合法的是()。A、templateTabs(Tx){returnx<0?-x:x;}B、templateclassTabs(Tx){returnx<0?-x:x;}C、templateTabs(Tx){returnx<0?-x:x;}D、templateTabs(Tx){returnx<0?-x:x;}标准答案:A知识点解析:本题考查模板函数的基本概念,根据模板函数的定义,所以答案为A。20、下列语句中错误的是()。A、constinta;B、constinta=10;C、constint*point=0;D、constint*point=newint(10);标准答案:A知识点解析:const是一个C++语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。A选项没有初始化,B、C、D选项都正确。21、有如下程序:#includeusingnamespacestd;classTV{public:TV(ints=41):size(s){}voidPrint(){cout<<’/’<<’N’<A、/N41/C54B、/N41/S54C、/C41/N54D、/C41/C54标准答案:A知识点解析:本题考查构造函数相关知识,本题中定义一个对象room1,执行room1.Print时执行构造函数给size赋值为41,然后执行voidPrint(){cout<<’/’<<’N’<22、负责数据库中查询操作的数据库语言是()。A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:C知识点解析:数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。23、若MyClass是一个类名,且若MyClass是一个类名,且有如下语句序列MyClassc1,*c2;MyClass*c3=newMyClass;MyClass&c4=c1;上面的语句序列所定义的类对象的个数是语句序列A、1B、2C、3D、4标准答案:B知识点解析:本题考查对象的定义,定义一个类对象就需要占用空间,其中c1、c3都占用了空间,c2、c4为指针只占一个指针空间,所以B选项正确。24、关于C++流,下面的表述中正确的是A、利用C++流能够借助于流对象进行输入输出B、利用C++流只能进行格式化输入输出C、利用C++流只能借助于cin和cout进行输入输出D、利用C++流只能使用运算符>>和<<进行输入输出标准答案:A知识点解析:输入输出流出了cin和cout还有cerr、clog等,所以CD选项错误,C++流不只是进行格式化输入输出,所以B选项错误,A选项正确。25、有如下程序:#includeusingnamespacestd;intmain(){intx=4;do{x--;cout<A、输出31B、输出20C、输出3210D、死循环标准答案:A知识点解析:本题考查dowhile循环,执行第一次时,输出x为3,执行第二次的时候为1,所以输出结果为31,A选项正确。26、有如下程序:#include#includeusingnamespacestd;classMyBag{public:MyBag(stringbr,stringcr):brand(br),color(cr){cout<<++count;}~MyBag(){--count;}staticintGetCount(){returncount;}private:stringbrand,color;staticintcount;};intMyBag::count=0;intmain(){MyBagone("CityLife","Gray"),two("Micky","Red");MyBag*ptr=newMyBag("Coach","Black");deleteptr;cout<A、2B、3C、1232D、1233标准答案:C知识点解析:本题考查静态数据成员和构造函数和析构函数,题目中定义了三个对象,那么一次输出count值,即123,销毁ptr后,执行析构函数,count减1,count为2,所以选项C正确。27、在数据库系统中,数据模型包括概念模型、逻辑模型和A、物理模型B、空间模型C、时间模型D、数据模型标准答案:A知识点解析:数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型,故A选项正确。28、下列有关虚函数的表述中正确的是A、对于派生类中定义的成员函数,即使没有加virtual修饰,也有可能是虚函数B、只有虚函数才允许在派生类进行重定义C、对虚函数的任何调用都称为多态调用D、构造函数和析构函数也可以声明为虚函数标准答案:A知识点解析:一旦函数在基类中声明为虚函数,它就一直是虚函数,派生类无法改变该函数为虚函数这一事实,所以派生类从基类中继承来的虚函数,不加virtual修饰,也是虚函数,选项A正确;普通成员函数在派生类中也可以重新定义,重新定义后的成员函数会屏蔽对基类同名函数的直接访问,选项B错误;多态调用只能是通过基类对象的指针或引用调用虚函数来实现,基类对象调用虚函数不是多态调用,选项C错误;构造函数不能声明为虚函数,因为构造函数是在对象完全构造之前运行的,在构造函数运行时,对象的动态类型还不完整,选项D错误;答案为A。29、某二叉树共有845个结点,其中叶子结点有45个,则度为1的结点数为A、400B、754C、756D、不确定标准答案:C知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。二叉树共有845个结点,度为0的结点有45个,度为1的结点数为n1,度为2的结点数为n2,则845=45+n1+n2,且45=n2+1,则n1=756,C选项正确。30、有如下类定义:classMyClass{public:MyClass(constchar*c=NULL);~MyClass();______________//运算符=的声明private:char*p;};若要使语句序列MyClasss1("test"),s2;s2=s1;能够正常运行,横线处的语句应为A、friendMyClass&operator=(constMyClass&);B、MyClass&operator=(constMyClass&);C、MyClass&operator=(MyClass,constMyClass&);D、friendMyClass&operator=(MyClass,constMyClass&);标准答案:B知识点解析:首先赋值运算符只能重载为成员函数,以便编译器可以知道是否需要合成一个,选项A、D错误;另外赋值运算符是二元运算符,左操作数是调用该赋值运算符的类对象,所以赋值运算符的重载函数的形参只需要右操作数,选项C中有两个形参,错误;答案为B。31、模板对类型的参数化提供了很好的支持,因此()。A、类模板的主要作用是生成抽象类B、类模板实例化时,编译器将根据给出的模板实参生成一个类C、在类模板中的数据成员都具有同样类型D、类模板中的成员函数都没有返回值标准答案:B知识点解析:本题考查类模板的基本概念。类模板的定义和声明都以关键字template开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号"<>"括起来,这个表被称为类模板的模板参数表。类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。所以B选项正确。32、下列有关函数重载的叙述中,错误的是()。A、函数重载就是用相同的函数名定义多个函数B、重载函数的参数列表必须不同C、重载函数的返回值类型必须不同D、重载函数的参数可以带有默认值标准答案:C知识点解析:所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。所以本题答案为C。33、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<A、0B、1C、01D、001标准答案:D知识点解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题中定义了一个对象d,先执行基类的构造函数输出0,因为派生类中的私有数据成员为Base,所以还会执行一次基类的构造函数输出0,最后执行派生类的构造函数输出1,所以本题答案为D。34、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A)。35、有如下程序:#includeusingnamespacestd;classBase{public:voidfun(){cout<<"Base::fun"<A、Base.fun();B、Base->fun();C、Base::fun();D、fun();标准答案:C知识点解析:本题考查派生类对基类成员的访问属性,派生类公用继承基类,所以派生类可以直接使用基类的公用成员,题目中输出了Base::fun,所以可以推断派生类一定是调用了基类的fun函数,只有C选项正确调用了基类的fun函数,所以C选项正确。36、软件需求规格说明书的作用不包括A、软件验收的依据B、用户与开发人员对软件要做什么的共同理解C、软件设计的依据D、软件可行性研究的依据标准答案:D知识点解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。软件需求规格说明书有以下几个方面的作用。①便于用户、开发人员进行理解和交流,B正确;②反映出用户问题的结构,可以作为软件开发工作的基础和依据,C正确;③作为确认测试和验收的依据,A正确。37、在下列关键字中,不能用来表示继承方式的是A、privateB、publicC、staticD、protected标准答案:C知识点解析:本题考查派生类定义时使用的关键字,三种继承方式分别为private、public、protected,而C选项为静态声明关键字,故选择C。38、下面描述中不属于软件需求分析阶段任务的是A、撰写软件需求规格说明书B、软件的总体结构设计C、软件的需求分析D、软件的需求评审标准答案:B知识点解析:需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。故B选项正确。二、基本操作题(本题共1题,每题1.0分,共1分。)39、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程pmj1,该工程中包含程序文件mmn.cpp,其中有类Foo和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:X=aY=42注意:只修改每个“//ERROR**********found**********”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classFoo{public:Foo(charx){x_=x;)chargetx()const{returnx_;)public:staticinty_;private:charx_;};//ERROR*********found*********intFoo.y_=42;intmain(intargc,char*argv[]){//ERROR*********found*********Foof;//ERROR*********found*********cout;<<"X="<标准答案:(1)intFoo::y_=42;(2)F00f(’a’);(3)cout<<"X="<知识点解析:(1)主要考查考生对静态成员的掌握,因为静态整型变量y_是Foo类的公有成员,所以给y_赋值时要加上“Foo::”,即intFoo::y_=42;。(2)主要考查考生对构造函数的掌握,题目要求程序输出:X=aY=42可以知道,在给Foo类的f声明时要同时初始化为字符a,即语句Foof(’a’);。(3)主要考查考生对成员函数的掌握,因为x是类Foo的私有成员,所以不能在main函数中直接调用,要通过公有成员函数getX()调用。三、简单应用题(本题共1题,每题1.0分,共1分。)40、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了Component类、Composite类和Leaf类。Component是抽象基类,Composite和Leaf是Component的公有派生类。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:LeafNode注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeusingnamespacestd;classComponent{public://声明纯虚函数print()//**********found**********________};classComposite:publicComponent{public://**********found**********voidsetChild(________){mchild=child;}virtualvoidprint()const{m—child->print();}private:Component*m—child;};classLeaf:publicComponent{public:virtualvoidprint()const{//**********found**********}};intmain(){Leafnode;Compositecomp;comp.setChild(&node);Component*p=&comp;P->print();return0;}标准答案:(1)virtualvoidprint()const=0;(2)Component*child(3)cout<<"LeafNode"<知识点解析:(1)主要考查考生对纯虚函数的掌握,题目要求声明纯虚函数print()。在其派生类中print()函数的定义为virtualvoidprint()const,由此可知纯虚函数为virtualvoidprint()const=0。(2)主要考查考生对成员函数的掌握,题目要求填写函数voidsetChild的形参,由setChild的函数体可知形参为child,再看类的私有成员m_child的定义:Component*m_child;。由此可知形参为:Component*child。(3)主要考查考生对纯虚函数的掌握,先看主函数的程序:Leafnode;Compositecomp;comp.setChild(&node);Component*p=&comp;p->print();第一条和第二条语句都是定义语句,第三条语句调用函数setChild,由setChild函数的定义可知,comp中的m_child等于node,第四条语句定义了个指针p指向comp的地址,也就是node,最后一条语句通过指针p调用函数print,也就是调用类Leaf的函数print,因为题目要求输出:LeafNode,因此在这里添加语句:eout<<"LeafNode"<四、综合应用题(本题共1题,每题1.0分,共1分。)41、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//**********333**********”与“//**********66666**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include#include#includeusingnamespacestd;clasSdoc{private:char*str;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse();//将字符序列反转~doc();voidwriteToFile(char*filename);};doc::doc(char*filename){ifstreammyFile(filename);intlen=1001,tmp;str=newchar[len];length=0;while((tmp=myFile.get())!=EOF){str[length++]=tmp;}str[length]=’\0’;myFile.close();}voiddoc::reverse(){//将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333***********//*************666***********}doc::~doc(){delete[]str;}voiddoc::writeToFile(char*filename){ofstreamoutFile(filename);outFile<标准答案:inti,j;//定义两个整数临时变量i.j.for(i=0,j=length一1;i知识点解析:题目要求将myDoc中的字符序列反转,在main函数中我们看到myDoc是doc类,根据doc类的定义可以知道它是把读取文件的字符串存到str动态数组中。reverse函数实现将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,依次类推。使用变量i和j,分别表示第一个字符和最后一个字符的下标,定义temp作为中间变量进行交换。国家二级(C++)机试模拟试卷第2套一、选择题(本题共37题,每题1.0分,共37分。)1、下列数据结构中,属于非线性结构的是()。A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。2、下列数据结构中,能够按照“先进后出”原则存取数据的是()。A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。3、对于循环队列,下列叙述中正确的是()。A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以队头指针有时可能大于队尾指针有时也可能小于队尾指针。4、算法的空间复杂度是指()。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A。5、软件设计中划分模块的一个准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性.有利于提高模块的独立性。6、下列选项中不属于结构化程序设计原则的是()。A、可封装B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。7、软件详细设计产生的图如下:该图是()。A、N-S图B、PAD图C、程序流程图D、E-R图标准答案:C知识点解析:N-S图提出了用方框图来代替传统的程序流程图,所以A不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以B不对。E—R图是数据库中的用于表示E—R模型的图示工具,所以D不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。8、数据库管理系统是()。A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。9、有三个关系R,S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为()。A、选择B、投影C、交D、并标准答案:D知识点解析:并关系T中包含了关系R与S中的所有元组,所以进行的是并的运算。10、下列符号中可以用做C++标识符的是()。A、_radiusB、foo~barC、elseD、3room标准答案:A知识点解析:本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项B包含了字符“一”,选项C是关键字,选项D不能以数字开头。故答案为A。11、下列各组类型声明符中,含义相同的一组是()。A、unsignedlongint和longB、signedshortint和shortC、unsignedshort和shortD、shortint和int标准答案:B知识点解析:本题考查整型变量的类型,A、C选项中前者为无符号的,后者为有符号的,D选项中shortint为2个字节,int为4个字节。12、必须用一对大括号括起来的程序段是()。A、switch语句中的case标号语句B、if语句的分支C、循环语句的循环体D、函数的函数体标准答案:D知识点解析:本题考查C++基本控制结构,A、B、C三个选项中的大括号不是必须的,而D选项中的函数体必须使用大括号。13、语句int*p:&k;定义了指针p,与这个语句等效的语句序列是()。A、int*p;p=&k;B、int*p;p=k;C、int*p;*p=&k;D、int*p;*p=k;标准答案:A知识点解析:本题考查指针和地址,题目中定义了一个指向变量k的一个指针p,那么与题目中等效的表达式A选项,即先定义一个指向整型的指针,然后指向k的地址。14、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>l;i-=2)cout<<’*’;A、24B、25C、26D、50标准答案:B知识点解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2,那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。15、下列关于运算符重载的叙述中,错误的是()。A、有的运算符可以作为非成员函数重载B、所有的运算符都可以通过重载而被赋予新的含义C、不得为重载的运算符函数的参数设置默认值D、有的运算符只能作为成员函数重载标准答案:B知识点解析:重载运算符的规则如下:①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。所以答案为B。16、对C++编译器区分重载函数无任何意义的信息是()。A、参数类型B、参数个数C、返回值类型D、常成员函数关键字const标准答案:C知识点解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为C。17、运算符重载时不需要保持的性质是()。A、操作数个数B、操作数类型C、优先级D、结合性标准答案:B知识点解析:重载运算符的规则如下:①C++不允许用户自己定义新的运算符,只能对已有的C++象d;执行fun1会调用派生类的show函数,因为show函数为虚函数,而调用fun2、fun3仍然为基类的show函数,所以本题答案为C。18、下列关于函数的描述中,错误的是()。A、函数可以没有返回值B、函数可以没有参数C、函数可以是一个类的成员D、函数不能被定义为模板标准答案:D知识点解析:本题考查函数的基础知识,函数可以没有返回值,没有参数,也可以是一个类的成员,函数可以定义为模板,即模板函数。19、关于函数重载,下列叙述中错误的是()。A、重载函数的函数名必须相同B、重载函数必须在参数个数或类型上有所不同C、重载函数的返回值类型必须相同D、重载函数的函数体可以有所不同标准答案:C知识点解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为C。20、有如下函数定义:voidfunc(inta,int&b){a++;b++;}若执行代码段:intx=0,y=1;func(x,y);则变量x和y的值分别是()。A、0和1B、1和1C、0和2D、1和2标准答案:C知识点解析:函数参数的3种传递方式:①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以x的值不会改变;y为引用形参,所以会改变。故本题答案为C。21、对于一个类定义,下列叙述中错误的是()。A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B、如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数标准答案:B知识点解析:本题考查构造函数和复制构造函&数,如果没有定义构造函数,编译器将生成一个缺省的&构造函数和一个拷贝构造函数,如果已经定义了构造&函数和拷贝构造函数,编译器不会生成任何构造函数。&如果没有定义拷贝构造函数,编译器将生成一个拷贝&构造函数。22、有如下头文件:intf1();staticintf2();classMA{pubtie:intf3();staticintf4();};在所描述的函数中,具有隐含的this指针的是()。A、f1B、f2C、f3D、f4标准答案:C知识点解析:只有类的非静态成员函数才隐含&this指针,其作用域是类内部,当类的非静态成员函数&中访问类的非静态成员时,编译器会自动将对象本身&的地址作为一个隐含参数传递给函数,而不必一定写&上this。所以本题答案为C。23、如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected标准答案:D知识点解析:本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为D。24、下列有关继承和派生的叙述中,正确的是()。A、派生类不能访问基类的保护成员B、作为虚基类的类不能被实例化C、派生类应当向基类的构造函数传递参数D、虚函数必须在派生类中重新实现标准答案:C知识点解析:派生类可以访问基类的保护成员,而不能访问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重新实现,那么仍然使用基类的成员函数。25、有如下类定义: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知识点解析:本题考查公用继承对基类成员的&访问属性。公用继承中,基类的公用成员和保护成员&在派生类中保持原有访问属性,其私有成员仍为基类&私有,本题中若要给派生类继承下来基类的私有成员&赋值,那么只能调用基类的成员函数来对它赋值,所以&本题答案为B。26、有如下程序:#includeusingnamespaeestd;classCD{public:~CD(){cout<<’C’;}private:charname[80];};intmain(),{CDa,*b,a[2];return0;}执行这个程序的输出结果是()。A、CCCCB、CCCC、CCD、C标准答案:B知识点解析:本题考查类的析构函数,题目中定义了类的一个对象a,对象指针*b,对象数组d[2],当程序执行完后,析构函数执行了3次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为B。27、有如下程序:#includeusingnamespaeestd;classMyClass{public:MyClass(){++count;}~MyClass(){--count;}statieintgetCount(){returncount;}private:staticintcount;};intMyClass::count=0;intmain(){MyClassobj;cout<A、121B、232C、221D、122标准答案:A知识点解析:本题考查静态数据成员。静态数&据成员在内存中只占一份空间,静态数据成员属于类,&即使不定义对象,也会给静态数据成员分配空间,可以&被引用。本题中先是定义了一个对象obj,执行构造函&数使得静态数据成员count变为了1,然后又定义了指&针对象,执行构造函数后,count变为了2,释放指针后,&执行析构函数,使得count变为了1。所以本题答案&为A。28、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidPrint()eonst{cout<<"const:val="<标记报错收藏查看答案标准答案:B知识点解析:本题考查带参数的构造函数。本&题中定义了一个对象obj,那么执行其构造函数,初始&化p1,p2的顺序是由声明这两个成员的顺序决定的,&而不是由参数化列表顺序决定,所以本题中,会先执行&p1,输出2,然后执行p2输出1,然后输出3,最后一次&输出312。所以本题答案为B。30、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<A、0B、1C、OlD、001标准答案:D知识点解析:本题考查派生类的构造函数和析&构函数,在定义一个派生类的对象时,先调用基类的构&造函数,然后再执行派生类的构造函数,对象释放时,&先执行派生类的析构函数,再执行基类的析构函数。&所以本题中定义了一个对象d,先执行基类的构造函数&输出0,因为派生类中的私有数据成员为Base,所以还&会执行一次基类的构造函数输出0,最后执行派生类的&构造函数输出1,所以本题答案为D。31、下列代码段中声明了3个类:classPerson{};classStudent:publicPerson{};classUndergraduate:Student{};下列关于这些类之间关系的描述中,错误的是()。A、类Person是类Undergraduate的基类B、类undergraduate从类Student公有继承C、类Student是类Person的派生类D、类Undergraduate是类Person的派生类标准答案:B知识点解析:本题考查基类和派生类的逻辑关系,属于基础知识,如果没有指明哪种继承方式,那么默认为私有继承,所以B选项错误。32、有如下程序:#includeusingnamespacestd;classBase{public:voidoutput(){cout<<1;}virtualvoidPrint(){cout<<’B’;}};classDerived:publicBase{public:voidoutput(){cout<<2;}voidPrint(){cout<<’D’;}};intmain(){Base*ptr=newDerived:ptr->output();ptr->Print();deleteptr;return0;}执行这个程序的输出结果是()。A、1BB、1DC、2BD、2D标准答案:B知识点解析:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行ptr->output后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print()会执行派生类的Print,即输出D,所以本题答案为B。33、有如下程序:#includeusingnamespacestd;classB{public:virtualvoidshow(){cout<<"B";}};classD:publicB{public:voidshow(){cout<<"D";}};voidfun1(B*ptr){ptr->show();}voidfun2(B&ref){ref.show();}voidfun3(Bb){b.show();}intmain(){Bb,*p=newD:Dd;fun1(P);fun2(b);fun3(d);deletep;return0;}执行这个程序的输出结果是()。A、BBBB、BBDC、DBBD、DBD标准答案:C知识点解析:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,本题中定义类B的对象b、对象指针*p=newD以及类D的对象d;执行funl会调用派生类的show函数,因为show函数为虚函数,而调用fun2、fun3仍然为基类的show函数,所以本题答案为C。34、C++中的模板包括()。A、对象模板和函数模板B、对象模板和类模板C、函数模板和类模板D、变量模板和对象模板标准答案:C知识点解析:本题考查函数模板和类模板,所以答案为C。35、下列关于类模板的模板参数的叙述中,错误的是()。A、模板参数可以作为数据成员的类型B、模板参数可以作为成员函数的返回类型C、模板参数可以作为成员函数的参数类型D、模板参数不能作为成员函数的局部变量的类型标准答案:D知识点解析:本题考查类模板的概念和定义,模板参数可以作为成员函数的局部变量的类型。36、下列关于C++预定义流对象的叙述中,正确的是()。A、cin是C++预定义的标准输入流对象B、cin是C++预定义的标准输入流类C、cout是C++预定义的标准输入流对象D、cout是C++预定义的标准输入流类标准答案:A知识点解析:cin是C++预定义的标准输入流对象,cout是C++预定义的标准输出流对象。37、有如下语句序列:charstr[10];cin>>str;当从键盘输入“Ilovethisgame”时,str中的字符串是()。A、IlovethisgameB、IlovethiC、IloveD、I标准答案:D知识点解析:cin是C++预定义的标准输入流对象,cin用来接收字符串时,遇“空格”、“TAB”、“回车”时都会结束。所以本题答案为D。二、简单应用题(本题共1题,每题1.0分,共1分。)38、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:l23452345634567100000010000001000000100000010000001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//*****found****”。#includeusingnamespacestd;//矩阵基础类,一个抽象类classMatrixBase{introws,cols;public:MatrixBase(introws,intcols):rows(rows),cols(cols){}intgetRows()const{returnrows;}//矩阵行数intgetCols()const{returncols;}//矩阵列数virtualdoublegetElement(intr,intc)const=0;//取第i个元素的值voidshow()const{//分行显示矩阵中所有元素for(inti=0;ishow();deletem;cout<show();deletem;return0;}标准答案:(1)getElement(i,j)(2)MatrixBase(rows,cols)(3)newdouble[rows*cols](4)r==c知识点解析:(1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为i、列为j的元素,使用纯虚函数getElement(i,j)实现,输出语句为cout<三、综合应用题(本题共1题,每题1.0分,共1分。)39、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//********333********”与“//********66666********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#inchde#include#includeusingnamespacestd;classdoc{private:char*str;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse();//将字符序列反转~doc();voidwriteToFile(char*filename);};doe::doe(char*filename){ifstreammyFile(filename);intlen=1001,tmp;str=newchar[len];length=0;while((tmp=myFile.get())!=EOF){str[length++]=tmp;}str[length]=’\0’;myFile.close();}voiddoe::reverse(){//将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//***********333***********//***********666***********}doc::~doc(){delete[]str;}voiddoc::writeToFile(char*filename){ofstreamoutFile(filename);outFile<标准答案:inti,j;//定义两个整数临时变量i.j.for(i=0,j=length-1;i知识点解析:题目要求将myDoc中的字符序列反转,在main函数中我们看到myDoc是doc类,根据doc类的定义可以知道它是把读取文件的字符串存到str动态数组中。reverse函数实现将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,依次类推。使用变量i和j,分别表示第一个字符和最后一个字符的下标,定义temp作为中间变量进行交换。国家二级(C++)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、软件设计中模块划分应遵循的准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。2、通过运算符重载,可以改变运算符原有的()。A、操作数类型B、操作数个数C、优先级D、结合性标准答案:A知识点解析:重载运算符的规则如下:①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。故本题答案为A。3、有如下程序:#includeusingnamespacestd;classPoint{public:staticintnumber;public:Point(){number++;}~Point(){number--;}};intPoint::number=0;intmain(){Point*ptr;PointA,B;{Point*ptr_point=newPoint[3];ptr=ptr_point;}PointC;cout<A、3B、4C、6D、7标准答案:C知识点解析:本题考查默认构造函数,题目中定义一个对象A、B以及对象数组Point[3],又定义了对象C,共执行6次构造函数,number变为了6,所以本题答案为C。4、软件生命周期是指()。A、软件产品从提出、实现、使用维护到停止使用退役的过程B、软件从需求分析、设计、实现到测试完成的过程C、软件的开发过程D、软件的运行维护过程标准答案:A知识点解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。5、在为一个类重载下列运算符时,只能作为该类成员函数重载的运算符是A、+B、()C、<<D、++标准答案:B知识点解析:本题考查重载运算符,C++规定有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数。所以本题选B。6、有如下类定义:classPoint{public:Point(intxx=0,intyy=0):x(xx),y(yy){}private:intx,y;};classCircle:publicPoint{public:Circle(intr):radius(r){}private:intradius;};派生类Circle中数据成员的个数为A、1B、2C、3D、5标准答案:C知识点解析:本题考查如何定义派生类以及派生类对基类成员的访问,声明派生类的一般形式为:class派生类名:[继承方式]基类名题目中公用继承,所以也继承基类的数据成员,所以总共有3个数据成员,所以C选项正确。7、数据字典(DD)所定义的对象都包含于A、数据流图(DFD图)B、程序流程图C、软件结构图D、方框图标准答案:A知识点解析:在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。因此选A,而B,C,D都不符合。8、将运算符*重载为类成员函数时,其参数表中有且仅有一个参数,说明该运算符是A、无操作数的运算符B、无操作数的运算符C、二元运算符D、三元运算符标准答案:C知识点解析:本题考查运算符重载,题目中将*重载为类成员函数时,如果是一元运算符,其参数就是默认的this,而如果是二元运算符,其参数表中有且仅有一个参数,所以该运算符是二元运算符。9、有如下程序:#includeusingnamespacestd;classAppliance{public:Appliance(){}~Appliance(){cout<<’A’;}};classTV:publicAppliance{public:TV(ints=41):size(s){}~TV(){cout<<’T’<A、T41B、T41AC、T41T41D、T41AT41A标准答案:B知识点解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对象构造函数,3、再执行派生类析构函数,4、执行基类的析构函数,所以本题中定义room1时,程序结束时先调用派生类析构函数输出T41,然后执行基类的析构函数输出A,而定义对象指针,并不会调用构造函数,所以什么也不输出,所以结果为T41A,,B选项正确。10、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C)。11、下列关于内联函数的叙述中,错误的是A、内联函数的定义必须出现在内联函数第一次被调用之前B、内联函数主要解决程序的运行效率问题C、类体中定义的函数都是内联函数D、内联函数不能有参数标准答案:D知识点解析:内联函数的函数定义必须出现在内联函数第一次被调用之前;内联函数可以避免函数频繁调用时的开销,提高程序运行效率;在类定义体内部定义的成员函数,编译器都将其视为内联函数;A、B、C正确;内联函数也可以有参数,D错误,答案为D。12、有如下的类声明:#includeusingnamespacestd;classAA{public:virtualvoiddisp(){cout<<’A’;}};classBB:publicAA{public:voiddisp(){cout<<’B’;}};classCC:publicBB{public:virtualvoiddisp(){cout<<’C’;}};voidplot(AAa){a.disp();}intmain(){BBbb;CCcc;BB&rb=cc;plot(bb);cc.disp();rb.disp();return0;}运行这个程序的输出是A、ACCB、ACBC、BCCD、BCB标准答案:A知识点解析:程序定义了类AA,成员函数disp是虚函数;类BB公有继承AA,重新定义了函数disp,由虚函数的性质可知,即使BB中未使用virtual修饰disp,函数disp仍然是虚函数;类CC公有继承了BB,同样重新定义了虚函数disp;main函数中定义了BB类对象bb,CC类对象cc,BB类引用rb,rb被初始化指向cc;然后调用plot函数,由于plot函数的形参是AA类对象a,不满足多态性中调用者必须要是引用或者指针类型的条件,所以无论实参是bb或cc,a.disp()调用的都是AA类中的函数disp,输出"A";cc.disp()显然调用的是类CC中的函数,输出"C";rb.disp(),由于rb是引用,指向的是类CC对象cc,所以这里由多态性可知调用的是CC类中的disp函数,输出"CC";程序输出结果为:"ACC";答案为A。13、有如下程序段:inti=100;while(inti=10){cout<<’*’;i--;}运行时输出"*"的个数是A、0B、100C、10D、无穷标准答案:D知识点解析:首先,程序定义了局部变量i并初始化为100,在while循环中定义了同名局部变量i并初始化为10,由变量的作用域可知while循环中的i屏蔽了while语句前的局部变量i,所以while循环体中的i初值为10;其次,由于while循环的循环条件为inti=10,每次循环都是重新定义并初始化i,条件始终为真,所以while循环将会无限执行下去,输出无穷个"*"。答案为D。14、有如下类声明:classWhat{intn;public:doubled;private:charc;};类What的公有数据成员和私有数据成员的数量分别是A、1和1B、1和2C、2和1D、2和2标准答案:B知识点解析:class关键字定义的类,成员默认的访问级别是私有的,所以类What中公有成员有d,私有成员有n,c;答案为B。15、有如下类定义:classBase{public:inta;protected:intb;private:intc;};classDerived:publicBase{protected:intd;};若obj是类Derived的对象,以下语句编译正确的是A、obj.a;B、obj.b;C、obj.c;D、obj.d;标准答案:A知识点解析:类Derived以public方式继承Base,所以a在Derived中是public成员,b在Derived中是protected成员,c对Derived不可见;所以对类Derived对象obj可见的成员为a,答案为A。16、已知有数组定义chara[3][4];下列表达式中正确的是A、a[0]="AAA"B、strcpy(a[1],"BBBBB")C、a[2][1]="CC"D、a[1][1]=a[1][1]标准答案:D知识点解析:程序定义一个3行4列的二维字符数组。由于是二维数组,所以a[0]代表一维数组,数组是不能直接赋值的,A错误;由于是二维数组,a[1]代表数组a的第二行行地址,可以使用strcpy函数赋值,但是a[1]只有4个字节大小的空间,而字符串"BBBBB"占6个字节,拷贝越界,B错误;同B情况一样,a[2][1]只有1个字节空间,"CC"占3个字节,无法完成赋值,C错误;D选项是对a[1][1]完成自我赋值,正确;答案为D。17、下列关于派生类构造函数和析构函数的表述中,错误的是A、下列关于派生类构造函数和析构函数的表述中,错误的是B、派生类的构造函数会隐含调用基类的构造函数C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D、在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数标准答案:D知识点解析:派生类对象的撤销顺序与构造顺序相反:首先运行派生类析构函数,然后按继承层次依次向上调用各基类析构函数,这样做是为了每次析构函数销毁的都是完整的对象,选项D错误,答案为D。18、下面对软件特点描述错误的是A、软件没有明显的制作过程B、软件是一种逻辑实体,不是物理实体,具有抽象性C、软件的开发、运行对计算机系统具有依赖性D、软件在使用中存在磨损、老化问题标准答案:D知识点解析:软件具有以下特点:软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论