全国计算机等级考试无纸化真考题库试卷二级C++(2).docx
-
资源ID:34945838
资源大小:50.90KB
全文页数:19页
- 资源格式: DOCX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
全国计算机等级考试无纸化真考题库试卷二级C++(2).docx
全国计算机等级考试无纸化真考题库试卷(2)二级C+(考试时间l20分钟,满分100分)一、选择题(每小题1分。共40分)(1)一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A)12345ABCDEB)EDCBA54321C)ABCDEl2345D)5432lEDCBA(2)下列叙述中正确的是()。A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。A)O(n)B)O(n2)C)O(1092n)C)0(n1092n)(4)下列叙述中正确的是()。A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构c)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间(5)数据流图中带有箭头的线段表示的是()。A)控制流B)事件驱动C)模块调用D)数据流(6)在软件开发中,需求分析阶段可以使用的工具是()。A)Ns图B)DFD图C)PAD图D)程序流程图(7)在面向对象方法中,不属于“对象”基本特点的是()。A)一致性B)分类性C)多态性D)标识唯一性(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A)一对一B)一对多C)多对一D)多对多(9)在数据管理技术发展的三个阶段中,数据共享最好的是()。A)人工管理阶段B)文件系统阶段c)数据库系统阶段D)三个阶段相同(10)有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为()。A)笛卡尔积B)交C)并D)自然连接(11)下列语句中,错误的是()。A)const int buffer=256; B) const double*point;C)int const buffer=256;D)double*eonst point:(12)if语句的语法格式可描述为:格式l:if(<条件>)<语句>或格式2:if(<条件>)<语句l>else<语句2>关于上面的语法格式,下列表述中错误的是()。A)<条件>部分可以是一个if语句,例如if(if(a=0)B)<语句>部分可以是一个if语句,例如if()if()c)如果在<条件>前加上逻辑非运算符!并交换<语句l>和<语句2>的位置,语句功能不变D)<语句>部分可以是一个循环语句,例如if()while()(13)有如下说明:int a10=1,2,3,4,5,6,7,8,9,10,* P=a;则数值为9的表达式是( )。A)*P+9B)木(P+8)C)*P+=9D)P+8(14)有如下程序段:int i=0,J=1;int&r=i;r=j;int*P=&i;*P=r;其中会产生编译错误的语句是()。A)B)C)D)(15)下列字符串中。不可以用做c+标识符的是()。A)y_2006B)_EST_HC)ReturnD)switch(16)为了取代c中带参数的宏,在c+中使用()。A)重载函数B)内联函数C)递归函数D)友元函数(17)通过运算符重载,可以改变运算符原有的()。A)操作数类型B)操作数个数C)优先级D)结合性(18)在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是()。A)autoB)externC)registerD)static(19)下列运算符函数中肯定不属于类FunNumber的成员函数的是()。A)int operator一(FunNumber); B)FunNumber operator一();C)FunNumber operator一(int);D)int operator一(FunNumber,FunNumber);(20)若有下面的函数调用:fun(fl+b,3,max(n一1,b)则fun的实参个数是()。A)3 B)4 C)5 D)6(21)关于运算符重载,下列表述中正确的是()。A)c+已有的任何运算符都可以重载B)运算符函数的返回类型不能声明为基本数据类型C)在类型转换符函数的定义中不需要声明返回类型D)可以通过运算符重载来创建c+中原来没有的运算符(22)有如下程序:#nclude<iostream>using namespace std;int main()void function(double val);double val;function(val);cout<<val;return 0;void function(double val) val=3;编译运行这个程序将出现的情况是()。A)编译出错,无法运行B)输出:3c)输出:30D)输出一个不确定的数(23)下列情况中,不会调用拷贝构造函数的是()。 A)用一个对象去初始化同一类的另一个新对象时B)将类的一个对象赋值给该类的另一个对象时c)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用时(24)以下关键字不能用来声明类的访问权限的是()。A)publicB)staticC)protectedD)private(25)由于常对象不能被更新,因此()。A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数(26)下列有关继承和派生的叙述中,正确的是()。A)如果一个派生类公有继承其基类,则该派生类对象可以访问基类的保护成员B)派生类的成员函数可以访问基类的所有成员C)基类对象可以赋值给派生类对象D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类(27)在公有继承的情况下,允许派生类直接访问的基类成员包括()。 A)公有成员B)公有成员和保护成员C)公有成员、保护成员和私有成员D)保护成员(28)有如下程序:#include<iostream>using namespace std;classBasepublic:void fun()_cout<<”Base:fun”<<endl;class Derived:public Basepublic:voidfun()cout<<”Derived:fun”<<endl:;int main()Derived d;dfun();return 0;已知其执行后的输出结果为:Base:funDerived:fun则程序中下画线处应填人的语句是()。A)Basefun();B)Base:fun(); C)Base>fun();D)fun();(29)有如下程序:#include<iostream>using namespace std;class MyClasspublic:MyClass()cout<<A;MyClass(char C)cout<<C;MyClass()cout<<B;int main()MyClass pl,+p2;p2=new MyClass(X);delete p2;return 0;执行这个程序的输出结果是()。A)ABXB)ABXBC)AXBD)AXBB(30)有如下程序:#include<iostream>using namespace std;int i=1;class Funpublic:static int i;int value()return il;int value()constreturn i+1;int Fun:i=2;int main()int i=3;Fun funl;const Fun fun2:_return 0;若程序的输出结果是:123则程序中下画线处遗漏的语句是()。A)cout<<funlvalue()<<Fun:i<<fun2value();B)tout<<Fun:i<<funlvalue()<<fun2value();C)cout<<funlvalue()<<fuIl2value()<<Fun:i:D)eout<<fun2value()<<Fun:i<<funlvalue();(31)有如下程序:#include<iostream>using namespace std;class Objstatic int i;public:Obj()i+;一Obj()i一一;static int getVal()return i;int Obj:i=0:void f()Obj ob2;cout<<ob2getVal();int main()Obj obl;f();Objob3=new Obj;cout<<ob3一>getVal();delete ob3;cout<<Obj:9etVal();return 0;执行这个程序的输出结果是()。A)232B)231C)222D)221(32)有如下程序:#include<iostream>using namespace std;class Pairint m,n;public:Pair(int j,int k):m(j),n(k)int get()return m;int get()constreturn m+n;int main()Pair a(3,5);const Pair b(3,5);tout<<aget()<<bget();return U:执行这个程序的输出结果是()。A)33 B)38 C)83 D)88(33)有如下程序:#include<iostroam>using namespace std;class Baseprotected:Base()cout<<A;Base(char C)cout<<c;class Derived:public Basepublic:Derived(char c)tout<<C;int main()Derived dl(B);retum 0;执行这个程序的输出结果是()。A)BB)BAC)ABD)BB(34)有如下类定义:class MyBaseint k;public:MyBase(int n=O):k(n)int value()eonstreturn k;class MyDerived:MyBaseintj;public:MyDerived(int i):j(i)int getK()constreturn k;int getJ()constreturn j;编译时发现有一处语法错误,对这个错误最准确的描述是()。A)函数9etK试图访问基类的私有成员变量kB)在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC)类MyDerived缺少一个无参的构造函数D)类MyDerived的构造函数没有对基类数据成员k进行初始化(35)有如下程序:#include<iostream>using namespace std;class Instrumentpublic:virtual void Display()=0;class Pian0:public Instrumentpublic:void Display()*函数体略*;intmain()Instrument S;Instrument*P=0:;return 0;下列叙述中正确的是()。A)语句“Insturment*P=0;”编译时出错B)语句“Instnunent s;”编译时出错C)类Pian0中的Display函数不是虚函数D)类Instrument是一个虚基类(36)有如下程序:#include<iostream>using namespace std;class Apublic:virtual void fancl()cout<<”Al”;void func2()cout<<”A2”;class B:public Apublic:void funcI()tout<<”Bl”;void func2()tout<<”B2”;intmain()A*P=new B:P>funcl();P>func2();delete p;return 0;执行这个程序的输出结果是()。A)B182B)A1A2C)B1A2D)AIB2(37)关于在调用模板函数时模板实参的使用,下列表述中正确的是()。A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B)对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D)对于常规参数所对应的模板实参,任何情况下都不能省略(38)关于关键字class和typename,下列表述中正确的是()。A)程序中的typename都可以替换为classB)程序中的class都可以替换为typenameC)在模板形参表中只能用ypename来声明参数的类型D)在模板形参表中只能用class或typenanle来声明参数的类型(39)在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。A)ios_base:cur B)iosbase:begC)los_base:0utD)iosbase:end(40)下列关于c+流的描述中,错误的是()。A)cout>>A表达式可输出字符AB)eof()函数可以检测是否到达文件尾C)对磁盘文件进行流操作时,必须包含头文件fstreamD)以ios_base:0ut模式打开的文件不存在时,将自动建立一个新文件二、基本操作题(共l8分)请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件maincpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“ERROR*found*”下的语句行有错误,请加以改正。改正后程序的输出结果应该是:书名:C+语句程序设计总页数:299已把“c+语言程序设计”翻到第50页已把“c+语言程序设计”翻到第51页已把“c+语言程序设计”翻到第52页已把“c+语言程序设计”翻到第51页已把书合上。当前页:0注意:只修改每个“ERROR *found*”下的那一行,不要改动程序中的其他内容。#include<iostream>using namespace std;class Bookchar*title;int numpages;页数int cur_page;当前打开页面的页码,0表示书未打开public:ERROR*found*Book(const char*theTitle,int pages)num_pages(pages)title=new charstrlen(theTitle)+1; strepy(title,theTitle);cout<<endl<<”书名:”<<title<<”总页数:”<<num_pages;Book()deletetitle;bool isClosed()constreturn cur_page=0; 书合上时返回true,否则返回falsebool isOpen()constreturn!isClosed();书打开时返回true,否则返回falseint numOfPages()constreturn num_pages;返回书的页数int currentPage()constreturn cur_page;返回打开页面的页码ERROR*found*void openAtPage(int page_no)const 把书翻到指定页cout<<endl:i“page_no<l Jj page_no>hum_pages)tOUt<<”无法翻到第”<<cur page<<”页。”;ClOSe();elsecur_page=page_n0;tout<<”已把“"<<tide<<"”翻到第"<<cur page<<“页”;void openAtPrevPage()openAtPage(cur page1);把书翻到上一页void openAtNextPage()openAtPage(cur_page+1);把书翻到下一页void close()把书合上 tout<<endl:if(isClosed()tout<<"书是合上的。";elseERROR*found*num_pages=0;cout<<”已把书合上。”;cOut<<endl:;int main()Book book(”C+语言程序设计”,299);bookopenAtPage(50);bookopenAtNextPage();bookopenAtNextPage();bookopenAtPrevPage();bookclose();tout<<”当前页:”<<bookcurrentPage()<<endl;return 0:三、简单应用题(共24分)请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。此工程中包含一个源程序文件maincpp,其中有“房间”类Room及其派生出的“办公室”类0ffice的定义,还有主函数main的定义。请在程序中“*found*”下的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:办公室房间号:308办公室长度:56办公室宽度:48办公室面积:2688办公室所属部门:会计科注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“料料found料”。#include<isotream>using namespaee std;class Room “房间”类int room_n0;房间号double length;房间长度(m)double width;房间宽度(n1)public:Room(int theroomn0,double thelength,double thewidth):loomno(theroomno),length(thelength),width(thewidth)int theRoomNo()eonstreturn iDonln0;返回房间号double theLength()constreturn length;返回房间长度double theWidth()constreturn width;返回房间宽度*found*double theArea()const_返回房间面积(矩形面积);class Office:public Room“办公室”类char*depart;所属部门public:Office(int the_room_n0,double the_length,double the_width,eonst char木the_depart)*found*:_depart=new charstrlen(the depart)+1;*found*strcpy(_);Office()deletedepart;const char*theDepartment()constreturn depart;返回所属部门;int main()*found*Office_;cout<<”办公室房间号:”<<au_officetheRoomNo()<<endl<<”办公室长度:”<<an officetheLength()<<endl<<”办公室宽度:”<<an 0fficetheWidth()<<endl<<”办公室面积:”<<an officetheArea()<<endl<<”办公室所属部门:”<<allofficetheDepartment()<<endl;return 0;四、综合应用题(共18分J请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3h、proj3cpp、writeToFileobj。补充完成重载赋值运算符函数,完成深复制功能。屏幕上输出的正确结果应该是:Hello!Happy new year! 补充编制的内容写在“*333*”与“*666*”两行之间。不得修改程序的其他部分。注意:程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0utdat中。输出函数writeToFile已经编译为obj文件。proj3h#include<iostream>#include<iomanip>using namespace std;class MiniStringpubhc:friend。8tream&operator<<(oatream&output,const MiniString&s)重载流插入运算符 output<<ssPtr;return output; friend istream&operator>>(istream&input,MiniString&8)重载流提取运算符 char temp100;用于输入的临时数组temp0=0:初始为空字符串input>>setw(100)>>temp;int inLen=strlen(temp);输入字符串长度if(inLen!=0)s1ength=inLen;赋长度if(ssPtr!=0)deletessPtr;避免内存泄漏ssPtr=Hew chars1ength+1;strcpy(ssPtr,temp);如果8不是空指针,则复制内容else ssPtr0=0;如果s是空指针,则为空字符串retum input;void modString(const charstring2)更改字符串内容if(strin92 1=0)如果strin92不是空指针,则复制内容if(strlen(strin92)!=length)length=strlen(strin92);deletesPtr;sPtr=new char1ength+1;分配内存strcpy(sPtr,strin92);else sPtr0=0;如果string2是空指针,则为空字符串MiniString&operator=f const MiniString&otherString);MiniString(corot char*s=""):lengtll(s!=0)strlen(s):0)构造函数sPtT=0:if(1ength=0)setString(S);MiniString()析构函数deletesPtr;private:int length;字符串长度char*sPtr;指向字符串起始位置void setString(const char*string2)辅助函数sPtr=Dew charstr|en(string2)+1;分配内存if(stnIl92!=0)strcpy(sPtr,string2);如果string2不是空指针,则复制内容else slur0='0';如果string2是空指针,则为空字符串;pwj3cpp#'include<iostream>#include<iomanip>using namespace std;#include”proj3h”MiniString&MiniStrin9:0perator=(const MiniString&otherString)重载赋值运算符函数。提示:可以调用辅助函数setString*333*666*int main()MiniSu'ing strl(”Heuo!”),str2;void writeToFile(const char*);sir2=strl;使用重载的赋值运算符str2modString("Happy new year!");cout<<strl<<'n':cout<<str2<<'n':writeToFile("");return 0;无纸化真考题库试卷(2)一、选择题(1)B 【解析】栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B。(2)D 【解析】循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态变化情况,所以B与C错误。(3)C 【解析】当有序线性表为顺序存储时才能用:二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较l092n次,而顺序查找需要比较n次。(4)A 【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B与C错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D错误。(5)D 【解析】数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。(6)B 【解析】在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B。(7)A 【解析】对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A。(8)B 【解析】因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。(9)C 【解析】数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择c。(10)D 【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与s进行的是自然连接操作。(11)D【解析】const是一个C+关键字,用于限定不允许改变的变量。选项B是指向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。故答案为D。(12)A 【解析】本题考查if语句,if语句的条件部分不能嵌套if语句,所以A选项错误;B选项就是if语句嵌套;C选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D选项也正确。(13)B 【解析】本题考查指向数组的指针,本题中指针变量P指向数组a,那么*P的值就是1,即表示数组的第一个元素,那么数值为9的表达式就是将指针向后移动8个地址,即P+8指向的是数组元素值为9,所以数值为9的表达式是*(P+8)。(14)A 【解析】本题考查指针和引用。为引用,使用正确;中r表示一一个地址,而* P已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。(15)D 【解析】本题考查C+标识符的命名规则,其规则有如下几点:所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;所有标识符不能使用C+已有的关键字;大、小写字母表示不同意义,即代表不同的标识符。选项C中虽然retum是关键字,但因首字母大、小写不同,也可用于标识符,但不建议使用。故答案为D。(16)B 【解析】一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,即类似于宏。(17)A 【解析】重载运算符的规则如下:c+不允许用户自己定义新的运算符,只能对已有的C+运算符进行重载;C+不能重载的运算符只有5个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c+的标准类型。故本题答案为A。(18)A 【解析】变量的存储方法分为静态存储和动态存储两大类,包含4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extem)。变量如果没有说明存储类型,那么默认就是aut0。(19)D 【解析】本题考查运算符重载的一些规则:一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;双目运算符=、()、->不能重载为类的友元函数;类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数;若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好;若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数;当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以答案为D。(20)A 【解析】本题考查函数实参个数的基础知识,根据实参的概念,(a+b)、3、mflJc(n一1,b)分别为其中的3个实参。故答案为A。(21)c 【解析】重载运算符的规则如下:c+不允许用户自己定义新的运算符,只能对已有的c+运算符进行重载;c+不能重载的运算符只有5个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c+的标准类型。故本题答案为c。(22)D 【解析】本题考查函数调用及传值方式传递参数,执行函数function时,并没有将3的值传回来,而val又没有初始化,所以会输出一个不确定的值,D选项正确。(23)B 【解析】本题考查复制构造函数,在以下3种情况下使用:程序中需要新建立一个对象,并用另一个对象对它初始化;函数的参数为类的对象;函数的返回值是类的对象。其中B选项是由赋值运算符重载实现的。(24)B 【解析】类的成员访问权限有3种:public(公用)、protected(保护)、private(私有)。(25)A 【解析】本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选A。(26)D 【解析】私有继承方式为基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成员,所以基类对象不能赋值给派生类对象。抽象类是指含有纯虚拟函数的类,所以选项D正确。(27)B 【解析】本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。所以本题答案为B。(28)B 【解析】本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属