计算机二级C++考试测试卷及答案_第1页
计算机二级C++考试测试卷及答案_第2页
计算机二级C++考试测试卷及答案_第3页
计算机二级C++考试测试卷及答案_第4页
计算机二级C++考试测试卷及答案_第5页
已阅读5页,还剩44页未读, 继续免费阅读

下载本文档

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

文档简介

计算机二级C++考试测试卷及答案一、选择题(共40题,每题1分,共40分。第1~10题为公共基础知识题,第11~40题为C++语言程序设计题)1.设栈的初始状态为空,入栈序列为1、2、3、4、5,若出栈序列为2、4、3、5、1,则操作过程中栈的容量至少为()A.2B.3C.4D.52.下列关于程序设计风格的描述中,正确的是()A.程序的执行效率是首要考虑因素B.符号名只需符合语法规则,无需考虑可读性C.应优先保证程序的可读性,兼顾效率D.程序注释仅需要在复杂功能处添加,简单逻辑无需添加3.软件工程中,需求分析阶段的主要任务不包括()A.确定软件系统的功能需求B.确定软件系统的性能需求C.制定软件集成测试计划D.编写需求规格说明书4.在数据库设计的各阶段中,将E-R图转换为关系数据模型属于()A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段5.有关系R(A,B,C,D),其函数依赖集为F={A→B,C→D},则该关系的候选码为()A.ABB.ACC.ADD.BC6.下列排序方法中,最坏情况下时间复杂度为O(nlog₂n)的是()A.冒泡排序B.快速排序C.堆排序D.直接插入排序7.面向对象程序设计中,“一个对象收到消息时可产生多种不同的行为,具体行为由对象的实际类型决定”这一特性称为()A.封装B.继承C.多态D.抽象8.软件测试的目的是()A.证明程序的正确性B.发现程序中的错误C.优化程序的执行效率D.调试程序中的错误9.在关系数据库中,用来表示实体之间联系的是()A.二维表B.线性表C.树结构D.图结构10.下列关于算法的描述中,错误的是()A.算法具有可行性、确定性、有穷性等特性B.算法的有穷性是指算法步骤不能无限执行C.算法的输入可以为0个D.算法的输出可以为0个11.下列选项中,不属于C++关键字的是()A.classB.defaultC.funcD.const12.下列关于C++基本数据类型的描述中,正确的是()A.int类型的长度固定为4字节B.char类型只能存储ASCII字符,不能存储汉字C.float类型的精度高于double类型D.bool类型的取值为true和false13.表达式5+3*2/4-1的运算结果是()A.2B.3C.5D.714.若有定义inta=10,b=20;,则下列表达式的值为false的是()A.a<bB.a!=b15.下列关于switch语句的描述中,正确的是()A.switch语句中default子句必须放在所有case子句之后B.switch语句中每个case子句后面必须有break语句C.switch语句中case后面的表达式必须是整型常量表达式D.switch语句中可以没有default子句16.有如下程序段:inti=0,sum=0;while(i<10){i++;if(i%2==0)continue;sum+=i;}执行该程序段后,sum的值为()A.25B.45C.55D.017.下列关于一维数组的定义中,正确的是()A.intn=5,arr[n];B.intarr[5]={1,2,3,4,5,6};C.intarr[]={1,2,3};D.intarr[5]={0};则arr[1]的值为未定义18.若有定义charstr[]="C++Program";,则strlen(str)的值为()A.9B.10C.11D.1219.下列关于函数的描述中,错误的是()A.函数可以没有返回值B.函数可以没有参数C.函数可以嵌套定义D.函数可以递归调用20.若有函数声明voidswap(int&x,int&y);,下列关于该函数的描述中,正确的是()A.参数传递方式为值传递B.函数内部修改x的值不会影响实参C.调用该函数时,实参可以是常量表达式D.函数内部可以通过x修改对应实参的值21.有如下函数定义:intfun(inta,intb=2,intc=3){returna+b+c;}则下列函数调用中,错误的是()A.fun(1)B.fun(1,3)C.fun(1,3,4)D.fun(,3,4)22.若有定义inta[5]={1,3,5,7,9},*p=a;,则下列表达式中值为5的是()A.p+2B.*(p+2)C.*p+2D.*(p++)23.下列关于类与对象的描述中,错误的是()A.类是对象的抽象,对象是类的实例B.类的成员函数可以访问类的私有成员C.类的对象可以直接访问类的私有成员D.一个类可以定义多个对象24.有如下类定义:classTest{private:intx;public:Test(inta=0){x=a;}};则执行Testt(5);语句时,调用的构造函数的参数个数为()A.0B.1C.2D.525.下列关于构造函数的描述中,正确的是()A.构造函数可以有返回值,返回值类型为intB.构造函数的名字必须与类名完全相同C.构造函数不能被重载D.一个类只能有一个构造函数26.有如下类定义:classBase{protected:intx;public:Base(inta){x=a;}};classDerived:publicBase{private:inty;public:Derived(inta,intb):Base(a){y=b;}voidshow(){cout<<x<<","<<y;}};下列说法中,正确的是()A.Derived类的show函数不能访问Base类的x成员B.Derived类的构造函数初始化列表错误,不能调用基类构造函数C.执行Derivedd(1,2);后,d.show()输出为1,2D.Derived类继承方式为public,因此可以直接访问Base类的private成员27.下列关于虚函数的描述中,错误的是()A.虚函数必须是类的成员函数B.构造函数可以声明为虚函数C.虚函数实现运行时多态D.析构函数可以声明为虚函数28.有如下程序段:classA{public:virtualvoidfun(){cout<<"A";}};classB:publicA{public:voidfun(){cout<<"B";}};intmain(){A*p=newB();p->fun();deletep;return0;}该程序的输出结果是()A.AB.BC.ABD.运行时错误29.下列关于运算符重载的描述中,正确的是()A.运算符重载可以改变运算符的优先级B.运算符重载可以改变运算符的操作数个数C.所有运算符都可以被重载D.运算符重载不能改变运算符的语法规则30.若有如下模板定义:template<typenameT>Tmax(Ta,Tb){returna>b?a:b;}则下列调用中错误的是()A.max(1,2)B.max(1.5,2.3)C.max('a','b')D.max(1,2.5)31.下列关于友元的描述中,正确的是()A.友元函数是类的成员函数B.友元类的所有成员函数都可以访问该类的私有成员C.友元关系是双向的D.友元关系可以继承32.有如下程序段:inta=10;int&r=a;r=20;cout<<a<<endl;执行该程序段后,输出结果是()A.10B.20C.0D.随机值33.下列关于静态成员的描述中,错误的是()A.静态成员变量属于类,不属于某个对象B.静态成员函数可以直接访问类的非静态成员变量C.静态成员变量可以通过类名直接访问D.静态成员函数没有this指针34.有如下枚举类型定义:enumColor{Red,Green,Blue=2,Yellow};则Yellow对应的枚举值是()A.0B.1C.2D.335.下列关于C++输入输出流的描述中,错误的是()A.cin是标准输入流对象B.cout是标准输出流对象C.endl的作用是输出换行并刷新缓冲区D.用cin读取字符串时可以包含空格36.有如下程序段:inti;for(i=1;i<=5;i++){if(i==3)break;cout<<i<<"";}执行该程序段后,输出结果是()A.12B.123C.1245D.1234537.若有定义int*p[4];,下列说法中正确的是()A.p是指向int类型的指针B.p是指针数组,每个元素是指向int的指针C.p是数组指针,指向包含4个int元素的数组D.该定义有语法错误38.下列关于析构函数的描述中,正确的是()A.析构函数可以有参数B.析构函数可以被重载C.析构函数的名字是类名前加~D.一个类可以有多个析构函数39.有如下类定义:classTest{public:Test(){cout<<"A";}Test(inta){cout<<"B";}~Test(){cout<<"C";}};intmain(){Testt1;Testt2(10);return0;}该程序运行后的输出结果是()A.ABCB.AABCC.ABCCD.ACBC40.下列关于继承的描述中,错误的是()A.派生类可以继承基类的所有成员B.派生类可以新增自己的成员C.派生类可以重定义基类的成员函数D.继承实现了代码复用二、基本操作题(共18分,每题9分)1.下列程序的功能是:计算并输出1到100所有能被3整除的整数之和。请修改程序中的两处错误,使程序输出正确结果。注意:不要改动main函数的整体结构,不能增行或删行,只能修改错误所在的行。usingnamespacestd;intmain(){intsum;//第1处错误for(inti=1;i<=100;i++){if(i/3==0)//第2处错误sum=sum+i;}cout<<"sum="<<sum<<endl;return0;}2.下列程序的功能是:实现两个整数的交换,并输出交换后的结果。请修改程序中的两处错误,使程序输出正确结果。注意:不要改动main函数中变量的定义和输出语句,不能增行或删行,只能修改错误所在的行。usingnamespacestd;voidswap(int*a,int*b){inttemp=*a;*a=b;//第1处错误b=temp;//第2处错误}intmain(){intx=5,y=10;swap(&x,&y);cout<<x<<","<<y<<endl;return0;}三、简单应用题(共24分)下列程序的功能是:定义一个学生类Student,包含私有成员name(姓名,字符串)、score(成绩,整型),公有成员函数setInfo用于设置学生信息,showInfo用于显示学生信息,getScore用于获取成绩。主函数中定义包含3个元素的Student对象数组,依次输入3名学生的姓名和成绩,输出所有学生的信息,并计算3名学生的平均成绩。请在程序的下划线处填入正确的内容,使程序完整并能正确运行。注意:不要改动程序的其他部分,只能在下划线处填入适当的代码。usingnamespacestd;classStudent{private:stringname;intscore;public:voidsetInfo(stringn,ints){____(1)____;//设置姓名score=s;}voidshowInfo(){cout<<"姓名:"<<name<<",成绩:"<<score<<endl;}intgetScore(){____(2)____;//返回成绩}};intmain(){Studentstu[3];stringname;intscore,sum=0;for(inti=0;i<3;i++){cout<<"请输入第"<<i+1<<"名学生的姓名和成绩:";cin>>name>>score;stu[i].____(3)____;//设置学生信息sum+=stu[i].getScore();}cout<<"\n学生信息如下:"<<endl;for(inti=0;i<3;i++){stu[i].showInfo();}cout<<"平均成绩:"<<sum/3.0<<endl;return0;}四、综合应用题(共18分)请编写一个程序,实现以下功能:1.定义一个抽象基类Shape,包含:(1)保护成员变量color(字符串类型,表示形状的颜色);(2)构造函数,带一个string类型参数,用于初始化颜色;(3)纯虚函数getArea(),返回值为double类型,用于计算形状的面积;(4)普通成员函数showInfo(),输出形状的颜色和面积,格式为“颜色:xxx,面积:xxx”。2.定义Shape的公有派生类Circle,包含:(1)私有成员变量radius(double类型,表示圆的半径);(2)构造函数,带两个参数:string类型的颜色、double类型的半径,初始化列表调用基类构造函数初始化颜色;(3)重写getArea()函数,返回圆的面积(圆周率取3.14159)。3.定义Shape的公有派生类Rectangle,包含:(1)私有成员变量width和height(均为double类型,表示矩形的宽和高);(2)构造函数,带三个参数:string类型的颜色、double类型的宽、double类型的高,初始化列表调用基类构造函数初始化颜色;(3)重写getArea()函数,返回矩形的面积。4.在main函数中:(1)定义一个Shape类型的指针数组,包含2个元素;(2)创建一个Circle对象(颜色:红色,半径:5.0)和一个Rectangle对象(颜色:蓝色,宽:4.0,高:6.0),分别将它们的地址赋值给指针数组的两个元素;(3)遍历指针数组,调用每个元素的showInfo()函数输出信息;(4)释放所有动态创建的对象资源。要求:所有函数的实现都写在类的内部,程序结构清晰,符合C++语法规范。参考答案及解析一、选择题1.答案:B解析:入栈出栈过程为:1入栈(栈深度1)→2入栈(栈深度2)→2出栈(栈深度1)→3入栈(栈深度2)→4入栈(栈深度3)→4出栈(栈深度2)→3出栈(栈深度1)→5入栈(栈深度2)→5出栈(栈深度1)→1出栈(栈深度0)。操作过程中栈的最大深度为3,因此栈的容量至少为3。2.答案:C解析:良好的程序设计风格以可读性为核心,兼顾执行效率;符号名应具有实际语义,便于理解;注释需覆盖核心逻辑、函数功能、关键变量等,与代码复杂度无关。3.答案:C解析:需求分析阶段的任务是明确软件系统的功能、性能、数据、运行环境等需求,输出需求规格说明书并组织评审;集成测试计划属于概要设计阶段的产出物。4.答案:C解析:数据库设计分为需求分析、概念设计、逻辑设计、物理设计四个阶段。概念设计阶段输出E-R模型,逻辑设计阶段将E-R模型转换为DBMS支持的关系数据模型,物理设计阶段设计数据的存储结构和存取方法。5.答案:B解析:候选码需能唯一标识关系中的所有元组,即通过函数依赖可推导出全部属性。由A→B、C→D可知,AC可联合推出A、B、C、D四个属性,因此AC为该关系的候选码。6.答案:C解析:冒泡排序、快速排序、直接插入排序在最坏情况下的时间复杂度均为O(n²);堆排序在最好、平均、最坏情况下的时间复杂度均为O(nlog₂n),性能稳定。7.答案:C解析:多态是指相同的消息作用于不同对象时可产生不同的行为,核心是运行时动态绑定;封装是隐藏内部实现细节,仅暴露接口;继承是实现代码复用;抽象是提取对象的共同特征。8.答案:B解析:软件测试的核心目的是尽可能多地发现程序中的错误,而非证明程序完全正确;调试是定位并修复错误的过程,与测试目的不同。9.答案:A解析:关系数据库用二维表(关系)表示实体及实体之间的联系,每个二维表对应一个关系模式,行对应元组,列对应属性。10.答案:D解析:算法必须满足有穷性、确定性、可行性、输入、输出五个特性,其中输入可以为0个(算法本身包含初始条件),但输出至少有1个,无输出的算法不具备实际意义。11.答案:C解析:func是用户可自定义的标识符,不属于C++标准关键字;class(定义类)、default(switch默认分支、默认参数)、const(常量修饰)均为C++关键字。12.答案:D解析:int类型的长度由编译环境和操作系统决定,通常为4字节但非固定;char类型存储1字节数据,汉字需使用多字节字符类型(如wchar_t)存储;double类型的精度(约15~16位有效数字)远高于float类型(约6~7位有效数字);bool类型只有true和false两个合法取值。13.答案:C解析:C++运算符优先级中,*、/优先级高于+、-,同级运算符按从左到右顺序运算。计算过程:3*2=6→6/4=1(整数除法向下取整)→5+1=6→6-1=5。14.答案:D解析:A选项10<20为true;B选项10不等于20为true;C选项a>b为false,但b>0为true,逻辑或运算只要有一个为真结果即为真;D选项a<b为true,但b<10为false,逻辑与运算需全部为真结果才为真,因此结果为false。15.答案:D解析:switch语句中default子句可放在任意位置,不影响功能;case子句后可以省略break,会出现“穿透”现象,即继续执行后续case的代码;case后面的表达式可以是整型、字符型、枚举型常量表达式,不限于纯整型;switch语句允许省略default子句。16.答案:A解析:循环执行10次,i从1递增到10;当i为偶数时执行continue,跳过本次循环的sum累加语句。因此累加的数为1、3、5、7、9,总和为25。17.答案:C解析:A选项中n是变量,C++标准不支持可变长度数组(部分编译器提供扩展支持,不属于标准语法);B选项初始化列表的元素个数超过数组长度,语法错误;C选项省略数组长度时,由初始化列表的元素个数确定数组长度为3,语法正确;D选项数组部分初始化时,未显式初始化的元素自动初始化为0,因此arr[1]的值为0。18.答案:B解析:strlen函数计算字符串的有效长度,不包含末尾的结束符'\0'。字符串"C++Program"的有效字符为C、+、+、P、r、o、g、r、a、m,共10个,因此长度为10。19.答案:C解析:C++中函数不允许嵌套定义,即不能在一个函数内部定义另一个函数;函数可以没有返回值(返回类型为void),可以没有参数,也可以递归调用(函数内部调用自身)。20.答案:D解析:参数前的&表示引用传递,形参是实参的别名,函数内部修改形参会直接修改对应实参的值;引用传递的实参必须是可修改的左值,不能是常量或临时值。21.答案:D解析:默认参数调用时,实参按从左到右的顺序匹配形参,省略的参数必须是最右侧的连续参数。D选项省略了第一个参数,不符合默认参数的调用规则,语法错误。22.答案:B解析:p指向数组首元素a[0](值为1)。A选项p+2是指向a[2]的地址,而非元素值;B选项*(p+2)等价于a[2],值为5,正确;C选项*p为a[0]的值1,加2后结果为3;D选项p++为后置自增,先取p指向的a[0]的值1,再将p向后移动一个元素。23.答案:C解析:类的私有成员只能被类的成员函数和友元函数访问,对象不能直接访问私有成员,必须通过公有成员函数接口;类是对象的抽象模板,对象是类的具体实例,一个类可以定义多个对象。24.答案:B解析:构造函数带有一个默认参数,当传入1个实参时,形参a接收实参值5,默认参数被覆盖,因此调用的构造函数参数个数为1。25.答案:B解析:构造函数没有返回值(也不能写void),函数名必须与类名完全相同;构造函数支持重载,一个类可以有多个构造函数(参数列表不同),用于实现不同的对象初始化方式。26.答案:C解析:public继承方式下,基类的protected成员在派生类中仍为protected权限,可被派生类的成员函数直接访问;派生类构造函数必须通过初始化列表调用基类构造函数,语法正确;执行Derivedd(1,2)时,基类构造函数将x初始化为1,派生类构造函数将y初始化为2,调用show()输出1,2;基类的private成员无论何种继承方式,派生类都不能直接访问。27.答案:B解析:构造函数不能声明为虚函数,因为构造函数执行时对象尚未完全创建,无法实现动态绑定;虚函数必须是类的成员函数,通过基类指针或引用调用实现运行时多态;析构函数通常声明为虚函数,保证派生类析构函数被正确调用。28.答案:B解析:基类A的fun函数为虚函数,派生类B重写了fun函数。p是基类指针,指向派生类B的对象,通过p调用fun函数时发生动态绑定,调用派生类B的fun函数,输出B。注意:此处基类未定义虚析构函数,deletep会导致内存泄漏,但不影响fun函数的调用结果。29.答案:D解析:运算符重载不能改变运算符的优先级、结合性、操作数个数,也不能改变运算符的语法规则;部分运算符不允许重载,如成员访问运算符.、成员指针访问运算符.*、作用域解析符::、三目运算符?:等。30.答案:D解析:函数模板的实参未显式指定类型时,编译器会自动推导模板参数类型,要求所有对应模板参数的实参类型一致。D选项中1为int类型,2.5为double类型,类型不一致,无法推导出T的具体类型,调用错误;可通过显式指定类型如max<double>(1,2.5)解决。31.答案:B解析:友元函数是定义在类外部的普通函数,不是类的成员函数,通过在类中声明为友元获得访问私有成员的权限;友元类的所有成员函数都是该类的友元函数,可以访问其私有成员;友元关系是单向的,不具有传递性,也不能被继承。32.答案:B解析:r是a的引用,即a的别名,对r的所有操作等价于对a的直接操作。执行r=20后,a的值被修改为20,因此输出结果为20。33.答案:B解析:静态成员变量属于类本身,所有对象共享同一份静态成员,可通过类名直接访问;静态成员函数没有this指针,只能直接访问类的静态成员,不能直接访问非静态成员(非静态成员属于具体对象,静态成员函数无法确定访问哪个对象的成员)。34.答案:D解析:枚举类型默认第一个枚举值为0,后续枚举值依次加1;若某个枚举值显式赋值,则后续枚举值在前一个的基础上加1。本题中Red=0,Green=1,Blue显式赋值为2,因此Yellow=3。35.答案:D解析:cin使用>>运算符读取字符串时,会以空格、制表符、换行符作为分隔符,无法读取包含空格的字符串;若需读取含空格的整行字符串,需使用getline函数。36.答案:A解析:break语句的作用是跳出当前所在的循环结构。当i=3时,执行break语句,for循环立即终止,因此仅输出i=1和i=2,结果为“12”。37.答案:B解析:int*p[4]是指针数组,数组名为p,包含4个元素,每个元素都是指向int类型的指针;数组指针的定义形式为int(*p)[4],即p是指向包含4个int元素数组的指针。38.答案:C解析:析构函数没有参数,不能被重载,一个类只能有一个析构函数;析构函数的名称为~类名,用于在对象销毁时释放占用的资源。39.答案:C解析:定义t1时调用无参构造函数,输出“A”;定义t2时调用带参构造函数,输出“B”;程序结束时,对象按定义的逆序析构,先析构t2输出“C”,再析构t1输出“C”,因此总输出为“ABCC”。40.答案:A解析:派生类不能继承基类的构造函数、析构函数、友元关系等,并非所有成员都能被继承;派生类可以新增自身的成员,可以重定义基类的成员函数,继承的核心作用是实现代码复用。二、基本操作题参考答案1.第1处错误修改:将intsum;改为intsum=0;解析:sum作为累加变量,必须初始化为0,否则会使用随机初始值参与运算,导致结果错误。第2处错误修改:将if(i/3==0)改为if(i%3==0)解析:判断一个数能否被3整除,应使用取模运算符%,若i%3等于0则说明i能被3整除;除法运算符/无法实现该判断逻辑。正确运行结果:sum=16832.第1处错误修改:将*a=b;改为*a=*b;解析:a和b都是int类型的指针,要交换其指向的变量的值,需使用*运算符取指针指向的内容,b是地址,不能直接赋值给*a(int类型变量)。第2处错误修改:将b=temp;改为*b=temp;解析:同理,要将temp的值赋给b指向的变量,需对b解引用,直接修改b的地址无法实现变量交换,且会导致指针指向错误。正确运行结果:10,5三、简单应用题参考答案(1)填:name=n解析:setInfo函数的功能是设置学生的姓名和成绩,私有成员name需要通过形参n赋值。(2)填:returnscore解析:getScore函数的功能是获取学生成绩,需要返回私有成员score的值。(3)填:setInfo(name,score)解析:

温馨提示

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

评论

0/150

提交评论