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

下载本文档

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

文档简介

国家二级(C++)机试模拟试卷30(共9套)(共372题)国家二级(C++)机试模拟试卷第1套一、选择题(本题共38题,每题1.0分,共38分。)1、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。2、有如下程序:#includeusingnamespacestd;intmain(){int*p;*p=9;cout<<"Thevalueatp:"<<*p;return0;}编译运行程序将出现的情况是()。A、编译时出现语法错误,不能生成可执行文件B、运行时一定输出:Thevalueatp:9C、运行时一定输出:Thevalueatp:*9D、运行时有可能出错标准答案:D知识点解析:先定义指针变量,然后给指针变量赋初值有三种情况:①用取地址运算符“&”将变量地址赋给指针变量,如p=&a;②将一个指针变量中的地址赋给另一个指针变量,如p=p1;③给指针变量赋空值0,如q=0,表示该指针变量不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选D。3、在C++语言中函数返回值的类型是由()决定的。A、调用该函数时系统临时B、return语句中的表达式类型C、定义该函数时所指定的函数类型D、调用该函数时的主调函数类型标准答案:C知识点解析:C抖中函数return语句中返回的类型应与函数定义指定的类型一致,即函数定义的类型即为函数应返回的类型。4、下列说法中错误的是()。A、公有继承时基类中的public成员在派生类中仍是public的B、公有继承时基类中的private成员在派生类中仍是private的C、私有继承时基类中的public成员在派生类中是private的D、保护继承时基类中的public成员在派生类中是protected的标准答案:B知识点解析:公用继承时基类中的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。私有继承时,基类的公有成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有。受保护的继承时,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员认为基类私有。5、设有以下定义和程序:#includeclassTestClass1{public:voidshowl(){cout<<"TestClass1"<A、obj1.showl();B、obj2.showl();C、obj3.showl();D、obj2.show2();标准答案:C知识点解析:TestClass1为TestClass2的私有基类,所以派生类TestClass2中继承过来的show1()为私有的。TestClass3为TestClass2的受保护派生类。所以TestClass3定义的对象不能访问TestClass中的showl()。6、以下程序的输出的结果是()。#includeintx=3:voidmain(){voidfun();inti;for(i=l;iA、3,3B、2,2C、2,6D、2,5标准答案:C知识点解析:由主函数入手,在for循环中调用fun函数,其中调用次数为2次。fun中x为静态变量,有效到文件结束,所以第一次调用为x=x*(x+1)=1*(1+1)=2,第二次调用2*(2+1)=6。7、有如下函数模板:templateTsquare(Tx){returnx*x;)其中T是()。A、函数形参B、函数实参C、模板形参D、模板实参标准答案:C知识点解析:此题考查的是函数模板。声明一个函数模板的格式是:template<模板形参表声明>函数声明,{函数体)其中的<模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名;类型修饰参数名。8、有下列程序#includevoidmain(){charc1,c2;scanf("%c"&c1);while(c1<65‖c1>90)scanf("%c",&c1);c2=c1+32:printf("%c,%c\n”,c1,c2);}程序运行输入65回车后,输出结果为()。A、65B、不能输出结果C、33D、无法确定标准答案:B知识点解析:当输入65时,不符合while循环语句的要求,程序就会终止,不能往下执行。9、下列数据结构中,属于非线性结构的是()。A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。10、静态数据成员在()进行初始化。A、成员函数列表B、类体外C、构造函数D、成员函数标准答案:B知识点解析:静态数据成员不能在参数初始化表对静态数据成员初始化,只能在类体外进行初始化。11、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+(Data);C、Data+operator(Data);D、operator+(Data,Data);标准答案:B知识点解析:根据重载加法运算符的格式,只有B选项正确。12、在下列关键字中,不能用来表示继承方式的是()。A、privateB、staticC、publicD、protected标准答案:B知识点解析:3种继承方式:公用继承、私有继承和保护继承分别使用:public、private和protected3个关键字来定义。13、下面关于构造函数和析构函数的描述中,错误的是()。A、析构蛹数可以声明为虚函数B、对虚析构蛹数的调用以采用动态联编C、一个类的虚函数仪对派乍类中重定义的函数起作用,对其他函数没有影响D、构造蛹数可以声明为虚函数标准答案:D知识点解析:析构函数可以声明为虚函数,但是构造函数不能声明为虚函数:类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响。14、在进行任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是()。A、failB、eofC、badD、good标准答案:B知识点解析:可以用文件流对象的成员函数来判别文件流当前的状态:fail,刚进行的操作失败时返回true,否则返回false:eof,进行输入操作时,若文件到达文件尾返回true,否则返回false;bad,如果进行了非法操作返回true,否则返回false;good,刚进行的操作成功时返回true,否则返回false。15、下列不是创建表结构的视图形式的是()。A、数据库视图B、表向导视图C、设计视图D、数据表视图标准答案:A知识点解析:创建表结构的方法有数据表视图、设计视图和表向导视图3种;而数据库视图是用来创建数据库的。16、派生类的构造函数的成员初始化列中,不能包含()。A、基类的构造函数B、派生类中子对象的初始化C、基类的子对象初始化D、派生类中一般数据成员的初始化标准答案:C知识点解析:派生类的构造函数会调用基类的构造函数。对于基类子对象的初始化会在基类的构造函数中进行。派生类会为基类提供参数,当基类的构造函数收到参数时会将参数传递给相应的基类子对象。17、执行完下列代码段之后:bootx=true,V=false,Z=false;x=x&&yttz;y=xIIy&&z;z=!(x!=y)II(y=z);则x=false,y=false,z=()。A、真B、假C、不确定D、异常标准答案:A知识点解析:其中“x=x&&yfIz;”语句计算后x=false,“y=xlIy&&z;”语句计算后y=false。那么“z=!(x!=y)ll(y==z);”语句计算后“z=!(。ture)lItrue”,所以答案为:true.18、下列对模板的声明中,正确的是()。A、template<T>B、template<classT1.T2>C、template<classT1,classT2>D、template<classT1;classT2>标准答案:C知识点解析:声明一个函数模板的格式为:template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。19、下列关于this指针的叙述中,正确的是()。A、任何与类相关的函数都有this指针B、类的成员函数都有this指针C、类的友元函数都有this指针D、类的非静态成员函数才有this指针标准答案:D知识点解析:此题考查的是this指针的使用。类的每一个非静态成员函数都有一个隐含的常量指针,即this指针。类的静态成员函数不能含有this指针,因为this指针是一个指向本对象的指针。20、假定在一个程序中执行到语句:cout<<12.345<<___________<<34.567;得到的输出结果为:**12.345**34.567则语句中下划线处遗漏的格式控制操作符是A、setprecision(3)B、fixedC、setfill(’*’)D、setw(8)标准答案:D知识点解析:由输出结果可知,输出的数据都前向补齐’*’,使得每个输出数据有8位,而setw是用来控制输入输出的宽度,答案为D。21、对下列二叉树进行前序遍历的结果为A、DYBEAFCZXB、YDEBFZXCAC、ABDYECFXZD、ABCDEFXYZ标准答案:C知识点解析:前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。前序遍历描述为:若二叉树为空,则执行空操作。否则:①访问根结点;②前序遍历左子树;③前序遍历右子树,C正确。22、有如下两个类定义:classXX{private:doublex1;protected:doublex2;public:doublex3;};classYY:protectedXX{private:doubley1;protected:doubley2;public:doubley3;};在类YY中保护成员变量的个数是A、1B、2C、3D、4标准答案:C知识点解析:本题考查派生类对基类成员的访问属性,派生类保护继承基类,那么基类的公用成员和保护成员在派生类中成为保护成员,所以派生类YY总共有3个保护成员,C选项正确。23、下列关于模板的表述中,错误的是A、类模板的成员函数都是模板函数B、函数模板是一种参数化类型的函数C、满足一定条件时可以省略模板实参D、模板形参只能由关键字typename声明标准答案:D知识点解析:模板形参由关键字typename或者class声明,所以D选项错误。24、设有栈S和队列Q,初始状态均为空。首先依次将A,B,C,D,E,F入栈,然后从栈中退出三个元素依次入队,再将X,Y,Z入栈后,将栈中所有元素退出并依次入队,最后将队列中所有元素退出,则退队元素的顺序为A、DEFXYZABCB、DEFXYZABCC、FEDXYZCBAD、DEFZYXABC标准答案:B知识点解析:栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。队列是指允许在一端进行插入,而在另一端进行删除的线性表。将A,B,C,D,E,F入栈后,栈中元素为ABCDEF,退出三个元素入队,队列元素为FED,将X,Y,Z入栈后栈中元素为ABCXYZ,全部入队后,队列元素为FEDZYXCBA,故B选项正确。25、结构化程序所要求的基本结构不包括()。A、顺序结构B、GOTO跳转C、选择(分支)结构D、重复(循环)结构标准答案:B知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。26、下列函数模板的定义中,合法的是()。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。27、有如下程序:#includeusingnamespacestd;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.fun1();//①obj.fun2();//②obj.fun3();//③obj.fun4();//④return0;}其中有语法错误的语句是()。A、①②③④B、①②③C、②③④D、①④标准答案:B知识点解析:本题考查保护继承中派生类对基类的访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以①②③错误。28、有如下类定义: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知识点解析:默认继承方式为私有继承,私有继承将基类的公用成员和保护成员都变为了私有成员,基类的私有成员依然属于基类私有,派生类不能访问基类的私有成员。所以A选项正确。29、在C++中,编译系统自动为一个类生成默认构造函数的条件是A、该类没有定义任何有参构造函数B、该类没有定义任何无参构造函数C、该类没有定义任何构造函数D、该类没有定义任何成员函数标准答案:C知识点解析:本题考查默认构造函数,如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。C选项正确。30、已知函数func的原型为intfunc(int,int);下列重载函数原型中错误的是A、charfunc(int,int);B、boolfunc(int,int,bool);C、intfunc(int,char*);D、floatfunc(int,int,int);标准答案:A知识点解析:本题考查函数重载相关知识,重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。A选项的形参都与原函数相同,所以不能作为重载函数。31、已知数组arr的定义如下:intarr[5]={1,2,3,4,5};下列语句中输出结果不是3的是A、cout<<*arr+2<B、cout<<*(arr+2)<C、cout<<arr[2]<D、cout<<*arr<标准答案:D知识点解析:本题考查以为数组和指针,一维数组名可以作为一个指针,指向数组的第一个元素,题目中要求输出3,那么就是指向了数组的第三个元素,*arr表示数组的第一个元素1,所以输出不出来3,所以选择D选项。32、有函数模板声明和一些变量定义如下:templateT1sum(T2,T3);doubled1,d2;则下列调用中,错误的是A、sum(d1,d2);B、sum(d1,d2);C、sum(d1,d2);D、sum(d1,d2);标准答案:D知识点解析:本题考查函数模板的定义和使用,编译器无法推演出T1的类型,D选项里没有写明T1的类型,而sum函数需要T1的类型去特化出一个函数能够处理d1和d2这两个参数的函数。其他的都可以。33、有如下程序:#includeusingnamespacestd;voidf1(int&x,int&y){intz=x+y;x=y;y=z;}voidf2(intx,inty){intz=x+y;x=y;y=z;}intmain(){intx=10,y=26;f1(x,y);f2(x,y);cout<A、10B、26C、36D、46标准答案:C知识点解析:参数传递有三种:传值(value),传址(address),和传引用(reference)传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值,函数f2就属于传值调用,所以不会改变y的值。传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量传引用则是一种看起来像传值调用,而实际上功能同传址一样的传递方式。子函数可以改写父函数的变量值。f1函数属于传引用调用,所以y的值在执行完函数后变为了36,C选项正确。34、下列运算符函数中肯定不属于类FunNumber的成员函数的是()。A、intoperator-(FunNumber);B、FunNumberoperator-();C、FunNumberoperator-(int);D、intoperator-(FunNumber,FunNumber);标准答案:D知识点解析:本题考查运算符重载的一些规则:①一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符=、()、[]、->不能重载为类的友元函数;③类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数;④若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好;⑤若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数;⑥当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以答案为D。35、堆排序最坏情况下的时间复杂度为A、O(n15)B、O(nlog2n)C、[*]D、O(log2n)标准答案:B知识点解析:堆排序属于选择类的排序方法,最坏情况时间复杂度为O(nlog2n)。故B选项正确。36、有如下类定义:classBase{public:voidfun(){cout<<"Base::fun"<A、Base.fun();B、Base->fun();C、Base::fun();D、fun();标准答案:C知识点解析:基类Base和派生类Derived中使用同一名字的成员函数fun,所以在派生类Derived的作用域中,派生类Derived中的fun函数会屏蔽基类Base中的fun函数,即Base的fun函数对Derived不可见,这是因为编译器在查找名字fun时,首先在Derived中找到,这样编译器就不再继续查找,所以若想在Derived中调用Base的fun函数,必须显式的说明fun函数属于Base,这里使用作用域运算符访问被屏蔽的fun,调用语句为:Base::fun();答案为C。37、有如下程序#includeusingnamespacestd;classAA{charc;public:AA(charch):c(ch){cout<A、MCBB、BMCC、CMBD、BCM标准答案:C知识点解析:派生类构造函数的工作过程:1、派生类的构造函数在执行函数体之前,首先调用基类的构造函数初始化基类;2、基类构造完成之后,在执行函数体之前根据声明次序初始化自己的成员;3、执行自身函数体。由上可知,构造函数初始化列表并不指定初始化的执行次序。所以程序中在创建BB对象时,首先调用AA的构造函数,输出"C",然后初始化类BB中的成员对象m,m是AA类对象,调用AA的构造函数,输出"M",最后执行函数体,输出"B";输出顺序为:"CMB",答案为C。38、在数据管理技术发展的三个阶段中,数据共享最好的是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C。二、基本操作题(本题共1题,每题1.0分,共1分。)39、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Name:SmithAge:21ID:99999CourseNum:12Record:970注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classStudentlnfo{protected://ERROR**********found**********charName;intAge;intID;intCourseNum;floatRecord;public:Studentlnfo(char*nanle,intAge,intID,intcourseNum,floatrecord);//FRROR**********found**********void~Studentlnfo(){}floatAverageRecord(){returnRecord/CourseNum;}voidshow()const{cout<<"Name:"<ID=ID;CourseNum=courseNum;Record=record;}intmain(){Studentlnfost("Smith",21,99999,12,970);st.show();return0;}标准答案:(1)char*Name;(2)~Studentlnfo(){}(3)Studentlnfo::Studentlnfo(char*name,intage,intID,intcourseNam,floatrecord)知识点解析:(1)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是一个有效char型字符,因此要定义成char型指针。(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。(3)主要考查考生对构造函数定义的掌握,构造函数也要使用作用域符号“::”。三、简单应用题(本题共1题,每题1.0分,共1分。)40、请打开考生文件夹下的解决方案文件proj2,其中定义了Component类、Composite类和Leaf类。Component是抽象基类,Composite和Leaf是Component的公有派生类。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:LeafNode注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<ioStream>usingnamespacestd;classComponent{public://声明纯虚函数print()//*******found*******_______};classComposite:publicComponent{public://*******found*******VOidSetChild(_______){m_child=chiid;}virtualvoidprint()const{m_chiid->print();}private:Component*m_chiid;};classLeaf:publicComponent{public:virtualvoidprint()const{//*******found*******}};intmain(){Leafnode;Compositecomp;comp.setChiid(&node);Component*p=&comp:p->print();return0;}标准答案:(1)virtualvoidprint()const=0;(2)Component*child(3)cout<<"LeafNode"<<endl;知识点解析:(1)主要考查考生对纯虚函数的掌握,题目要求声明纯虚函数print()。在其派生类中print()函数的定义为virtualvoidprint()const,由此可知纯虚函数为virtualvoidprint()const=0。(2)主要考查考生对成员函数的掌握,题目要求填写函数voidsetChild的形参,由setChild的函数体可知形参为child,再看类的私有成员m_child的定义:Component*m_child;。由此可知形参为:Component*child。(3)主要考查考生对纯虚函数的掌握,先看主函数的程序:Leafnode;Compositecomp;comp.setChiid(&node);Component*p=&comp;p->print();第一条和第二条语句都是定义语句,第三条语句调用函数setChild,由setChild函数的定义可知,comp中的m_child等于node,第四条语句定义了个指针p指向comp的地址,也就是node,最后一条语句通过指针p调用函数print,也就是调用类Leaf的函数print,因为题目要求输出:LeafNode,因此在这里添加语句:tout<<"LeafNode"<<endl;。四、综合应用题(本题共1题,每题1.0分,共1分。)41、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数operator,以实现深层复制。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include#includeusingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*p;//动态数组首地址CDeepCopy(int);~CDeepCopy();CDeepCopy&operator=(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char*);//main.cpp#include"CDeepCopy.h"CDeepCopy::~CDeepCopy(){delete[]p;}CDeepCopy::CDeepCopy(intk){n=k;p=newint[n];}//构造函数实现CDeepCopy&CDeepCopy::operator=(constCDeepCopy&r)//赋值运算符函数实现{//**********333**********//**********666**********}intmain(){CDeepCopya(2),d(3);a.p[0]=1;d.p[0]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);//调用赋值运算符函数a.p[0]=88;b=a;cout<标准答案:n=r.n;//把对象r字符长度赋值给ndelete[]p;//删除动态数组pp=newint[n];//给动态数组p分配空间为nfor(inti=0;i知识点解析:主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是“=”,该类的成员是动态数组p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。国家二级(C++)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、下面c++标识符中正确的是()。A、一abcB、3abC、intD、+ab标准答案:A知识点解析:C++标识符命名的规则:只能由‘a’-‘z’、‘A’-‘Z’、‘0’-’9’、等字符组成,且数字不能开头,不能与系统保留字冲突。2、下列关于this指针的描述中,正确的是()。A、类的成员函数都有this指针B、类的友元函数都有this指针C、任何与类相关的函数都有this指针D、类的非静态成员函数都有this指针标准答案:D知识点解析:this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用this指针。所以答案为D。3、如果进栈序列为A,B,C,D,则可能的出栈序列是()。A、C,A,D,BB、B,D,C,AC、C,D,A,BD、任意顺序标准答案:B知识点解析:栈的操作原则为后进先出。选项B)中出栈顺序可按“A进,B进,B出,C进,D进,D出,C出,A出”实现。4、在软件开发中,需求分析阶段可以使用的工具是()。A、N-S图B、DFD图C、PAD图D、程序流程图标准答案:B知识点解析:在需求分析阶段可以使用的工具有数据流图DFD图,数据字典。DD,判定树与判定表,所以选择B。5、下列情况中,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时标准答案:B知识点解析:本题考查复制构造函数,在以下3种情况下使用:①程序中需要新建立一个对象,并用另一个对象对它初始化;②函数的参数为类的对象;③函数的返回值是类的对象。其中B选项是由赋值运算符重载实现的。6、下面关于函数模板的表述中不正确的是()。A、类模板的成员函数都是模板函数B、类模板本身在编译过程中不会产生任何代码C、类模板只能有虚拟类型的参数D、用类模板定义一个对象时,实参不能省略标准答案:C知识点解析:类模板本身在编译时是不会产生代码的,只有在其实例化以后才产生代码。定义一个对象时,不能省略其实参。7、下面叙述错误的是()。A、派生类可以使用private派生B、对基类成员的访问必须是无二义性的C、基类成员的访问能力在派生类中维持不变D、赋值兼容规则也适用于多继承的组合标准答案:C知识点解析:在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择C)。8、下面的描述中,正确的是()。A、virtual可以用来声明虚函数B、含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C、即使基类的构造函数没有参数,派生类也必须建立构造函数D、静态数据成员可以通过成员初始化列表来初始化标准答案:A知识点解析:在基类中用virtual声明成员函数为虚函数,所以A是正确的。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。9、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。10、有如下程序:#includeusingnamespacestd;classA{public:staticinta;voidinit(){a=1;}A(inta=2){init();a++;}};imA::a=0;Aobj;intmain(){cout<A、0B、1C、2D、3标准答案:B知识点解析:本题考查构造函数,本题中对类中的a数据成员先是赋值为0,当定义了对象obj时,执行构造函数,将a的值变为了1,所以输出1。11、有如下类定义:classAA{inta;Public:AA(intn=0):a(n){}};classBB:publicAA{public:BB(intn)——};其中横线处的缺失部分是()。A、:a(n){}B、:AA(u){}C、{a(n);}D、{a=n;}标准答案:B知识点解析:本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。所以本题答案为B。12、以下()不属于对象的基本特征。A、继承性B、封装性C、分类性D、多态性标准答案:A知识点解析:对象具有如下特征:.标识惟一性。指对象是可区分的。.分类性。指可以将具有相同属性和操作的对象抽象成类。.多态性。指同一个操作可以是不同对象的行为。.封装性。从外面看只能看到对象的外部特征,而不知道也无需知道数据的具体结构以及实现操作的算法。.模块独立性好。对象是面向对象的软件的基本模块,对象内部各种元素彼此结合得很紧密,内聚性强。13、下列语句中,错误的是()。A、constintbuffer=-256;B、constinttemp;C、constdouble*point;D、constdouble*rt=-newdouble(5.5);标准答案:B知识点解析:符号常量声明语句的语法格式是:const类型名符号常量=初值表达式,选项B)中未给常变量赋初值,故错误;而选项C)中定义的是一个指向浮点型常量的指针,而不是定义一个浮点型常量,所以可以不赋初值。14、有如下程序:#inchdeusingnamespacestd;inti=1:classFun{public:staticinti:intvalue(){returni-1;)intvalueoconst{returni+1;}};intFun::i=2:intmain(){inti=3:Funfun1;constFunfun2;return0:}若程序的输出结果是:123则程序中横线处的语句是()。A、cout<B、cout<C、cout<D、cout<标准答案:A知识点解析:此题因为定义的变量i是static类型的(main()函数内部的i只是一个局部变量),所以,选项A)中funl.value()的返回值是1,Fun::i引用的是外部变量会输出2:fun2.value();会调用常成员函数intvalue()const{retuni+l;}使得外部静态变量i的值增加为3,故输出3。15、有如下程序:#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知识点解析:在某基类中声明为vinual并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行ptr->output后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print()会执行派生类的Print,即输出D,所以本题答案为B。16、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+(Data):C、Data+operator(Data);D、operator+(Data,Data);标准答案:B知识点解析:根据重载加法运算符的格式,只有B选项正确。17、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。A、7B、8C、9D、10标准答案:B知识点解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。18、下列关于派生类构造函数和析构函数的说法中,错误的是()。A、派生类的构造函数会隐含调用基类的构造函数B、如果基类中没有缺省构造函数,那么派生类必须定义构造函数C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D、在撤销派生类对象时,先调用基类的析构函数,再调用派生类的析构函数标准答案:D知识点解析:此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。19、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1一1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。20、下列关于二叉树的叙述中,正确的是()。A、叶子结点总是比度为2的结点少一个B、叶子结点总是比度为2的结点多一个C、叶子结点数是度为2的结点数的两倍D、度为2的结点数是度为l的结点数的两倍标准答案:B知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个。所以选择B。21、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A。22、下列叙述中正确的是()。A、顺序存储结构的存储空间一定是连续的,链式存储结构的存储空间不一定是连续的B、顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C、顺序存储结构能存储有序表,链式存储结构不能存储有序表D、链式存储结构比顺序存储结构节省存储空间标准答案:A知识点解析:顺序存储是把逻辑上相邻的数据元素存储在物理上相邻的存储单元中,主要用于线性的数据结构;而链式存储结构空间不一定是连续的,无须担心容量问题。23、一个运动队有多个队员,一个队员仅属于一个运动队,一个队一般都有一个教练,则实体运动队和队员的联系是A、一对多B、一对一C、多对一D、多对多标准答案:A知识点解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。实体运动队和队员的关系为1:m联系,故A选项正确。24、以下程序的执行结果为()。#inc1ude<iostream.h>classSample{intn:public:Sample(inti){n=i;}operator++(){n++;}//前缀重载运算符operator++(int){n+=2;}//后缀重载运算符voiddisp(){COUt<<"n="<<n<<endl:}};voidmain(){SampleA(2),B(2);A++;++B;A.disp();B.disp();}A、r=4n=4B、n=1n=2C、r=3n=4D、n=5n=6标准答案:A知识点解析:此题考查的是“++”运算符的重载。为了区分前缀和后缀运算符,规定:重载后缀运算符时必须多一个虚拟参数:int。本题中,A(2)首先给n赋值2,语句A++,调用的是后缀运算符重载语句,使得n加2变为4。B(2)首先给n赋值2,然后语句++B,调用前缀运算符重载函数,使得n加1。因此最终的输出结果是n=4n=3。25、下列关于this指针的叙述中,正确的是()。A、任何与类相关的函数都有this指针B、类的成员函数都有this指针C、类的友元函数都有this指针D、类的非静态成员函数才有this指针标准答案:D知识点解析:此题考查的是this指针的使用。类的每一个非静态成员函数都有一个隐含的常量指针,即this指针。类的静态成员函数不能含有this指针,因为this指针是一个指向本对象的指针。26、下面描述不属于软件特点的是A、软件是一种逻辑实体,具有抽象性B、软件在使用中不存在磨损、老化问题C、软件复杂性高D、软件使用不涉及知识产权标准答案:D知识点解析:软件具有以下特点:软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂性高,成本昂贵;软件开发涉及诸多的社会因素,如知识产权等。故选项D正确。27、有如下类定义:classBase{intm;intn;public:Base(intm1,intn1):n(n1),m(m1){}};classDerived:publicBase{intq;public:Derived(intm1,intn1,intq1):q(q1),Base(m1,n1){};};在创建一个Derived对象时,数据成员m、n和q被初始化的顺序是A、m、n、qB、n、m、qC、q、m、nD、q、n、m标准答案:A知识点解析:构造函数初始化列表为类的成员提供初始值,它并不指定初始化的执行次序,成员初始化根据成员在类定义中的声明次序执行;派生类构造函数初始化列表首先初始化基类,然后根据声明次序初始化派生类的成员,所以Derived对象在创建时,首先初始化Base对象,然后初始化自己成员q,在初始化Base时,成员初始化次序为m、n;综上所述,结果为m、n、q;答案为A。28、下列符号中能够作为C++标识符的是A、ClassB、gpa4.0C、1481quanzhanD、-score标准答案:A知识点解析:用来表示变量、符号常量、函数、数组类型等实体名字的有效字符序列称为标识符,标识符由字母、数字、和下划线3种字符组成,且第一个字符必须为字母或者下划线,只有A选项正确。29、有如下类定义:classBase1{intm;public:Base(intm1):m(m1){}};classBase2{intn;public:Base(intn1):n(n1){}};classDerived:publicBase2,publicBase1{intq;public:Derived(intm1,intn1,intq1):q(q1),Base1(m1),Base2(n1){};};在创建一个Derived对象时,数据成员m、n和q被初始化的顺序是A、m、n、qB、n、m、qC、q、m、nD、q、n、m标准答案:B知识点解析:C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,所以Derived构造函数的初始化列表中,最后初始化q;另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于Derived类的派生列表中,Base2在前,所以应该先调用Base2的构造函数;这样Derived类中初始化顺序为:基类Base2、基类Base1、数据成员q;所以数据成员m、n、q的初始化顺序为:n、m、q,答案为B。30、下列模板声明中,有语法错误的是A、templateTfun(Tx){returnx;}B、templateTfun(Tx,intn){returnx*n;}C、templateTfun(T*p){return*p;}D、templateTclassA{Tn;};标准答案:D知识点解析:本题考查模板的定义,B选项中x为T类型的,n为int型的,但是x*n就不一定是T类型的,所以错误。31、下列关于类的析构函数的叙述中,错误的是A、定义析构函数时不能指定返回值B、析构函数的函数名就是类名前加上字符~C、析构函数可以重载D、在一个类中如果没有定义析构函数,系统将自动生成一个析构函数标准答案:C知识点解析:本题考查类的析构函数的定义,析构函数(destructor)与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后"的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud(),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以C选项错误。32、下列叙述中,错误的是A、false是一个逻辑型常量B、n是一个字符型常量C、1481是一个int常量D、1.414是一个double常量标准答案:B知识点解析:字符型常量是用单引号括起来的一个字符。B选项中"n"是字符串常量,答案为B。33、下列关于派生类构造函数和析构函数的说法中,错误的是()。A、派生类的构造函数会隐含调用基类的构造函数B、如果基类中没有缺省构造函数,那么派生类必须定义构造函数C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D、在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数标准答案:D知识点解析:在销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。34、有如下程序:#includeusingnamespacestd;classVAC{public:intf()const{return3;}intf(){return5;}};intmain(){VACv1;constVACv2;cout<A、53B、35C、55D、33标准答案:A知识点解析:本题考查常对象及常成员函数及构造函数,常对象只能调用常成员函数,所以本题中,对象v1为普通对象,执行v1.f()后,会执行默认构造函数,输出5,对象v2为常对象,执行v2.f()后,会执行常构造函数,输出3。35、有如下程序:#includeusingnamespacestd;classTV{public:TV(ints=41):size(s){}voidPrint(){cout<<’/’<<’N’<A、/N41/S54B、/N41/C54C、/C41/S54D、/C41/C54标准答案:A知识点解析:本题考查构造函数相关知识,本题中定义一个对象room1,执行room1.Print时执行构造函数给size赋值为41,然后执行voidPrint(){cout<<’/’<<’N’<36、若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列MyTempp1;MyTempp2;MyTempp3[4];编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是A、1B、2C、3D、6标准答案:C知识点解析:题目中使用MyTemp类模板定义了三种类型的类对象,所以生成的模板MyTemp实例有3个,答案为C。37、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidPrint()const{cout<<’’const:val=’’<A、val=10const:val=20B、const:val=10const:val=20C、const:val=10val=20D、val=10val=20标准答案:C知识点解析:本题考查常对象、常成员函数及构造函数。常对象只能调用常成员函数,普通对象调用普通成员函数。所以本题中obj1为常对象,执行obj1.print()后,会执行常构造函数,输出const:val=10;而obj2为普通对象,执行obj2.print()时,会执行默认构造函数,输出val=20。故答案为C。38、有如下类定义和对象定义:classA{public:A():data(0){}A(intx):data(x){}~A(){}intGet[)ata()const{returndata;}voidSetData(intn){data=n;}private:intdata:};constAa(5);Ab(8);下列函数调用中错误的是()。A、a.GetData();B、a.Setdata(10);C、b.Getdata();D、b.SetData(10);标准答案:B知识点解析:常对象是指对象的所有成员的值都不能被修改,常成员函数是指只能引用本类的数据成员,而不能修改它们的成员函数;常成员函数可以被常对象调用,也可以被普通对象调用,而普通成员函数只能被普通对象调用,不能被常对象调用,题意中对象a是常对象,b是普通对象,SetData()是普通成员函数,GetData()是常成员函数,所以选项B中通过常对象a调用普通成员函数SetData()是错误的,选项A、C、D都正确;本题答案为B。二、基本操作题(本题共1题,每题1.0分,共1分。)39、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:2123注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。#includeusingnamespacestd;classABC{public://ERROR***********found***********ABC(){a=0;b=0;C=0;}ABC(intaa,intbb,intcc};voidSetab(){++a,++b;}intSum(){returna+b+c;}private:inta,b;constintc;};ABC::ABC(intaa,intbb,intcc):c(cc){a=aa;b=bb;}intmain(){ABCx(1,2,3),y(4,5,6);ABCz,*w=&z;w->Setab();//ERROR*********found*********ints1=x.Sum()+y->Sum();cout<标准答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=s1+w->Sum();知识点解析:(1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:constintc;可知,c为常变量,因此构造函数必须使用成员列表初始化来给c赋初始值。(2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“->”。(3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABCz,*w=&z;可知,w是ABC类的指针,指向z,因此w调用ABC类的成员函数时要使用标识符“->”,而不是“.”。三、简单应用题(本题共1题,每题1.0分,共1分。)40、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(char*str,charch),本函数采用二分法,在已按字母次序从小到大排序的字符数组s仃中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回一1。;二分法查找的思想是:初始查找区间的下界为0,上界为1en-1,查找区间的中后,k=(下界+上界)/2;若list[k1等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include<10Stream.h>intfun(char*str,charch){}voidmain(){charstr[]={’a’,’b’,’c’,’d’,‘e’,‘f’,’g’,’h’,’i’,’j’,’k’,0};charch;cout<<“请输入一个字符:”<>ch,cout<<“输入数字的位置是:”<标准答案:intlow=0,//初始查找区间的下界inthigh;intk;for(high=0;str[high]!=0;high++)//求字符串长度while(10wch)high=k一1;elselow=k+1;}if(str[low]==ch)returnlow;return一1;知识点解析:根据题干中给出的二分法查找思想,从已给部分源程序的main主函数开始入手,核心函数intfun(char*str,charch)中的ch参数为输入的字符,其中返回值为ch所在的位置。解题思路(1)首先,初始查找区间的下界为0。(2)然后,求得字符串长度len,上界为len.1,查找区问的中后,k=(下界+上界)/2;若list[k]等于ch,查找成功。(3)若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。四、综合应用题(本题共1题,每题1.0分,共1分。)41、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义纯虚类TestClassO,包含纯虚函数fun(),请在注释∥********1********后添加适当的语句。(2)完成类TestClassl,以公有继承TestClassO,请在注释∥********2********后添加适当的语句。(3)定义TestClass0对象指针P,请在注释∥********3********后添加适当的语句。(4)把TestClassl的对象0bj的指针赋给TestClass0指针P,请在注释∥********error********,后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeclassTestClasS0{public:∥********1********};∥********2********C]assTestC]ags]{public:voidfun(){cout<<“fun”<fun();return0;}标准答案:(1)添加语句:virtualvoidfun()=0;(2)将“classTestclassl”补充完整为:classTestClassl:publlcTestClassO(3)添加语句:Testclass0*p;(4)添加语句:p=&obj;知识点解析:本题中的程序功能是利用派生类中的fun成员函数输出字符串“fun”。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类的成员函数实现各种输出操作。解题思路(1)题目1要求“定义纯虚类TestClass0”。在C++中,虚函数在基类用virtual声明类为虚类。纯虚类是在声明虚类时被“初始化”为0的函数。所以第1个标识下应添加“virtualvoidfun()=0;”。(2)题目2要求“完成类TestClassl,以公有继承TestClass0”。公有继承是在定义一个派生类时将基类的继承方式指定为public的,称为公用继承。所以这里补全“classTestClassl:publicTestClass0”。(3)题目3要求“定义TestClassO对象指针p”。定义类的对象指针变量,一般的格式为:类名指针变量,所以这里添加“’TestClassO*p;”。(4)题目4要求“把TestClassl的对象obj的指针赋给TestClassO指针p”。将指针指向的对象赋值给另一个指针,其实是将其地址指向另一个指针的地址,所以使用取地址运算符“&”,即在第四个符号下添加语句“p=&obj;”。国家二级(C++)机试模拟试卷第3套一、选择题(本题共38题,每题1.0分,共38分。)1、关系操作的特点是()操作。A、分类B、集合C、控制D、互斥标准答案:B知识点解析:在关系数据库中,把数据表示成二维表,每一个二维表称为关系,因此关系其实是数据的集合,对关系的操作其实就是对数据组成的集合之间的操作。2、下列关于C++函数的说明中,正确的是()。A、内联函数就是定义在另一个函数体内部的函数B、函数体的最后一条语句必须是retum语句C、标准C++要求在调用一个函数之前,必须先声明其原型D、编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式标准答案:C知识点解析:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,而不是在定义在另一个函数体内,所以A选项错误。函数可以没有返回值,所以就不需要return了,如果被调函数在调用函数之前已经定义,那么就不需要声明,所以C选项错误,正确选项为D。3、下面关于构造函数和析构函数的描述,错误的是()。A、析构函数中调用虚函数采用静态联编B、对虚析构函数的调用可以采用动态联编C、当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D、构造函数可以声明为虚函数标准答案:D知识点解析:构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。4、有如下类声明:classSAMPLE{intn;public:SAMPLE(inti=0):n(i){}voidsetValue(intn0);};下列关于getValue成员函数的定义中,正确的是()。A、SAMPLE::setValue(intn0){n=n0;}B、voidSAMPLE::setValue(intn0){n=n0;}C、voidsetValue(intn0){n=n0;}D、setValue(intn0){n=n0;}标准答案:B知识点解析:本题考查在类外定义类的成员函数,需要使用作用域限定符“::”,属于基础知识,本题答案为B。5、有以下程序段:#include#defineMAX(x,y)(x)>(y)?(x):(y)voidmain(){intij,k;i=10;j=15;k=MAX(i,j)*10;cout<A、15B、100C、150D、10标准答案:C知识点解析:题目程序中的MAX函数是利用条件运算符为?:求最大值。即(x>y)?(x):(y)是当x大于y时取x,否则取y。当i=10,j=15时,“MAX(i,j)”的值为15,所以“k=MAX(ij)*10;”答案为:150。6、下列有关函数重载的叙述中,错误的是()。A、函数重载就是用相同的函数名定义多个函数B、重载函数的参数列表必须不同C、重载函数的返回值类型必须不同D、重载函数的参数可以带有默认值标准答案:C知识点解析:此题考查的是函数重载的概念。在C++语言中,允许定义一系列函数名相同,但形参的个数和类型不完全相同的函数,即函数的重载。重载函数对返回值类型不做要求,返回值类型也不参与区分函数的重载形式。故选项C)错误。7、下列关于类定义的说法中,正确的是()。A、类定义中包括数据成员和函数成员的声明B、类成员的缺省访问权限是保护的C、数据成员必须被声明为私有的D、成员函数只能在类体外进行定义标准答案:A知识点解析:类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。8、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。A、软件矛盾B、软件危机C、软件藕合D、软件产生标准答案:B知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入们难以控制软件发展的局面,即所谓的“软件危机”。9、在进行任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是()。A、failB、eofC、badD、good标准答案:B知识点解析:可以用文件流对象的成员函数来判别文件流当前的状态:fail,刚进行的操作失败时返回true,

温馨提示

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

评论

0/150

提交评论