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

下载本文档

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

文档简介

国家二级C++机试(选择题)模拟试卷18(共9套)(共198题)国家二级C++机试(选择题)模拟试卷第1套一、选择题(本题共24题,每题1.0分,共24分。)1、有如下程序:#include<iostream>usingnamespacestd;intmain(){charstr[100],*p;cout<<”Pleaseinputastring:”;cin;str;p=str;for(inti=0;木p!=‘\0’;p++,i++);cout<<“i”<A、7B、12C、13D、100标准答案:A知识点解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第一个非守『1字符开始到卜一个空白字符结束”,而输入数据为abcdefgabcd,其中abcde堙后有窄格。所以输入后str中的字符串为“abcdefg”;主函数中接下来for语句的作用是计算字符串p的长度,故最终输出字符串“abcdefg”的长度7。2、下列关于类定义的说法中,正确的是()。A、类定义中包括数据成员和函数成员的声明B、类成员的缺省访问权限是保护的C、数据成员必须被声明为私有的D、成员函数只能在类体外进行定义标准答案:A知识点解析:类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。3、耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是()。A、提高耦合性降低内聚性有利于提高模块的独立性B、降低耦合性提高内聚性有利于提高模块的独立性C、耦合性是指一个模块内部各个元素间彼此结合的紧密程度D、内聚性是指模块间互相连接的紧密程度标准答案:B知识点解析:耦合性是反映模块间互相连接的紧密程度,内聚性是指一个模块内部各个元素间彼此接合的紧密程序。提高模块的内聚性,降低模块的耦合性是有利于模块的独立性。4、有如下程序:#includeusingnamespacestd;classtest{private:inta:public:test0{cout+”constructor”+endl;}test(inta){cout+a+endl;)test(consttest&test){a=test.a:cout+“copyconstructor”+endl;)test(){Cout+”destructor”+endl;));intmain(){testA(3);return0:}运行时输出的结果是()。A、3B、constructordestructorC、copyconstructordestructorD、3destructor标准答案:D知识点解析:此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象A是会隐含调用test(inta)这个构造函数,输出3:接着主函数结束,对象A销毁又隐含调用~test()析构函数输出destructor。5、软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是A、测试B、设计C、可行性研究D、实现标准答案:C知识点解析:软件生命周期是指软件产品从提出、实现、使用、维护到停止使用退役的过程。其中,定义阶段包括可行性研究与计划制定和需求分析。测试、概要设计、详细设计和实现属于开发阶段。6、有如下程序:#includeusingnamespacestd;classXA{inta;public:staticintb:XA(intaa):a(aa){b++;)~XA(){}intget0{returna;});intXA::b=0;intmain(){XAd1(2),d2(3);cout<A、5B、6C、7D、8标准答案:C知识点解析:执行xA类的实例变量d1(2)时,成员函数d1.get()的返回值等于2,xA.b的值等于1,执行xA类的实例变量d2(3)时,成员函数d1.get()的返回值等于3,xA-b的值等于2,所以输出结果为2+3+2=7。7、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、笛卡儿乘积标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。形式定义如下:R∩S≡{t∈R∧t∈S}=R-(R-S)。所以不改变关系表中的属性个数,但能减少元组个数的是关系表之间的交操作。8、函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为()。A、1,1B、1,2C、2,2D、2,1标准答案:D知识点解析:如果函数实参是数组名,形参也应为数组名,函数swap中形参进行了交换,实际上也是实参进行了交换。而且数组名代表数组首元素的地址,并不代表数组的全部元素。所以,swapfb,2)是数组b第一个元素与第二个元素进行交换,即b[0]与b[1],根据题干,知道答案为2,1。9、下列关于继承方式的描述中,错误的是()。A、如果不显式地指定继承方式,缺省的继承方式是私有(private)B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员标准答案:D知识点解析:基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。10、下列语句中错误的是()。A、constint*p=0;B、constinty=99;C、constintx;D、constint*p=newint(100);标准答案:C知识点解析:const是一个C++语言的关键字,它限定一个变量不允许被改变,const常量、常量指针赋值时,均必须同时初始化。所以C选项错误。11、下列叙述中,错误的是()。A、false是一个逻辑型常量B、”b”是一个字符型常量C、365是一个int常量D、3.1415926是一个double常量标准答案:B知识点解析:字符常量简称字符,它以单引号作为起止符号,中间有一个或若干个字符。或者以“\”开头的包括多个字符的字符序列也符合规定的字符常量。12、执行语句序列()。inti=0;while(i<25)i+=3;cout<<i;输出结果是A、24B、25C、27D、28标准答案:C知识点解析:此题考查的是循环语句while的使用。i为3的倍数,当i=24时,i<25,执行while的循环体i+=3,则i=27,不满足i<25的条件,结束循环。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知识点解析:此题考查的是指针的赋值。题目中的语句int*p=&k;定义了一个int类型的指针p,并将变量k的地址&k赋给指针p。所以等效语句是:int*p;p=&k;。14、为了提高函数调用的实际运行速度,可以将较简单的函数定义为()。A、内联函数B、重载函数C、递归函数D、函数模板标准答案:A知识点解析:C++引入内联函数的原因是用它来取代C中盼预处理宏函数。两者的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的。内联函数在调用时像宏函数一样展开,所以它没有一般函数的参数压栈和退栈操作,减少了调用开销,因此,内联函数比普通函数有更高的执行效率。15、若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。A、operatorlong()const;B、operatorlong(bigNumber);C、longoperatorlong()const;D、longoperatorlong(BigNumber);标准答案:A知识点解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。16、有如下类定义和变量定义:classA{public:A(){data=0;)~A(){}intGetData()const{returndata;}voidSetData(intn){data=n;}private:intdata;};constAa;Ab;下列函数调用中错误的是()。A、a.GetData();B、a.SetData(10);C、b.GetData();D、b.SetData(10);标准答案:B知识点解析:由题意可知a为常对象,因为常对象不能被更新,所以通过这个常对象只能调用它的常成员函数GetData(),而不能调用其他成员函数SetData(10),因而选项B为本题的正确答案。17、已知函数f的原型是“voidflint*x,int&y);”,变量v1、v2的定义是“intv1,v2;”,下列调用语句中,正确的是()。A、f(v1,V2);B、f(v1,&V2);C、f(&v1,v2);D、f(&v1,&v2);标准答案:C知识点解析:在函数f的形参表达式中第一个形参为整型指针变量,第二个为整型引用变量,所以用实参v1的指针初始化第一个形参,用实参v2初始化第二形参。18、当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是()。A、任何B、公有或保护C、保护或私有D、私有标准答案:B知识点解析:基类的公有成员和保护成员只有在以保护继承方式继承时,其在继承类中是保护成员。19、下列关于派生类和基类的描述中,正确的是()。A、派生类成员函数只能访问基类的公有成员B、派生类成员函数只能访问基类的公有和保护成员C、派生类成员函数可以访问基类的所有成员D、派生类对基类的默认继承方式是公有继承标准答案:B知识点解析:派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。20、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n一=3;}staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<A、n=0B、n=1C、n=2D、n=3标准答案:A知识点解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。21、有如下类定义:classAA{inta;Publie: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+1>),…<成员对象名m>(<参数表n+m>)<派生类构造函数体>。在派生类BB的构造函数总参数表后面应该接上基类名AA和其参数。22、下列关于类模板的模板参数的叙述中,错误的是()。A、模板参数可以作为数据成员的类型B、模板参数可以作为成员函数的返回类型C、模板参数可以作为成员函数的参数类型D、模板参数不能作为成员函数的局部变量的类型标准答案:D知识点解析:此题考查的是模板参数。模板参数是一种参数化的数据。模型,在模板类或模板函数中,只要使用数据类型的地方都能使用模板参数来代表一种未知的数据类型。所以,模板参数可以作为成员函数的局部变量类型。23、下列有关抽象类和纯虚函数的叙述中,错误的是()。A、拥有纯虚函数的类是抽象类,不能用来定义对象B、抽象类的派生类若不实现纯虚函数,它也是抽象类C、纯虚函数的声明以’’=0;"结束D、纯虚函数都不能有函数体标准答案:D知识点解析:此题考查的是抽象类和纯虚函数的概念。纯虚函数可以有函数体,它的实现由派生类给出。24、有如下4个语句:①cout<<’A’<<setfill(’*’)<<lefc<<setw(7)<<’B’<<endl;②cout<<setfill(’*’)<<left<<setw(7)<<’A’<<’B’<<endl;③cout<<’A’<<serfill(’*’)<<right<<setw(7)<<’B’<<endl;④cout<<setfill(’*’)<<right<<setw(7)<<…A<<’B’<<endl;其中能显示A******B的是()。A、①和③B、①和④C、②和③D、②和④标准答案:C知识点解析:此题考查C++流的使用。setfill()作用是设置填充字符;left是使输出数据在指定宽度内左对齐:fight是使输出数据在指定宽度内右对齐。国家二级C++机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、支持子程序调用的数据结构是A、栈B、树C、队列D、二叉树标准答案:A知识点解析:栈是一种限定在一端进行插入与删除的线性表。在主函数调用子函数时,要首先保存主函数当前的状态,然后转去执行子函数,把子函数的运行结果返回到主函数调用子函数时的位置,主函数再接着往下执行,这种过程符合栈的特点。所以一般采用栈式存储方式。2、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为A、219B、229C、230D、231标准答案:B知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故总结点数=叶子节点数+度为2的节点数+度为1的节点数=80+79+70=229。3、冒泡排序在最坏情况下的比较次数是()。A、n(n+1)/2B、nlog2nC、n(n-1)/2D、n/2标准答案:C知识点解析:对n个结点的线性表采用冒泡排序,在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。4、有如下程序:#includeusingnamespacestd;classtest{private:ima;public:test(){cout<<”constructor”<A、3B、constructorC、copyconstructorD、3destructordestructordestructor标准答案:D知识点解析:本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象A(3),对象带着参数,所以执行带参数的构造函数,输出3,然后执行析构函数,输出destructor,所以本题答案为D。5、下列关于this指针的描述中,正确的是()。A、类的成员函数都有this指针B、类的友元函数都有this指针C、任何与类相关的函数都有this指针D、类的非静态成员函数都有this指针标准答案:D知识点解析:this是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。它隐藏于每个类的非静态成员函数中。6、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):Val(x){)voidSet(intx){val=x;)voidPrint()const{cout<<"val="<A、语句1B、语句2C、语句3D、语句4标准答案:C知识点解析:在创建类对象obil(10)时,前面有关键字const,所以当语句3调用objl的成员函数试图修改其私有成员的数值的时候,会编译出错。7、有如下程序:#include<iostream>usingnamespacestd;classXX{protected:intk;public:XX(intn=5):k(n){};~XX(){cout<<’’XX’’;}virtualvoidf()const=0;};inlinevoidXX::f()const{cout<<k+3;};classYY:publicXX{public:~YY(){cout<<’’YY’’;}voidf()const{cout<<k-3;XX::f();}};intmain(){XX&p=*newYY:p.f();delete&p;return0;}执行上面的程序将输出()。A、28XXB、28YYXXC、33XXD、-33XXYY标准答案:A知识点解析:类YY公有派生于类:XX,派生类对象可以替代基类对象向基类对象的引用进行赋值初始化,XX&p=*newYY语句定义了XX对象p引用,并用YY对象初始化,p并不是YY对象的别名,是XX基类对象的别名,故先调用基类XX的构造函数将k初始化为5,p.f()首先输出k-3即2,然后调用XX::f()输出k+3即8,delete&p删除p,调用XX的析构函数输出“XX”。8、在开发一个C++程序的整个过程中,第3个步骤为()。A、链接B、运行C、编辑D、编译标准答案:A知识点解析:C++程序的开发过程是编辑、编译、链接、运行和调试。9、下面描述中不属于数据库系统特点的是A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据系统的基本特点有数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。10、有如下程序:#inclu&<iostream>usingnamespacestd;intmain(){inta[6]={23,15,64,33,40,58};ints1,s2;s1=s2=a[0];for(int*p=al+1;p<a+6;p++){if(s1>*p)s1=*p;if(s2<*p)s2=*p;}cout<<s1+s2<<end1;return0;}运行时的输出结果是()。A、23B、58C、64D、79标准答案:D知识点解析:变量s1和s2的初值都等于23,那么在执行第一次for循环时,*p的值等于15,它小于23,所以把15赋给变量s1;执行第二次for循环时,*p的值等于64,它大于23,所以把64赋给变量s2;而数组a中a[2]后面的元素的值都大于15,小于64,因而变量s1,s2的值不会再发生变化,最终值为15+64=79。11、若字符指针P所指向的字符串为ˊˊabcdefgˊˊ,在执行语句()。char*ap=newchar[strlen(p)+1];之后,ap指向的字符数组的元素个数为A、9B、8C、7D、6标准答案:B知识点解析:字符指针p所指向的字符串为"abcdefg,所以函数strlen(p)的值等于7,再加1,等于8。12、下列类模板的定义中语法格式错误的是()。A、templateclassBuffer{/*…*/};B、templateclassBuffer{/*…*/};C、templateclassBuffer{/*…*/};D、templateclassBuffer{/*…*}标准答案:D知识点解析:定义类模板的一般形式是:template<类型名参数名1,类型名参数名2,…>class类名(类声明体};模板的类型参数由关键字class或关键字typename及其后的标识符构成。在模板参数表中关键字class和typename的意义相同。13、有如下类定义:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,错误的语句是()。A、①B、②C、③D、④标准答案:C知识点解析:静态整型数据不能定义为类的数据成员。14、使用输入输出操作符setw,可以控制()。A、输出精度B、输出宽度C、对齐方式D、填充字符标准答案:B知识点解析:此题考查的是c++流的操作符。在c++流中,操作符setw的作用是设置输入输出宽度。15、有如下类定义:ClassTest{chara;constcharb;public:Test(charc){a=c;b=c;)//第1行voidf(chara)const{this->a=a;}//第2行voidg(charb){this->b=b;)//第3行charh()const{returna;}//第4行};编译时没有错误的行是()。A、第1行B、第2行C、第3行D、第4行标准答案:D知识点解析:类Test中的常成员函数h()返回数据成员a的值。16、有如下程序:#include<iostream>usingnamespacestd;classBase{private:voidfun1()const{cout<<’’fun1’’;}protected:voidfun2()const{cout<<’’fun2’’;}public:voidfun3()const{cout<<’’fun3’’;}};classDerived:protectedBase{public:voidfun4()const{cout<<’’fun4";}};intmain(){Derivedobj;obj.funl();//①obj.fura();//②obj.fun3();//③obj.fun4();//④return0;}其中有语法错误的语句是()。A、①②③④B、①②⑧C、②③④D、①④标准答案:B知识点解析:此题考查的是保护继承。因为Derived以protected方式继承了Base类,所以父类Base中的公有成员和保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类不可访问。所以,主函数中通过Derived类的对象只能够访问到Derived类的公有成员。17、有如下程序:#include<iostream>usingnamespacestd;classBase{public:virtualvoidfunctionl(){cout<<’0’;}voidfunction2(){cout<<’1’;}};classDerived:publicBase{public:voidfunction1(){cout<<’2’;}voidfunction2(){cout<<’3’;}};intmain(){Base*p=newDerived();p->ftmction1();p->function2();return0;};运行时的输出结果是,()。A、01B、21C、03D、23标准答案:B知识点解析:函数function1()在基类Base中定义为虚成员函数,而在派生类Dervied中重新进行了定义,输出字符2,函数function2()在基类Base中定义虚成员函数,在主函数中使用指向基类的指针变量p访问function2()时,输出1。18、有如下程序:#includeusingnamespacestd;classGA{public;virtualintf(){return1;}};classGB:publicGA{public;virtualintf(){return2;}};voidshow(GAg){cout<A、1111B、1211C、1112D、1212标准答案:C知识点解析:此题考查派生类与虚函数的考查。由主函数main入手,其中分别定义了类GA和GB的对象a和b。首先,执行参数a的show函数调用,其中的输出语句为调用GA类中的f()虚函数,返回1。同理display(a)函数输出1。show(b)函数中调用的为GA中的f()函数,display(b)调用GA中f()函数,返回1,display(b)调用GB中的f()函数返回2。所以最后输出为1112。19、运算符重载时不需要保持的性质是()。A、操作数个数B、操作数类型C、优先级D、结合性标准答案:B知识点解析:运算符重载应该体现为原有运算符的功能在新的数据类型上的延伸。重载的运算符保持原有运算符的操作个数、优先级和结合性三个最基本的特征。20、当派生类继承一个基类时,默认的继承方式为()。A、PublicB、protectedC、privateD、不确定标准答案:C知识点解析:派生类继承一个基类时,默认的继承方式为private。21、建立一个有成员对象的派生类对象时,各构造函数体的执行次序为()。A、派生类、成员对象类、基类B、成员对象类、基类、派生类C、基类、成员对象类、派生类D、基类、派生类、成员对象类标准答案:C知识点解析:建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序(自左向右)。然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序(自上而下),最后是执行派生类的构造函数。22、有函数模板声明和一些变量定义如下:temp1ate<c1assT1,c1assT2,c1assT3>T1sum(T2,T3);doubled1,d2;则下列调用中,错误的是()。A、sum<double,double,double>(d1,d2);B、sum<double,double>(d1,d2);C、sum<double>(d1,d2);D、sum(d1,d2);标准答案:D知识点解析:虚拟类型参数T1没有出现在模板函数的形参表中,因此在调用时不可能从模板函数的实参表中获得相应的信息,因此T1无法省略。而在选项D)中省略了。23、语句ofstreamf("SALARY.DAT",ios_base::app);功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且()。A、若文件存在,将其置为空文件;若文件不存在,打开失败B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D、若文件存在,打开失败;若文件不存在,建立一个新文件标准答案:B知识点解析:此题考查的是文件打开模式。文件打开模式iso_base::app是为添加数据而打开(总是在尾部写),故只有选项B说法正确。24、有如下程序:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ints[]={123,234};cout<<right<<setfill(’*’)<<setw(6);for(inti=0;i<2;i++){cout<<s[i]<<endl;}return0;}运行时的输出结果是()。A、123234B、***123234C、***123***234D、***123234***标准答案:B知识点解析:在输出语句中定义了输出的格式是字符宽度为6,并且向右对齐,不足的位用‘*’补齐。在C++中,输出格式的设置只对第一次输出有效,在完成了一个数据的输出后,宽度设置自动恢复为0(表示按数据实际宽度输出)。所以对于本题来说,在循环语句中输出数组s[0]中的元素时,按照规定的格式输出,其结果为***123,当输出s[1]时,输出格式已经恢复到按数据实际宽度输出,所以此时输出为234。25、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int);C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符十+时,其声明形式为Fraction&operatorH(int);。国家二级C++机试(选择题)模拟试卷第3套一、选择题(本题共18题,每题1.0分,共18分。)1、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为()。A、219B、229C、230D、231标准答案:B知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故总结点数=叶子节点数+度为2的节点数+度为1的节点数=80+79+70=229。2、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为()。A、笛卡尔积B、交C、并D、自然连接标准答案:D知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。3、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为()。A、219B、229C、230D、231标准答案:B知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故总结点数=叶子节点数+度为2的节点数+度为1的节点数=80+79+70=229。4、某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)()。A、3B、6C、8D、12标准答案:D知识点解析:根据二叉树的性质,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中的二叉树的叶子结点为1,因此度为2的结点的数目为0,故该=叉树为12层,每层只有一个结点。5、下列数据结构中,能用二分法进行查找的是()。A、顺序存储的有序线性表B、线性链表C、二叉链表D、有序线性链表标准答案:A知识点解析:二分法查找只适应于顺序存储的有序表。有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)的表。6、有如下类定义:classFoo{public:Foo(intv):value(v){)∥①~Foo(){)∥②private:F000{}∥③intvalue=0;∥④);其中存在语法错误的行是()。A、①B、②C、③D、④标准答案:D知识点解析:此题考查的是类的定义。c++语言规定,在类体内不允许对所定义的数据成员进行初始化。7、有如下头文件:intf10;staticintf2();classMA{public:intf3();staticintf4();};在所描述的函数中,具有隐含的this指针的是()。A、f1B、f2C、f3D、f4标准答案:C知识点解析:此题考查的是this指针。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。题目中,只有f3()满足“类的非静态成员函数”的要求,故应选C选项。8、下列关于C++函数的叙述中,正确的是()。A、每个函数至少要具有一个参数B、每个函数都必须返回一个值C、函数在被调用之前必须先声明D、函数不能自己调用自己标准答案:C知识点解析:此题考查的是函数的性质。当调用无参函数时主函数并不将数据传送给被调函数,且可以带回或不带回函数值。函数的递归调用就是直接或间接的调用自己。9、有如下程序:#includeusingnamespacestd;classA{public:virtualvoidf(){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为正确答案。10、有如下程序:#include<iostream>usingnamespacestd;intmain(){intf,fl=0,f2=1;for(inti=3;i<=6;i++){f=f1+f2;f1=f2;f2=f;}cout<<f<<endl;retum0:}运行时的输出结果是()。A、2B、3C、5D、8标准答案:C知识点解析:在主函数中for循环语句执行4次,第一次循环结束时,变量f的值等于1,f1的值等于1,f2的值等于1;第二次循环结束时,变量f的值等于2,f1的值等于1,f2的值等于2;第三次循环结束时,变量f的值等于3,f1的值等于2,f2的值等于3:第四次循环结束时,变量f的值等于5,f1的值等于3,f2的值等于5;结束循环。11、有如下程序:#includeUsingnamespacestd;ClassAmount{intamount;public;Amount(intn=O):amount(n){}IntgetAmountoconst{retumamount;}Amount&operator+=(Amounta){amount+=a.amount;return;)};intmain(){Amountx(3),y(7);x+=y;cout<A、*thisB、thisC、&amountD、amount标准答案:A知识点解析:此题考查的是“+”运算符重载和this指针。语句amount+=a.amount:实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。12、下列关于类模板的模板参数的叙述中,错误的是()。A、模板参数可以作为数据成员的类型B、模板参数可以作为成员函数的返回类型C、模板参数可以作为成员函数的参数类型D、模板参数不能作为成员函数的局部变量的类型标准答案:D知识点解析:此题考查的是模板参数。模板参数是一种参数化的数据模型,在模板类或模板函数中,只要使用数据类型的地方都能使用模板参数来代表一种未知的数据类型。所以,模板参数可以作为成员函数的局部变量类型。13、建立一个类对象时,系统自动调用()。A、析构函数B、构造函数C、静态函数D、友元函数标准答案:B知识点解析:建立一个类的对象时,编译程序需要为对象分配存储空间,进行必要的初始化。在C++中,这项工作是由构造函数来完成。14、下列运算符函数中肯定不属于类FunNumber的成员函数的是()。A、intoperator-(FunNumber);B、FunNumberoperator-();C、FunNumberoperator-(int);D、.intoperator-(FunNumber,FunNumber);标准答案:D知识点解析:此题考查的是运算符“-”的重载。“-”运算符有一元和二元两种,且均可以重载为成员函数和非成员函数。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以,“-”运算符重载为成员函数时,参数可以是0个或1个;而重载为非成员函数时,参数个数可以是1个或2个。所以D选项,肯定是重载为非成员函数。15、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载机制可以为C++语言扩充新的运算符B、运算符重载的作用是使已有的运算符作用于类的对象C、重载运算符的操作数类型可以全部为基本类型D、所有运算符都可以被重载标准答案:B知识点解析:运算符重载就是赋予已有的运算符多重含义。通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C++语言的扩充能力。运算符重载要注意以下3点:①不能重载的运算符包括::…,.*,?;②必须重载为成员函数的运算符包括[],(),—>,=;③在类成员函数中重载运算符是不允许返回引用的,会出现“返回局部变量的地址”警告。16、如果表达式a>=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。A、a.operator>=(b)B、b.operatotr>=(a)C、operator>=(a,b)D、operator>=(b,a)标准答案:C知识点解析:运算符函数作为非成员函数时,没有隐含的this指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。17、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:赋值运算符“=”只能作为成员函数重载。18、下列控制对齐方式的操作符中,错误的是()。A、internalB、centerC、leftD、right标准答案:B知识点解析:对齐方式的控制操作符left的含义是在设定的宽度内左对齐输出,右端填己设定的填充字符;right(此为默认设置)在设定的宽度内右对齐输出:internal在设定的宽度内右对齐输出,但若有符号(一或+),符号置于最左端。国家二级C++机试(选择题)模拟试卷第4套一、选择题(本题共20题,每题1.0分,共20分。)1、算法的空间复杂度是指()。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指执行这个算法所需要的内存空间。这个内存空间包括算法程序所占的空间,输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。2、下列描述中正确的是A、一个逻辑数据结构只能有一种存储结构B、数据的逻辑结构属于线性结构,存储结构属于非线性结构C、一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D、一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率标准答案:D知识点解析:数据的逻辑结构是指数据集合中各数据元素之间所固有的逻辑关系:数据的存储结构是在对数据进行处理时,各数据元素在计算机中的存储关系。数据的存储结构是指数据的逻辑结构在计算机中的表示,一种逻辑结构可以表示成多种存储结构;而采用不同的存储结构,其数据处理的效率是不同的。3、在函数中,可以用auto、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是()。A、autoB、extemC、registerD、static标准答案:A知识点解析:此题考查的是存储类型。c++语言变量的存储类型分为如下几种类型:auto…函数内部的局部变量;static…静态存储分配;extem…全局变量;register.一变量存储存硬件寄存器中。4、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的性质,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中的二叉树的叶子结点为1,因此度为2的结点的数目为0,故该二叉树为7层,每层只有一个结点。5、下面不属于软件工程过程的4种基本活动()。A、软件规格说明B、软件开发C、软件演进D、软件测试标准答案:D知识点解析:软件工程过程的4种基本活动是:软件规格说明、软件开发、软件确认、软件演进。6、要定义一个引用变量P,使之引用类MyClass的一个对象,正确的定义语句是()。A、MyClassp=MyClass;B、MyClassp=newMyClass;C、MyClass&p=newMyClass;D、MyClassa,&p=a;标准答案:D知识点解析:在选项D)中,定义了MyClass类的一个对象a和引用变量p,并且声明p初始化为对a的引用。7、对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、除运算标准答案:A知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。8、定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为()。A、私有继承B、非私有继承C、保护继承D、公有继承标准答案:A知识点解析:继承的方式包括三种:公有继承,保护继承和私有继承。如果不显示的给出继承方式,缺省的类继承方式是私有继承private。9、下列关于继承方式的描述中,错误的是()。A、如果不显式地指定继承方式,缺省的继承方式是私有(private)B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员标准答案:D知识点解析:基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。10、数据库技术的根本目标是要解决数据的A、存储问题B、共享问题C、安全问题D、保护问题标准答案:B知识点解析:数据库中的数据具有“集成”、“共享”之特点,即数据库集中了各种应用的数据,进行统一地构造与存储,而使它们能被不同的应用程序所使用。因而数据库技术的根本目标是解决数据的共享问题。11、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:重载赋值运算符必须定义为类的成员函数;所以选项A正确。重载赋值运算符时应返回一个类的对象,所以C选项错误。如果已经定义了复制(拷贝)构造函数,仍然可以重载赋值运算符,所以D选项错误。12、已知函数f的原型是“voidf(int*x,int&y);”,变量v1、v2的定义是“intv1,v2;”,下列调用语句中,正确的是()。A、f(v1,v2);B、f(v1,&V2);C、f(&v1,v2);D、f(&v1,&v2);标准答案:C知识点解析:在函数f的形参表达式中第一个形参为整型指针变量,第二个为整型引用变量,所以用实参v1的指针初始化第一个形参,用实参v2初始化第二形参。13、有如下程序:#include<iostream>usingnamespacestd;classONE{intc;public:ONE():c(0){cout<<1;}ONE(intn):c(n){cout<<2;}};classTWO{ONEone1;ONEone2;public:TWO(intm):one2(m){cout<<3;}};intmain(){TWOt(4);return0;}运行时的输出结果是()。A、3B、23C、123D、213标准答案:C知识点解析:由类TWO的定义可知,其成员为类ONE的两个对象one1和one2。所以在主函数中构建类TWO的对象t(4)时,先后调用类ONE的构造函数ONE():c(0){cout<<1;}和ONE(intn):c(n){cout<<2;}输出12,然后再调用类TWO的构造函数TWO(intm):one2(m){cout<<3;},输出3。14、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assBase{public:Base(intx=0){cout<<x;}};c1assDerived:publicBase{public:Derived(intx=0){cout<<x,}private:Baseval;};intmain(){Derivedd(1);retum0;}程序的输出结果是()。A、0B、1C、01D、001标准答案:D知识点解析:此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)—>执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序.>执行自身的构造函数。本题中,首先会构造基类Base,调用Base类的构造函数,输出0;然后还定义了一个Base类的对象,再次调用Base类的默认构造函数输出0;最后构造自身,因主函数中传入了构造参数1,所以输出1。故最后输出结果是:001。15、有如下程序:#includeusingnamespacestd;intmain(){int*p;*p=9:cout<<"Thevalueatp:"<<*p;return0;}编译运行程序将出现的情况是()。A、编译时出现语法错误,不能生成可执行文件B、运行时一定输出:Thevalueatp:9C、运行时一定输出:Thevalueatp:*9D、运行时有可能出错标准答案:D知识点解析:此题考查的是指针的使用。本题中,在给*p赋值前,指针p并没有指向一个具体的对象。此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。16、有如下程序:#include<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、下列关于派生类构造函数和析构函数的说法中,错误的是()。A、派生类的构造函数会隐含调用基类的构造函数B、如果基类中没有缺省构造函数,那么派生类必须定义构造函数C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D、在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数标准答案:D知识点解析:此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。18、有如下类定义classAnimal{public:virtualvoidName0=0;};classKoala:publicAnimal{public:voidName(){/*函数体略*/)};关于上述类定义,下列描述中错误的是()。A、类Koala是类Animal的派生类B、类Koala中的Name函数是一个虚函数C、类Animal中的Name函数是一个纯虚函数D、语句“Animala;”能够建立类Animal的一个对象a标准答案:D知识点解析:在类Animal定义了纯虚函数Name(),所以类Animal就是一个抽象类,而抽象类是不能够建立对象的。19、下列关于运算符重载的叙述中,错误的是()。A、有的运算符可以作为非成员函数重载B、所有的运算符都可以通过重载而被赋予新的含义C、不得为重载的运算符函数的参数设置默认值D、有的运算符只能作为成员函数重载标准答案:B知识点解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。除了*,.*,-〉*,::,?:,.这五个运算符以外,其他运算符都可以重载。20、下列控制格式输入输出的操作符中,能够设置浮点数精度的是()。A、setprecisionB、setwC、setfillD、showpoint标准答案:A知识点解析:setprecision(intn):设置浮点数的精度(有效位数或小数位数),等价函数调用:io.precision(n)。国家二级C++机试(选择题)模拟试卷第5套一、选择题(本题共23题,每题1.0分,共23分。)1、下列关于栈和队列的描述中,正确的是()。A、栈是先进先出B、队列是先进后出C、队列允许在队头删除元素D、栈在栈顶删除元素标准答案:D知识点解析:栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。2、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。3、下列描述中正确的是()。A、线性链表是线性表的链式存储结构B、栈与队列是非线性结构C、双向链表是非线性结构D、只有根结点的二叉树是线性结构标准答案:A知识点解析:线性表的链式存储结构称为线性链表。线性表链式存储结构的基本单位称为存储结点,每个存储结点包括数据域和指针域两个组成部分。各数据元素之间的前后件关系是由各结点的指针域来指示的,指向线性表中第一结点的指针HEAD称为头指针,当HEAD=NULL时称为空表。栈、队列和双向链表是线性结构,树是一种简单的非线性结构。在树这种数据结构中,所有数据元素的关系具有明显的层次特征。二叉树是非线性结构。线性结构和非线性结构是从数据的逻辑结构角度来讲的,与该数据结构中有多少个元素没有关系,即使是空的二叉树也是非线性结构。4、下列有关内联函数的叙述中,正确的是()。A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是return语句标准答案:C知识点解析:此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A)错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B)错误;内联函数只是比普通函数有更高的执行效率。5、计算斐波那契数列第n项的函数定义如下:intfib(intn){if(n==0)return1;elseif(n==1)return2;elsereturnfib(n-1)+fib(n-2);}若执行函数调用表达式fib(2),函数fib被调用的次数是()。A、1B、2C、3D、4标准答案:B知识点解析:斐波那契数列是递归函数,所以fib(2)=fib(1)+fib(0)=2+1=3。因而执行函数调用表达式fib(2)时,函数fib被调用的次是2次。6、有如下程序:#includeusingnamespacestd;classtest{private:ima;public:test(){cout<<”constructor”<A、3B、constructorC、copyconstructorD、3destructordestructordestructor标准答案:D知识点解析:本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象A(3),对象带着参数,所以执行带参数的构造函数,输出3,然后执行析构函数,输出destructor,所以本题答案为D。7、在软件设计中,不属于过程设计工具的是()。A、PDL(过程设计语言)B、PAD图C、N一S图D、DFD图标准答案:D知识点解析:DFD(数据流图Data一Flow一Diagram)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示。它直接支持系统功能建模。在软件详细设计的过程阶段,要对每个模块规定的功能以及算法的设计给出适当的算法描述。常见的过程设计工具有:图形工具:程序流程图,N一S,PAD,HIPO。表格工具:判定表。语言工具:PDL(伪码)。8、下列对于软件测试的描述中正确的是()。A、软件测试的目的是证明程序是否正确B、软件测试的目的是使程序运行结果正确C、软件测试的目的是尽可能多地发现程序中的错误D、软件测试的目的是使程序符合结构化原则标准答案:C知识点解析:软件测试是为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。软件测试的目的要以查找错误为中心,而不是为了演示软件的正确功能。9、在下列double型常量表示中,错误的是()。A、E15B、35C、3E5D、3E-5标准答案:A知识点解析:在C++中,科学计数法表示小数的方法:E(e)左右必须有数,且E(e)的右侧只能为整数。10、数据库技术的根本目标是要解决数据的()。A、存储问题B、共享问题C、安全问题D、保护问题标准答案:B知识点解析:数据库中的数据具有“集成”、。“共享”之特点,即数据库集中了各种应用的数据,进行统一地构造与存储,而使它们能被不同的应用程序所使用。因而数据库技术的根本目标是解决数据的共享问题。11、在E一R图中,用来表示实体的图形是()。A、矩形B、椭圆形C、菱形D、三角形标准答案:A知识点解析:在E一R图中,用矩形表示实体集,在矩形内写上该实体集的名字;用椭圆形表示属性;用菱形(内部写上联系名)表示联系。12、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、并C、交D、差标准答案:D知识点解析:由关系T中的数据可以看出,其数据由属于关系R但是不属于关系S的数据组成。所以关系T是由关系R和S通过差运算得到的。13、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、交C、除D、并标准答案:C知识点解析:从关系R、S和T的结构可以得出关系T是由关系R、S经过除运算后得到的。14、下面描述中不属于数据库系统特点的是A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据系统的基本特点有数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。15、下列关于运算符重载的叙述中,错误的是()。A、有的运算符可以作为非成员函数重载B、所有的运算符都可以通过重载而被赋予新的含义C、不得为重载的运算符函数的参数设置默认值D、有的运算符只能作为成员函数重载标准答案:B知识点解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。除了*,.*,->,::,?:,.这五个运算符以外,其他运算符都可以重载。16、有如下函数定义: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知识点解析:此题考查的是函数参数的传递方式。此题中形参a是普通参数,即传值调用,函数中对a增1不会影响到实参x的值;形参b是传址调用,函数中对b增1同时会改变实参y的值。故最终结果是0和2。17、下列关于类定义的说法中,正确的是()。A、类定义中包括数据成员和函数成员的声明B、类成员的缺省访问权限是保护的C、数据成员必须被声明为私有的D、成员函数只能在类体外进行定义标准答案:A知识点解析:此题考查的是类的定义。类中缺省的访问权限是私有的,所以选项B错误:类的数据成员和成员函数的访问控制权限均可被声明为公有、私有和保护中的一种,所以选项C错误:成员函数的实现可以在类体内定义,也可以在类体外定义,所以选项D错误。18、如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。#include<iostream>usingnamespacestd;classBase{inta,b;public:Base(intx,inty){a=x;b=y;}voidshow(){cout<<a<<’,’<<b<<9ndl;}};classDerived:publicBase{intc,d;public:Derived(intx,inty,intz,intm):Base(x,y){c=z;d=m;}voidshow(){cout<<c<<’,’<<d<<endl;}};intmain(){BaseB1(50,50),*pb;DerivedD1(10,20,30,40);pb=&D1;return0:return();}运行时输出的结果是()。A、10,20B、30,40C、20,30D、50,50标准答案:A知识点解析:此题考查的是多态性。在C++中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。在实函数的情况下。通过基类指针所调用的只能是基类酌那个函数版本,无法调用到派生类中重定义函数。此题中,通过指针pb所调用的是基类的版本,即输出a和b的值10,20。19、下列是重载乘法运算符的函数原型声明,其中错误的是()。A、MyClassoperator*(double,double);B、MyClassoperator*(double,MyClass);C、MyClassoperator*(MyClass,double);D、MyClassoperator*(MyClass,MyClass);标准答案:A知识点解析:此题考查的是运算符重载。本题中,选项A重载运算符’’*’’使用的形参是两个double,而系统中的’’*’’运算原本就能计算两个double,所以这样违反了重载函数的原则,当执行a*b这样的表达式时,系统不能识别是否执行运算符重载函数。故答案是A选项。20、下列模板声明中,有语法错误的是()。A、template<typenameT>Tfun(Tx){returnx;}B、template<typenameT>Tfun(Tx,intn){returnx*n;}C、template<classT>Tfun(T*p){return*p;}D、template<classT>TclassA{Tn;};标准答案:D知识点解析:第四个选项是定义类模板的,但是class前面的T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。21、有如下程序:#includeusingnamespacestd;classPublication{//出版物类charname[30];public:Publication(char*name="未知名称"){strcpy(this->name,name);}constchar*getNameoconst{returnname;}virtualconstchar*getTypeoconst{return"未知类型";}};classBook:publicPublication{//书类public:Book(char*name):Publication(name){}virtualconstchar*getType()const{return"书";}};voidshowPublication(Publication&p){cout<A、未知类型:未知名称B、未知类型:精彩人生C、书:未知名称D、书:精彩人生标准答案:D知识点解析:因为类Book继承自基类Publication,所以在类Book中的虚常成员函数*getType(){return"书";}就会覆盖基类中的虚常成员函数*getType()const{return"未知类型";},所以在主函数中调用函数showPublication(book)时,getType()函数的输出的结果是“书”,getName()函数的输出结果为“精彩人生”。22、关于运算符重载,下列表述中正确的是()。A、C++已有的任何运算符都可以重载B、运算符函数的返回类型不能声明为基本数据类型C、在类型转换符函数的定义中不需要声明返回类型D、可以通过运算符重载来创建C++中原来没有的运算符标准答案:C知识点解析:此题考查的是运算符重载的概念。C++语言规定,“.”、’’*’’、’’->*’’、“::”和“?:”这五个运算符不能被重载,故选项A错误;运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项B说法是错误的:运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。23、下列关于文件流的描述中,正确的是()。A、文件流只能完成针对磁盘文件的输入和输出B、建立一个文件流对象时,必须同时打开一个文件C、若输入流要打开的文件不存在,将建立一个新文件D、若输出流要打开的文件不存在,将建立一个新文件标准答案:D知识点解析:对于输入文件流类ifstream,默认的打开模式是iosbase::in,当以这种方式打开文件而文件又不存在时,通过fail()可测试打开失败(返回值为true),对于输出文件流类ofstream,默认的打开模式是ios_base::out,当以这种方式.打开文件而文件又不存在时,将自动建立新文件。国家二级C++机试(选择题)模拟试卷第6套一、选择题(本题共24题,每题1.0分,共24分。)1、某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为A、n+1B、n-1C、2nD、n/2标准答案:A知识点解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。所以该二叉树的叶子结点数等于n+1。2、下列排序方法中,最坏情况下比较次数最少的是A、冒泡排序B、简单选择排序C、直接插入排序D、堆排序标准答案:D知识点解析:冒泡排序、简单选择排序和直接插入排序法在最坏的情况下比较次数为:n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。其中堆排序

温馨提示

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

评论

0/150

提交评论