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

下载本文档

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

文档简介

国家二级C++机试(选择题)模拟试卷26(共9套)(共200题)国家二级C++机试(选择题)模拟试卷第1套一、选择题(本题共24题,每题1.0分,共24分。)1、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、除标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S,交运算不改变关系表中的属性个数但能减少元组个数。2、下列关于栈叙述正确的是A、栈顶元素最先能被删除B、栈顶元素最后才能被删除C、栈底元素永远不能被删除D、以上三种说法都不对标准答案:A知识点解析:栈是先进后出的线性表,栈顶的元素最先被删除,栈底的元素最后被删除。3、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空问一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、上述三种说法都不对标准答案:B知识点解析:线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的,各数据元素在存储空间中是按逻辑顺序依次存放的。所以每个元素只存储其值就可以了,而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域:另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。4、下列有关继承和派生的叙述中,正确的是()。A、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成员C、基类对象可以赋值给派生类对象。D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类标准答案:D知识点解析:如果派生类私有继承基类,不能访问基类中的私有成员,所以A)、B)是错误的。派生类是对基类的具体化,所以C)错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择D)。5、定义如下枚举类型enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2};表达式Wednesday=Friday的值是()。A、falseB、trueC、2D、异常标准答案:B知识点解析:enum<枚举类型名>{<枚举元素表>);其中:关键词“enum”表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。本题中的枚举类型中的数据值Wednesday为2,而Friday的值赋值为2,所以判断Wednesday等于Friday的表达式值为真,即true。6、若有如下类声明:classMyClass{public:MyClass(){cout<<1;}};执行下列语句MyClassa,b[2],*p[2];程序的输出结果是()。A、11B、111C、1111D、11111标准答案:B知识点解析:本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a以及对象数组b[2],共执行3次构造函数,对象指针不调用构造函数。所以本题答案为B。7、从工程管理角度看,软件设计一般分为两步完成,它们是()。A、概要设计与详细设计B、数据设计与接口设计C、软件结构设计与数据设计D、过程设计与数据设计标准答案:A知识点解析:软件设计是开发阶段最重要的步骤。从工程管理的角度来看可分为两步:概要设计和详细设计。概要设计是将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式;详细设计是指确立每个模块的实现算法和局部数据结构,用适应方法表示算法和数据结构的细节。从技术观点来看,软件设计包括软件结构设计(定义软件系统各主要部件之间的关系)、数据设计(将分析时创建的模型转化为数据结构)、接口设计(描述软件内部、软件与协作系统之间以及软件与人之间如何通信)、过程设计(把系统结构部件转换成软件的过程)四个步骤。8、在E―R图中,用来表示实体联系的图形是()。A、椭圆形B、矩形C、菱形D、三角形标准答案:C知识点解析:在E―R图中实体集用矩形,属性用椭圆,联系用菱形。9、在下列double型常量表示中,错误的是()。A、E15B、35C、3E5D、3E-5标准答案:A知识点解析:在C++中,科学计数法表示小数的方法:E(e)左右必须有数,且E(e)的右侧只能为整数。10、已知类IMS中两个成员函数的声明为“voidlisten()const;”与“voidspeak();”,另有两个对象的定义为“IMSobj1;”与“constIMSobj2;”,则下列语句中,产生编译错误的是()。A、obj1.1isten();B、obj1.speak();C、obj2.1isten();D、obj2.speak();标准答案:D知识点解析:函数listen()作为类IMS的常成员函数,一般对象obj1和常对象obi2都可以调用它,而函数speak()作为IMS的一般成员函数,则只有一般对象obj1可以调用,而常对象obj2调用会产生编译错误。11、数据独立性是数据库技术的重要特点之一,所谓数据独立性是指()。A、数据与程序独立存放B、不同的数据被存放在不同的文件中C、不同的数据只能被对应的应用程序所使用D、以上三种说法都不对标准答案:D知识点解析:数据独立性是指数据库中数据独立于应用程序而不依赖于应用程序,即数据与程序间的互不依赖性。也就是说数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。数据的独立性包括物理独立性和逻辑独立性两级。①物理独立性:数据的物理结构(包括存储结构、存取方式等)的改变,如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。②逻辑独立性:数据库总体逻辑结构的改变,如修改数据模式、增加新的数据类型、改变数据间联系等,不需要相应的应用程序改变,这就是数据的逻辑独立性。12、在数据库系统中,用户所见的数据模式为()。A、概念模式B、外模式C、内模式D、物理模式标准答案:B知识点解析:用户所见到的数据模式是外模式也称用户模式。它是用户的数据视图,它由概念模式导出。一个概念模式可以有若干个外模式,每个用户只关心与它有关的外模式,这样不仅可以屏蔽大量无关信息,而且有利于数据维护。13、数据库设计中反映用户对数据要求的模式是()。A、内模式B、概念模式C、外模式D、设计模式标准答案:C知识点解析:数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。14、下面关于虚函数的描述中正确的是()。A、虚函数是一个静态成员函数B、虚函数是一个非成员函数C、虚函数既可以在函数说明时定义,也可以在函数实现时定义D、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型标准答案:D知识点解析:在基类中用virtual声明成员函数为虚函数,所以AB错误。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同。15、下列关于虚基类的描述中,错误的是()。A、使用虚基类可以消除由多继承产生的二义性B、构造派生类对象时,虚基类的构造函数只被调用一次C、声明“classB:virtualpublicA”说明类B为虚基类D、建立派生类对象时,首先调用虚基类的构造函数标准答案:C知识点解析:虚基类是为了消除南多重继承产生的二义性而提出的。虚基类的说明格式是:class<类名>:virtual<继承方式><基类名>,其中关键字virtual与继承方式的位置无关,但必须位于基类名之前,日virtual只对紧随其后基类名起作用。对于本题来说,声明“classB:virtualpublicA”说明类A为虚基类。16、语句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;。17、计算斐波那契数列第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次。18、若磁盘上已存在某个文本文件,其全路径文件名为d:hacre\test.txt,下列语句中不能打开该文件的是()。A、ifstreamfile(“d:hacre\test.txt”);B、ifstreamfile(“d:\kncre\\test.txt”);C、ifstreamfile;file.open(“d:\hacre\\test.txt”);ifstream(“d:\kncre\\test.txt”);D、ifstream*pFile=new标准答案:A知识点解析:此题考查的是转义字符。在字符常量或字符串中,以“\”开头的一系列字符被看做是一个转义字符。要表示“\”字符,必须使用转义字符“\\”。19、有如下程序:#includeusingnamespacestd;classMusic{public:voidsetTitle(char*str){strcpy(title,str);}protected:chartype[10];private:chartitle[20];};classJazz:publicMusic{public:voidset(char*str){strcpy(type,"Jazz");//①strcpy(title,str);//②}};下列叙述中正确的是()。A、程序编译正确B、程序编译时语句①出错C、程序编译时语句②出错D、程序编译时语句①和②都出错标准答案:C知识点解析:派生类Jazz不能访问基类Music中的私有成员title。20、有如下程序#include<iostream>usingnamespacestd;classBase{protected:Base(){cout<<’A’;}Base(charc){cout<<c;}};classDerived:publicBase{public:Derived(charc){cout<<c;}};intmain(){Deriveddl(’B’);return0;}执行这个程序屏幕上将显示输出()。A、BB、BAC、ABD、BB标准答案:C知识点解析:此题考查的是派生类对象的构造。建立派生类对象时,构造函数的执行顺序是:执行基类的构造函数,调用顺序按照各个基类被被继承时声明的顺序:执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序;执行派生类的构造函数。此题中,在建立派生类Derived的对象dl时会先调用基类Base的构造,调用的是默认构造函数,输出字符’A’;然后调用自身的构造函数,输出’B’;故程序的输出结果是:AB。21、下列关于虚基类的描述中,错误的是()。A、使用虚基类可以消除由多继承产生的二义性B、构造派生类对象时,虚基类的构造函数只被调用一次C、声明“classB:virtualpublicA”说明类B为虚基类D、建立派生类对象时,首先调用虚基类的构造函数标准答案:C知识点解析:虚基类是为了消除由多重继承产生的二义性而提出的。虚基类的说明格式是:Class<类名>:virtual<继承方式><基类名>,其中关键字virtual与继承方式的位置无关,但必须位于基类名之前,且virtual只对紧随其后基类名起作用。对于本题来说,声明“classB:virtualpublicA”说明类A为虚基类。22、有如下类定义: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的值。23、下列运算符中,不能被重载的是()。A、&&B、!=C、.D、++标准答案:C知识点解析:此题考查的是运算符重载。在C++中,只有.、*、一>*、::、?:这五个运算符不能重载。24、下列关于模板的叙述中,错误的是()。A、模板声明中的第一个符号总是关键字temp1ateB、在模板声明中用<和>括起来的部分是模板的形参表C、类模板不能有数据成员D、在一定条件下函数模板的实参可以省略标准答案:C知识点解析:此题考查模板的概念。模板的一般说明形式如下:temp1ate类型形参表函数返回值类型函数名(形参表){函数体},所以选项A、B正确。函数模板的实参在一定条件下是可以省略的,所以选项C错误。国家二级C++机试(选择题)模拟试卷第2套一、选择题(本题共21题,每题1.0分,共21分。)1、若有定义“hatx=4,y=5;”,则表达式“y>x++?x--:y++”的值为()。A、3B、4C、5D、6标准答案:C知识点解析:在表达式“y>x++?x--:y++”中,由于自加(++)运行符的优前级高于比较运算符(>),所以首先进行自加运算,即变量x的值前自加1,等于5,此时表达式y>x不成立,所以整个表达式的值等于y++的值,由于y++是后自加运算,所以其值等于5。2、若有以下程序:#include<iostream>usingnamespacestd;classA{public:A(inti,intj){a=i:b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<a<<","<<b<<endl;}private:inta,b;};classB:privateA{public:B(inti,intj);A(i,j){}voidfun(){move(3,5);}voidfl(){A::show();}};intmain(){Bd(3,4);d.fun();d.fl();return0:}程序执行后的输出结果是()。A、3,4B、6,8C、6,9D、4,3标准答案:C知识点解析:此题的执行过程如下:首先Bd(3,4);语句调用B类的构造函数:B(inti,intj),B的构造函数中调用基类A的构造函数,使得a=3,b=4;d.fun()会调用函数move(3,5),使得(3,4)和(3,5)的对应部分分别相加,最后输出6,9。3、字符串“a+b=12\n\t”的长度为()。A、12B、10C、8D、6标准答案:C知识点解析:题目给出的字符串含有7个字符,再加字符串的结束字符,所以共8个字符。4、对下列二叉树进行前序遍历的结果是()。A、DYBEAFCZXB、YDEBFZXCAC、ABDYECFXZD、ABCDEFXYZ标准答案:C知识点解析:二叉树前序遍历的简单描述:若二叉树为空,则结束返回;否则:①访问根结点;②前序遍历左子树;③前序遍历右子树。可见,前序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知前序遍历的结果是ABDYECFXZ。5、下列关于C++流的描述中,错误的是()。A、cout>>‘A’表达式可输出字符AB、eof()函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstreamD、以ios―base::out模式打开的文件不存在时,将自动建立一个新文件标准答案:A知识点解析:本题考查c++流,想要输出字符“A,则应该是cout<<“A”,所以本题答案为A。6、在软件设计中不使用的工具是A、系统结构图B、PAD图C、数据流图D、程序流程图标准答案:C知识点解析:在软件开发的各个阶段经常会使用到一些图形工具,如在需求分析阶段使用数据流图(DFD图),在概要设计阶段使用系统结构图,在详细设计阶段使用程序流程图、N-S图或者PAD图等。7、有如下类说明:classTestClass{intx:public:TestClass(intn){x=n;}};classTestClass1:publicTestClass{inty;public:TestClass1(inta,intb);};在构造函数TestClass1的下列定义中,正确的是()。A、TestClass1::TestClass1(inta,intb):x(a),y(b){}B、TestClass1::TestClass1(inta,intb):TestClass(a),y(b){}C、TestClass1::TestClass1(inta,intb):x(a),TestClass1(b){}D、TestClass1::TestClass1(inta,intb1:TestClass(a),TestClass1(b){}标准答案:B知识点解析:题目中程序TestClass为基类,TestClass1为派生类,派生类构造函数的一般形式为:派生类构造函数名(总参数类表):基类构造函数名(参数列表){派生类中新增数据成员初始化语句}。派生类TestClass1的基类函数名为TestClass,总参数为inta,intb,所以选择B)。8、数据库系统的三级模式不包括()。A、概念模式B、内模式C、外模式D、数据模式标准答案:D知识点解析:数据库系统的三级模式包括概念模式、外模式和内模式(物理模式)。9、有如下类定义:classTV{public:Tv(intS=41,stringbr=“TCL”):size(s),brand(br){}一Tv(){}private:intsize;stringbrand;};若执行语句TVli,*net[2],company[3];则Tv类的构造函数被调用的次数是()。A、6次B、4次C、3次D、2次标准答案:B知识点解析:本题考查构造函数和析构函数,题中定义了一个对象以及对象数组,那么构造函数需要执行4次,而,*net[2]并不执行构造函数,所以答案为B。10、有如下程序:#include<iostream>usingnamespacestd;intmain(){intsum;for(inti=0;i<6;i+=3){sum=1;for(intj=i;j<6;j++)sum+=j;}cout<<sum<<endl;return0;}运行时的输出结果是()。A、3B、10C、12D、15标准答案:D知识点解析:由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后sum和j都会被重新赋值,所以外层第二次循环如下:此时i=3,sum=3内层循环开始如下:j=3,j<6,sum=6;i=4,j<6,sum=10,j=5,j<6,sum=15,j=6退出内层循环。得到sum=15。11、下面关于虚函数的描述中正确的是()。A、虚函数是一个静态成员函数B、虚函数是一个非成员函数C、虚函数既可以在函数说明时定义,也可以在函数实现时定义D、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型标准答案:D知识点解析:在基类中用vinual声明成员函数为虚函数,所以AB错误。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同。12、生成派生类对象时,派生类构造函数调用基类构造函数的条件是()。A、无需任何条件B、基类中显示定义了构造函数C、派生类中显式定义了构造函数D、派生类构造函数明确调用了基类构造函数标准答案:A知识点解析:因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构造函数。13、要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是()。A、intvect[]={30,50,-88};B、intvect[]={30,50,-88,0,0};C、intvect[5]={30,50,-88};D、intvect[5]={30,50,-88,0,0};标准答案:A知识点解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。14、以下关键字不能用来声明类的访问权限的是()。A、publicB、staticC、protectedD、private标准答案:B知识点解析:此题考查的是类的访问权限。在C++语言中,类的访问权限有公有、保护和私有三种。故本题选B。15、有如下类定义:classMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intgetJ()const{returnj;}};编译时发现有一处语法错误,对这个错误最准确的描述是()。A、函数getK试图访问基类的私有成员变量kB、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC、类MyDerived缺少一个无参的构造函数D、类MyDerived的构造函数没有对基类数据成员k进行初始化标准答案:A知识点解析:此题考查的是派生类对基类成员的访问。因为类中缺省的访问权限是私有,所以本题中MyBase类中定义的成员k是私有成员。派生类中的成员只能访问基类中的公有成员和保护成员,不能访问基类中的私有成员。所以派生类中函数getK()中的语句returnk;是非法的。16、对于一个类定义,下列叙述中错误的是()。A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数标准答案:B知识点解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。17、有如下程序:#include#includeusingnamespacestd;classXCF{inta:public:XCF(intaa=0):a(aa){cout<<"1";}XCF(XCF&x){a=x.a;cout<<"2";}~XCF(){cout<Geta();deletepd;return0:}运行时的输出结果是()。A、1215588B、1218855C、12185D、128512标准答案:B知识点解析:在这个程序中在建立对象d1(5)时,调用构造函数xCF(intaa=0):a(aa){cout<<"1";},输出1;在建立d2(d1)时,调用拷贝构造函数xcF(xCF&x){a=x.a;cout(<"2";},输出2;在建立newxCF(8)对象时,调用构造函数XCF(intaa=0):a(aa){cout<<"1";},输出1;语句cout<Geta()的功能是输出8:语句deletepd;调用析构函数~XCF(),输出8;当退出程序时,分别释放对象d2、d1,输出55。18、有如下程序:#include#includeusingnamespacestd;intmain(){cout<A、***123***456B、***123456***C、***123456D、123456标准答案:C知识点解析:在主函数中第一次输出时调用函数setfill(’*’)设置填充字符为‘*’,调用函数setw(6)设置每次输出的宽度为6,所以第一次输出123时,多余的三个空位用‘*’填充,即结果为***123,第二次从输出流中输出456。19、在表达式x+y*z中,+是作为成员函数重载的运算符,木是作为非成员函数重载的运算符。下列叙述中正确的是()。A、operator+有两个参数,operator*有两个参数B、operator+有两个参数,operator*有一个参数C、operator+有一个参数,operator*有两个参数D、operator+有一个参数,operator*有一个参数标准答案:C知识点解析:此题考查的是运算符的重载。运算符可重载成员函数,也可重载为友元函数。当重载为成员函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个;当重载为友元函数时,其参数个数应与操作数的个数相同。20、C++中的模板包括()。A、对象模板和函数模板B、对象模板和类模板C、函数模板和类模板D、变量模板和对象模板标准答案:C知识点解析:此题考查的是模板。在C++语言中,模板有两类:函数模板和类模板。21、下列模板声明中,有语法错误的是()。A、templateTfun(Tx){returnx;}B、templateTfun(Tx,intn){returnx*n;}C、templateTfun(T*p){return*p;}D、templateTclassA{Tn;};标准答案:D知识点解析:第四个选项是定义类模板的,但是class前面的T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。国家二级C++机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列选项中,不属于模块间耦合的是()。A、内容耦合B、异构耦合C、控制耦合D、数据耦合标准答案:B知识点解析:耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦合一一若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共耦合一一若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合一一若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合一一若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。标记耦合一一若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。数据耦合一一若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。非直接耦合一一若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。2、下列关于栈的叙述正确的是()。A、栈按“先进先出”组织数据B、栈按“先进后出”组织数据C、只能在栈底插入数据D、不能删除数据标准答案:B知识点解析:栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。3、下列数据结构中,属于非线性结构的是A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类:线性结构和非线性结构。循环队列、带链队列和带链栈都是线性结构,而二叉树是非线性结构。4、定义如下枚举类型enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2};表达式Wednesday=Friday的值是()。A、falseB、trueC、2D、异常标准答案:B知识点解析:enum<枚举类型名>{<枚举元素表>);其中:关键词“enum”表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。本题中的枚举类型中的数据值Wednesday为2,而Friday的值赋值为2,所以判断Wednesday等于Friday的表达式值为真,即true。5、从工程管理角度看,软件设计一般分为两步完成,它们是()。A、概要设计与详细设计B、数据设计与接口设计C、软件结构设计与数据设计D、过程设计与数据设计标准答案:A知识点解析:软件设计是开发阶段最重要的步骤.从工程管理的角度来看可分为两步:概要设计和详细设计.概要设计是将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式;详细设计是指确立每个模块的实现算法和局部数据结构,用适应方法表示算法和数据结构的细节。从技术观点来看,软件设计包括软件结构设计(定义软件系统各主要部件之间的关系)、数据设计(将分析时创建的模型转化为数据结构)、接口设计(描述软件内部、软件与协作系统之间以及软件与人之间如何通信)、过程设计(把系统结构部件转换成软件的过程)四个步骤。6、用树形结构表示实体之间联系的模型是()。A、关系模型B、网状模型C、层次模型D、以上三个都是标准答案:C知识点解析:层次模型的基本结构是树形结构,这种结构方式在现实世界中很普遍,它们自顶向下、层次分明。7、有三个关系R、S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为()。A、选择B、投影C、交D、并标准答案:D知识点解析:由关系T中的数据可以看出,其数据由关系R和s的数据组成。所以关系T是由关系R和T通过并运算得到的。8、在类声明中,紧跟在“public:”后声明的成员的访问权限是()。A、私有B、公有C、保护D、默认标准答案:B知识点解析:类【{1提供了3种访问控制的权限:公有,私有和保护。其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。9、下列叙述中,错误的是()。A、false是一个逻辑型常量B、b是一个字符型常量C、365是一个int常量D、3.1415926是一个double常量标准答案:B知识点解析:字符常量简称字符,它以单引号作为起止符号,中间有一个或若干个字符。或者以“\”开头的包括多个字符的字符序列也符合规定的字符常量。10、有如下类的定义。横线处的语句是()。classMyClass{public:MyClass(inta=0,intb=0){X=a;Y=b:}voidChange()const{X-=10;Y+=10;}private:intX,Y;};A、staticB、constC、mutableD、不需要填入内容标准答案:C知识点解析:C++中const关键字用来表示一个常量,同时const也用来修饰函数。这两个概念需要明确:const所修饰的函数只能是类的成员函数,因为const所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable则是用来修饰类的成员变量,让该变量在const所修饰的成员函数中可以被修改。而且const修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。11、在关系数据库中,用来表示实体间联系的是A、属性B、二维表C、网状结构D、树状结构标准答案:B知识点解析:在关系数据库中,实体间的联系由一个二维表来表示。12、有如下程序:#include<iostream>usingnarnespacestd;classTestClass{public:TestClass(){cout<<’’BB’’;fun();}voidfun(){tout<<’’Bf’’;}};classTestClass1:publicTestClass{public:TestClass1(){cout<<’’DD’’;}voidfun(){tout<<’’Df’’;}};intmain(){TestClass1d;return0;}执行上面的程序将输出()。A、BBBfDDB、BBDfDDDfC、DDD、DDBBBf标准答案:A知识点解析:TestClass是TestClass1的基类。由主函数main入手,定义TestClass1的对象d,调用基类TestClass构造函数输出BB,调用基类成员函数fun输出Bf,然后调用派生类的构造函数,输出DD。13、若有下面的函数调用:fun(a+b,3,max(n—1,b))则fun的实参个数是()。A、3B、4C、5D、6标准答案:A知识点解析:此题考查的是函数的调用。C++中函数调用的一般形式为:函数名(实参表),其中实参表是用逗号分隔的一系列表达式。因此,本题中fun0函数的实参表由a+b、3和max(n—1,b)组成。14、下面是重载为非成员函数的运算符函数原型,其中错误的是()。A、Fractionoperator+(Fraction,Fraction);B、Fractionoperator-(Fraction);C、Fraction&operator=(Fraction&,Fraction);D、Fraction&operator+=(Fraction&,Fraction);标准答案:C知识点解析:此题考查的是运算符重载。C++语言规定,“=”运算符只能作为成员函数重载。15、有如下程序:#include<iostream>usingnamespacestd;classPart{public:Part(intx=0):val(x){cout<<val;}~Part(){cout<<val;}private:intval;};classWhole{public:Whole(intx,inty,intz=0):p2(x),p1(y),val(z){cout<<val;}~Whole(){cout<<val;}private:Partp1,p2;intval;};intmain(){Wholeobj(1,2,3);return0;}程序的输出结果是()。A、123321B、213312C、213D、123123标准答案:B知识点解析:此题考查的是类的构造与析构。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序,最后执行自身的构造函数。析构顺序与之相反。本题中,Whole类中有两个Part类的成员p1和p2,根据它们定义的顺序,先构造p1再构造p2。所以,首先被构造的是p1(y),输出2;第二个被构造的是p2(x),输出1;最后调用析构函数,输出val的值3;析构函数调用顺序与构造函数相反。故最后输出213312。16、有如下程序:#include<iostream>usingnamespacestd;classToy{public:Toy(char*_n){strcpy(name,_n);count++;}~TOYO{count--;}char*GetName(){retBtnname;}staticintgetCount(){returncount;}private;charname[10];staticintcount;};intToy::count=0;intmain(){Toyt1(’’Snoopy’’),t2(’’Mickey’’),t3(’’Barbie’’);cout<<t1.getCount()<<end1;return0;}运行时的输出结果是()。A、1B、2C、3D、运行时出错标准答案:C知识点解析:类Toy中包含一个字符数组name和一个静态整型变量count。在程序中首先给类Toy的成员count的赋初始值0,然后在主函数中,定义了三个Toy对象t1、t2、t3,并分别对它们的name字段赋值,在赋值的同时变量count的值加l,所以最后变量count的值等于3。17、有如下语句序列:intx=100,&r==x:cout<A、100-100B、100-0012FF7CC、0012FF7C-100D、0012FF7C-0012FF7C标准答案:A知识点解析:在语句intx=100,&r==x;中声明r初始化对x的引用,所以x和&r的值都是100。18、有如下程序:#includeusingnamespacestd;classBase{public:voidfun1(){cout<<"Baseha";}virtualvoidfun2(){cout<<"Base\n";}};classDerived:publicBase{public:voidfun1(){cout<<"Derivedha";}voidfun2(){cout<<"Derivedha";}};voidf(Base&b){b.fun1();b.fun2();}intmain(){Derivedobj;f(obj);return0;}执行这个程序的输出结果是()。A、BaseBaseB、BaseDerivedC、DerivedBaseD、DerivedDerived标准答案:B知识点解析:此题考查的是虚函数的概念。在C++语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在~模一样的成员函数。那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象obj,所以在调用fun1()时,运行的是基类的版本,而fun2()运行的是派生类的版本。19、将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是()。A、不合法的运算符B、—元运算符C、无操作数的运算符D、二元运算符标准答案:B知识点解析:对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。20、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+{Data};C、Data+operator{Data};D、operator+(Data,Data);标准答案:B知识点解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。21、下列关于C++流的说明中,正确的是()。A、与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现B、从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作C、cin是一个预定义的输入流类D、输出流有一个名为open的成员函数,其作用是生成一个新的流对象标准答案:A知识点解析:此题考查的是C++流的概念。从输入流中提取数据称为提取操作,把表达式插入到输出流中的操作称为插入操作,故选项B错误:cin是一个预定义的输入流对象而不是流类,故选项C错误:输入输出流中没有open成员函数,故选项D错误。22、语句ofstreamf("SALARY.DAT",ios_base::app);功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且()。A、若文件存在,将其置为空文件;若文件不存在,打开失败B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D、若文件存在,打开失败;若文件不存在,建立一个新文件标准答案:B知识点解析:此题考查的是文件打开模式。文件打开模式iso_base::app是为添加数据而打开(总是在尾部写),故只有选项B说法正确。23、下列语句分别是不同程序中的第一个输入输出语句,若去掉其中的“<<left”,输出效果将发生变化的是()。A、cout<<left<<setfill(’*’)<<357;B、cout<<left<<setw(5)<<357;C、cout<<left<<setw(5)<<"ABCDE";D、cout<<left<<"ABCDE“:标准答案:B知识点解析:此题考查的是C++流。setfill()作用是设置填充字符;left是使输出数据在指定宽度内左对齐:setw()的作用是设置输入输出宽度,且只对当前…次有效。24、要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是()。A、ifstreamfin=ifstream.open(’’file.dat’’);B、itstream*fin=ewifstream(’’file.dat’’);C、ifstreamfin;fin.open(’’file.dat’’);D、ifstream*fin=newifstream0;fin->open(’’file.dat’’);标准答案:A知识点解析:在选项A中,在赋值号的左侧表示建立一个输入流对象fin,而在赋值号的右侧的表达式不正确,因为文件输入流类ifstream不能直接调用其成员函数open。25、当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为()。A、iosbase::inB、ios_base::binaryC、ios_base::inliosbase::outD、ios_base::out标准答案:D知识点解析:对于ofstream,默认的打开方式是iosbase::out,ofstream只能用于输出,它没有提供任何用于输入的操作。国家二级C++机试(选择题)模拟试卷第4套一、选择题(本题共34题,每题1.0分,共34分。)1、算法的空间复杂度是指()。A、算法程序的长度B、算法程序中的指令条数C、算法程序所占的存储空间D、算法执行过程中所需要的存储空间标准答案:D知识点解析:算法的空间复杂度是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。2、下列叙述中正确的是()。A、算法的效率只与问题的规模有关,而与数据的存储结构无关B、算法的时间复杂度是指执行算法所需要的计算工作量C、数据的逻辑结构与存储结构是一一对应的D、算法的时间复杂度与空间复杂度一定相关标准答案:B知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量。算法的工作量用算法所执行的基本运算的次数来度量,而算法所执行的基本运算次数是问题规模的函数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。算法的时间复杂度与空间复杂度并不相关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间的关系,是独立于计算机的:数据的存储结构是研究数据元素和数据元素之间的关系如何在计算机中表示,它们并非一一对应。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。3、如果有以下定义及初始化:inta=3,*p=&a;则由此可以推断,*p的值是()。A、变量a的值,即3B、变量a的地址值C、变量P的地址值D、无意义标准答案:A知识点解析:题目中的定义初始化是定义一个整型变量a,初始化为3。而“int*p=&a;”是定义一个整型指针变量p,将变量a的地址作为指针变量p的初值。木p是指针变量p指向的存储单元的内容,即变量值。所以木p指向a的值3。4、一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为()。A、219B、221C、229D、231标准答案:A知识点解析:在二叉树中,叶子结点个数为n0,则度为2的结点数n2=n0-1。本题中叶子结点的个数为70,所以度为2的结点个数为69,因而总结点数=叶子结点数+度为1的结点数+度为2的结点数=70+80+69=219。5、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的性质,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中的二叉树的叶子结点为1,因此度为2的结点的数目为0,故该二叉树为7层,每层只有一个结点。6、软件生命周期是指()。A、软件产品从提出、实现、使用维护到停止使用退役的过程B、软件从需求分析、设计、实现到测试完成的过程C、软件的开发过程D、软件的运行维护过程标准答案:A知识点解析:软件生命周期是指软件产品从提出、实现、使用、维护到停止使用、退役的过程。7、软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于()。A、定义阶段B、开发阶段C、维护阶段D、上述三个阶段标准答案:B知识点解析:本题考查软件生命周期的相关概念.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。还可以将软件生命周期分为软件定义、软件开发及软件运行维护三个阶段。8、多继承的构造顺序可分为如下四步:①所有非虚基类的构造函数按照它们被继承的顺序构造②所有虚基类的构造函数按照它们被继承的顺序构造③所有子对象的构造函数按照它们声明的顺序构造④派生类自己的构造函数体这四个步骤的正确顺序是()。A、④③①②B、②④③①C、②①③④D、③④①②标准答案:C知识点解析:多继承派生类的构造顺序是:首先调用虚基类的构造函数,然后调用非虚基类的构造函数按照它们被继承的顺序构造,其次调用子对象的构造函数,最后是派生类构造函数中的内容。9、下列语句中,错误的是()。A、constintbuffer=-256;B、constanttemp;C、constdouble*point;D、constdouble*it=newdouble(5.5);标准答案:B知识点解析:符号常量声明语句的语法格式是:const类型名符号常量=初值表达式,选项B中未给常变量赋初值,故错误;而选项C中定义的是一个指向浮点型常量的指针,而不是定义一个浮点型常量,所以可以不赋初值。10、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<<x;)};classDerived:publicBase{public:Derived(intx=0){cout<<x;)private:Baseval;);intmain(){Derivedd(1);return0:}程序的输出结果是()。A、0B、1C、01D、001标准答案:D知识点解析:此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右).>执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序.>执行自身的构造函数。本题中,首先会构造基类Base,调用Base类的构造函数,输出0;然后还定义了一个Base类的对象,再次调用Base类的默认构造函数输出0;最后构造自身,因主函数中传入了构造参数l,所以输出1。故最后输出结果是:001。11、对C++编译器区分重载函数无任何意义的信息是()。A、参数类型B、参数个数C、返回值类型D、常成员函数关键字const标准答案:C知识点解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为c。12、在关系模型中,每一个二维表称为一个()。A、关系B、属性C、元组D、主码(键)标准答案:A知识点解析:每个二维表代表一个关系,由表框架及表的元组组成。13、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、笛卡儿乘积标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。形式定义如下:R∩S≡{t∈R∧t∈S}=R-(R-S)。所以不改变关系表中的属性个数,但能减少元组个数的是关系表之间的交操作。14、下列有关继承和派生的叙述中,正确的是()。A、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成员C、基类对象可以赋值给派生类对象D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类标准答案:D知识点解析:此题考查的是继承和派生。无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项A和B错误;公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象,所以选项C错误。15、阅读下面的程序:#include<iostream.h>voidmain(){intx;cin>>x;if(x++>5)cout<<x<<endl;elsecout<<x--<<endl;}如果两次执行上述程序,且键盘输入分别为4和6,则输出结果分别是()。A、4,6B、3,6C、4,7D、5,7标准答案:D知识点解析:此题首先读入数值4赋给变量x,因为x++>5不成立,因为“++”后缀,之后x的值变为5,执行语句cout<<x--<<endl;输出:5,之后x的值变为4。当读入的数值是6时,因为x++>5成立,所以执行语句cout<<x<<endl;输出7。16、下列关于基类和派生类关系的叙述中,正确的是()。A、每个类最多只能有一个直接基类B、派生类中的成员可以访问基类中的任何成员C、基类的构造函数必须在派生类的构造函数体中调用D、派生类除了继承基类的成员,还可以定义新的成员标准答案:D知识点解析:继承分为单继承和多继承,一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。派生类的数据成员由所有基类的的数据成员与派生类新增的数据成员共同组成。17、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:重载赋值运算符必须定义为类的成员函数;所以选项A正确。重载赋值运算符时应返回一个类的对象,所以C选项错误。如果已经定义了复制(拷贝)构造函数,仍然可以重载赋值运算符,所以D选项错误。18、下列关于派生类和基类的描述中,正确的是()。A、派生类成员函数只能访问基类的公有成员B、派生类成员函数只能访问基类的公有和保护成员C、派生类成员函数可以访问基类的所有成员D、派生类对基类的默认继承方式是公有继承标准答案:B知识点解析:派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。19、为了取代C中带参数的宏,在C++中使用()。A、重载函数B、内联函数C、递归函数D、友元函数标准答案:B知识点解析:此题考查的是内联函数。C++语言引入内联函数的原因是用它来取代C语言的预处理宏函数。20、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载,可以定义新的运算符B、有的运算符只能作为成员函数重载C、若重载运算符+,则相应的运算符函数名是+D、重载一个二元运算符时,必须声明两个形参标准答案:B知识点解析:此题考查的是运算符重载。c++中,“=”、“[]”、“()”、“->”以及所有的类型转换符只能作为成员函数重载,故B选项正确;运算符重载只是赋予已有的运算符多重含义,并不是定义新的运算符;运算符函数的函数名就是在运算符前加上关键字operator。21、若已经声明了函数原型“voidfun(inta,doubleb=0.0);”,则下列重载函数声明中正确的是()。A、voidfun(inta=90,doubleb=0.0);B、intfun(inta,doubleb);C、voidfun(doublea,intb);D、boolfun(inta,doubleb=0.0);标准答案:C知识点解析:函数重载的原则就是至少要在参数个数或参数类型上有所不同。且如果函数只是函数类型不同的,而其他完全相同,也不能作为重载函数来使用。22、下列描述中,不属于面向对象思想主要特征的是()。A、封装性B、跨平台性C、继承性D、多态性标准答案:B知识点解析:封装性、继承性和多态性是面向对象程序设计的三个基本特征。跨平台性不是面向对象程序设计的特征。23、将运算符“+”重载为非成员函数,下列原型声明中,错误的是()。A、MycloCkoperator+(MyClock,long);B、MycloCkoperator+(MyClock,MyClock);C、MycloCkoperator+(1ong.long);D、MycloCkoperator+(1ong,MyClock);标准答案:C知识点解析:运算符重载不能有二义性,故选项C)不能区分运算符的准确含义。24、下列关于模板的叙述中,错误的是()。A、调用模板函数时,有时可以省略模板实参.B、函数模板的每个实例就是一个函数定义C、类模板的每个实例就是一一个类定义D、类模板的实例是一个类对象标准答案:D知识点解析:在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。25、若Myclass为一个类,执行“Myclassa[4],*p[5];”语句时会自动调用该类构造函数的次数是()。A、2B、5C、4D、9标准答案:C知识点解析:语句MyClassa[4],*p[5]不仅定义了4个MyClass对象,分别为a[0],a[1],a[2],a[3],而且定义了5个指向MyClass对象的指针变量,分别为*p[0],*p[1],*p[2],*p[3],*p[4],所以共调用MyClass的构造函数4次。26、有如下类和对象的定义:c1assConstants{public;staticdoublegetPIO{retum3.1416;)};Constantsconstants,下列各组语句中,能输出3.1416的是()。A、cout<<constants—>getPI();和cout<<Constants::gerPI();B、cout<<constants.getPI();和cout<<Constants.getPI();C、cout<<constants—>getPI();和cout<<Constants—>getPI();D、cout<<constants.getPI();和cout<<Constants::getPI();标准答案:D知识点解析:此题考查的是静态成员函数的引用。getPI()是类Constants的静态成员函数。引用静态成员函数可以有两种形式:一是通过类名直接进行调用,例如类名::静态成员函数名:另一种是用类的任何对象名进行调用其作用仅是通过对象名间接的指出类名,例如constants.getPI()选项D即是这种调用方式。27、已知类Myclass的定义如下classMyClass{public:voidfunction1(MyClass&c){cout<<c.data;}staticvoidfunction2(MyClass&c){cout<<c.data;}voidfunction3(){cout<<data;}staricvoidfunction4(){cout<<data;}private:intdata;};其中有编译错误的函数是()。A、function1B、function2C、function3D、functicIn4标准答案:D知识点解析:funcyion4()函数作为类的静态成员函数,不能直接访问类中说明的非静态成员,即cout<<data在编译时会出错。28、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assA{public:A(inti=0):rl(i){}voidprint(){cout<<’E’<<rl<<’—’;)voidprint()const{cout<<’Ck<rl*rl<<’—’;}voidprint(intx){cout<"pk<rl*rl*rl<<’—’;}private:intr1,};intmain(){Aa1;constAa2(4);al.print(2);a2.print();returnO;}运行时的输出结果是()。A、P8—E4B、P8—C16—C、P0—E4—D、P0—C16—标准答案:D知识点解析:在主函数中创建al对象时,调用类A的默认构造函数,其数据成员r1的值等于O。当执行al.print(2)语句时,调用带参数的print成员函数,所以输出结果为p0—,对象a2为常成员,所以其成员变量r1的值等于4,因为常对象只能调用常成员函数,所以当执行语句a2.print()语句时,输出结果为C14—。29、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlongfun(Samples);public:Sample(longa){x=a;}private:longx;};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));}cout<<sum;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。30、在类声明中,紧跟在“public:”后声明的成员的访问权限是()。A、私有B、公有C、保护D、默认标准答案:B知识点解析:类中提供了3种访问控制的权限:公有,私有和保护。其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。31、有如下类声明:c1assMyBASE{intk;public:voidset(intn){k=m;}intget()const{returnk;}};c1assMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{retumMyBASE::get()+j;}};则类MyDERIVED中保护的数据成员和成员函数的个数是()。A、4B、3C、2D、1标准答案:B知识点解析:此题考查的是派生与继承中的访问权限。protected派生:private—>不可见:protected—>private;public一>protected。32、有如下程序:#inc1ude<iostream>usingnamespacestd;classMusic{public:voidsetTitle(char*str){strcpy(title,str);)protected:chartype[10];private:chartitle[20];};classJazz:publicMusic{public:voidset(char*str){strcpy(type,"Jazz");//①strcpy(title,str);//②}};下列叙述中正确的是()。A、程序编译正确B、程序编译时语句①出错C、程序编译时语句②出错D、程序编译时语句①和②都出错标准答案:C知识点解析:派生类Jazz不能访问基类Music中的私有成员title。33、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载,可以定义新的运算符B、有的运算符只能作为成侵函数重载C、若重载运算符+,则相应的运算符函数名是+D、重载一个二元运算符时,必须声明两个形参标准答案:B知识点解析:此题考查的是运算符重载。C++中,“=”、“[]”、“()”、“一>”以及所有的类型转换符只能作为成员函数重载,故B选项正确;运算符重载只是赋予已有的运算符多重含义,并不是定义新的运算符;运算符函数的函数名就是在运算符前加上关键字operator。34、在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。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相对于文件尾。国家二级C++机试(选择题)模拟试卷第5套一、选择题(本题共19题,每题1.0分,共19分。)1、下列运算符不能重载为友元函数的是()。A、=()[]->B、+-++--C、><>=<=D、+=-=*=/=标准答案:A知识点解析:此

温馨提示

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

评论

0/150

提交评论