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

下载本文档

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

文档简介

国家二级(C++)笔试模拟试卷25(共9套)(共444题)国家二级(C++)笔试模拟试卷第1套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、算法的时间复杂度是指A、算法程序运行的具体时间B、算法程序的长度C、算法程序执行过程中基本运算的次数D、运行时算法程序所占的内存容量标准答案:C知识点解析:算法的时间复杂度是用算法程序执行过程中所需要的基本运算次数来衡量的。2、下列数据结构中能使用对分查找的是A、二叉链表B、带链的栈C、有序线性链表D、有序顺序表标准答案:D知识点解析:对分查找只能适用于顺序存储的有序线性表。3、按“先进先出”原则组织数据的结构是A、有序表B、栈C、队列D、二叉树标准答案:C知识点解析:栈是按“先进后出”原则组织数据的结构;队列是按“先进先出”原则组织数据的结构;而有序表与二叉树均不是。因此,本题的正确答案为C。4、对下列二叉树进行前序遍历的结果是A、ZBTYCPXAB、ATBZXCYPC、ZBTACYXPD、ATBZXCPY标准答案:B知识点解析:按照二叉树前序遍历的方法:在访问根结点、遍历左子树与遍历右于树这三者中,首先访问根结点,然后遍历左子树,最后遍历右于树;并且.在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。对本题中的二叉树进行前序遍历的结果应是ATBZXCYP。5、下列叙述中正确的是A、软件就是程序清单B、软件就是存放在计算机中的文件C、软件应包括程序清单以及运行结果D、软件包括程序和文档标准答案:D知识点解析:软件应包括程序和文档。6、在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送A、调用语句B、命令C、口令D、消息标准答案:D知识点解析:在面向对象方法中,一个对象请求另一对象为其服务是通过发送消息来实现的。7、在模块化程序设计中,按功能划分模块的原则是A、各模块的功能尽量单一,且各模块之间的联系尽量的少B、各模块的功能尽量单一,且各模块之间的联系尽量紧密C、各模块应包括尽量多的功能D、各模块应包括尽量多的输入输出操作标准答案:A知识点解析:在模块化程序设计中,按功能划分模块的原则是:要求各模块的功能尽量单一,且各模块之间的联系尽量的少。8、下述关于数据库系统的叙述中正确的是A、数据库系统减少了数据冗余B、数据库系统避免了一切冗余C、数据库系统中数据的一致性是指数据类型一致D、数据库系统比文件系统能管理更多的数据标准答案:A知识点解析:数据库系统只是减少了数据冗余,但避免一切冗余;数据库系统中数据的一致性并不是指数据类型一致,而是指采用了统一的数据结构方式,数据库系统与文件系统比较,数据库系统解决了数据共享问题。9、在关系数据库中,用来表示实体之间联系的是A、树结构B、网结构C、线性表D、二维表标准答案:D知识点解析:在关系数据库中,用来表示实体之间联系的是二维表。10、下列叙述中正确的是A、数据库系统是一个独立的系统,不需要操作系统的支持B、数据库技术的根本目标是要解决数据的共享问题C、数据库管理系统就是数据库系统D、以上三种说法都不对标准答案:B知识点解析:数据库管理最本质的特点是实现数据的共享。为了实现数据的共享,保证数据的独立性、完整性和安全性,需要有一组软件来管理数据库中的数据,处理用户对数据库的访问,这组软件就是数据库管理系统(DBMS)。数据库管理系统与计算机系统内的其他软件一样,也在操作系统(OS)的支持下工作,它与操作系统的关系极为密切。操作系统、数据库管理系统与应用程序在一定的硬件支持下就构成了数据库系统。二、选择题(本题共25题,每题1.0分,共25分。)11、以下叙述中不正确的是A、在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B、在C的函数中,最好使用全局变量C、在C中,形式参数只是局限于所在函数D、在C中,函数名的存储类别为外部标准答案:B知识点解析:本题也是考查C语言中函数的概念及其使用。函数调用时,值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行选择。12、C++语言中函数返回值的类型决定于A、return语句中的表达式类型B、调用函数的主调函数类型C、调用函数时临时类型D、定义函数时所指定的函数类型标准答案:D知识点解析:函数在定义时已经可以指定其函数类型,则函数返回值类刹就是该类型。13、若要说明一个类型名STP,使得STPs;等价于char*s,以下选项中正确的是A、typedefSTPchar*s;B、typedef*charSTP;C、typedefSTP*char;D、typedefchar*TP;标准答案:D知识点解析:本题考查类型定义typedef的使用方式,考生常犯的问题是把两者的位置颠倒。14、以下非法的赋值语句是A、n=(i=2,++i);B、j++;C、++(i+1),D、x=i>0;标准答案:C知识点解析:本题其实是考查各级运算符的优先级的。选项A赋值符号右侧为逗号表达式,其取值为最后一项表达式的值;选项B隐含表示为j=J+1,这是很常用的一种赋值表达式。选项D赋值符号右侧为逻辑表达式,其值为1或0,可以赋值给变量x。将选项C展开为i+1=i+1+1,这是错误的。15、C++语言中在C语言的基础上增加的特性不包括A、G构B、引用C、类和对象D、静态成员函数标准答案:A知识点解析:本题很简单,不过考生要注意引用是C++的新特性。只有结构是C语言就出现的特性。16、对于下列语句,正确的判断是for(x=0,y=O;(y!=123)&&(x<4);x++);A、是无限循环B、循环次数不定C、最多执行4次D、最多执行3次标准答案:C知识点解析:本题考查for循环条件中三个表达式的执行顺序。首先执行表达式一,然后执行表达式二,如果表达式二为真,则循环体执行,然后执行表达式三,接着继续执行表达式二,如此循环。考生要注意的是,本题中表达式三中包含了变量x的增量操作,因此可以由表达式二和三一起控制循环体的执行次数。本题正确答案为C。17、若有说明:inta[3][4];则对a数组元素的非法引用是A、a[0][2*1]B、a[1][3]C、a[4-2][0]D、a[0][4]标准答案:D知识点解析:在数组这部分的知识里面,数组下标越界是一个比较容易忽略的问题,其下标是从。开始,至n-1为止,因此选项D是正确答案。18、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是A、6.5B、6C、5.5D、6标准答案:D知识点解析:混合表达式的值的类型是由表达式中具有最高精度的类型确定,因此可知选项B可排除。注意b/b的结果应是1.00000,而(int)a则为5,相加的结果还是double型,故正确答案应为D。19、下面赋值语句中正确的是A、a=7+b+c=a+7;B、a=7+b++=a+7;C、a=7+b,b++,a+7;D、a=7+b,c=a+7;标准答案:D知识点解析:赋值语句合法的重要标志之一就是赋值符号的左侧应该表示为一个变量,即可以在内存中存在一块空间用于存放赋值符号右侧的值。据此,可以断定选项A和B可以排除。注意;选项C中不是逗号表达式,要考虑优先级的问题。本题答案为D。20、语句cout<<(a=2)&&(b=-2);的输出结果是A、无输出B、编译错误C、-1D、1标准答案:D知识点解析:很明显.本题考查的是表达式的值作为结果辅出。可以看出,本表达式是一个逻辑表达式,其结果为真或假,那么输出则对应1和0,故排除选项C。本题答案为D。21、在下面的函数声明中,存在着语法错误的是A、voidBC(inta,int)B、voidBD(int,int)C、voidBE(int,int=5)D、intBF(intx;intv)标准答案:D知识点解析:函数声明时,可以指定其形参的默认值,不过要从右向左指定;可以省略形参名,仅以形参类型表示;形参表之间用逗号分割。因此,本题答案为D。22、下列关于指针的操作中,错误的是A、两个同类型的指针可以进行比较运算B、可以用一个空指针赋给某个指针C、一个指针可以加上两个整数之差D、两个同类型的指针可以相加标准答案:D知识点解析:本题考查指针能够进行的运算方式。指针可以加减一个整数,两个指针可以相减,表示指针之间的元素个数。指针相加则没有意义,因此本题答案为D。23、静态成员函数不能说明为A、整型函数B、常函数C、虚函数D、内联函数标准答案:C知识点解析:静态函数不能说明为虚函数。24、静态成员函数没有A、返回值B、this指针C、指针参数D、返回类型标准答案:B知识点解析:this指针是系统隐含的用于指向当前对象的指针。由于静态函数是同类中所以对象都共享的函数,在内存当中只存在一份,不属于某个对象所有,所以静态函数没有this指针。25、以下程序的输出结果为main()intm=7,n=4;floata=38.4,b=6.4,x;x=m/2+n*a/b+1/2;cout<<x<<end1;}A、27B、27.5C、28D、28.5标准答案:A知识点解析:本题考查表达式值的类型由参与运算的所有变量的类型中优先级最高的变量类型所决定。不过要注意的是整型向float型转换时.将丢失小数部分,即向下驭值。26、执行下列语句后,输出结果为cout.put(’s’);cout<<,’c’<<’a’;A、caB、scaC、sD、a标准答案:B知识点解析:本题很简单,考查cout对象的成员函数put方法和<<操作符的使用方法。27、下列运算符中,不能重载的是A、?:B、+C、-D、<=标准答案:A知识点解析::?是C++中惟一一个三目运算符,不能被重载。28、所有在函数中定义的变量及函数的形式参数,都属于A、全局变量B、局部变量C、静态变量D、常量标准答案:B知识点解析:本题考查几种变量的作用域范围及其分类。29、为引入对象的同义词,对象的别名称为A、指针B、引C、枚举D、结构标准答案:B知识点解析:引用是C++引入的一个新概念,表示变量或对象的别名。30、以下不属于构造函数特征的是A、构造函数名与类名相同B、构造函数可以重载C、构造函数可以设置默认参数D、构造函数必须指定函数类型标准答案:D知识点解析:类的构造函数不能指定函数类型,由系统采取默认的处理方式,不需要用户参与。31、以下关于虚函数的叙述中不正确的是A、虚函数属于成员函数B、虚函数不允许说明成静态的C、凡是虚函数必须用virtual说明D、虚函数可以被继承标准答案:C知识点解析:虚函数的引入是为了解决动态绑定问题,使类的实例表现出多态性,虚函数在继承后依然保持虚函数特性,此时不需要用virtual关键词修饰。32、类的构造函数的作用是A、一般成员函数B、类的初始化C、对象的初始化D、删除对象创建的所有对象标准答案:C知识点解析:本题考查类的构造函数的作用,构造函数一般负责完成对象建立时的初始化工作,如资源的分配。33、继承机制的作用是A、信息隐藏B、数据封装C、定义新类D、数据抽象标准答案:C知识点解析:继承是类的一个重要特性,没有继承,面向对象方法也就不存在。正是有了继承,才呈现出丰富多彩的类和对象。34、关于虚函数的描述中正确的是A、虚函数是一个静态成员函数B、虚函数是一个非成员函数C、虚函数既可以在函数说明时定义,也可以在函数实现时定又D、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型标准答案:D知识点解析:虚函数不能定义为静态函数;虚函数的作用在于继承,表现出动态性。所以,在派生类中定义的虚函数必须和基类中对应的虚函数具有相同的参数个数和类型。35、下列表示纯虚函数的成员函数是A、virtualintfunc(int);B、voidfunc(int)=0;C、virtualvoidfunc=0;D、virtualvoidfunc(int){}标准答案:C知识点解析:由于在前序遍历中首先访问根结点,因此,前序序列中的第一个结点为二叉树的根结点,即D为二叉树的根结点。又由于在中序遍历中访问根结点的次序为居中,而访问左于树上的结点为居先,访问右子树上的结点为最后,因此,在中序序列中,以根结点(D)为分界线,前面的子序列(ABC)一定在左子树中,后面的子序列(EFG)一定在右于树中。同样的道理,对于已经划分出的每一个子序列的所有结点中,位于前序序列最前面的一个结点为子树的根结点,而在中序序列中位于该根结点前面的结点构成左子树上的结点子序列,位于该根结点后面的结点构成右子树上的结点子序列。这个处理过程直到所有子序列为空为止。根据上述道理,该二叉树恢复的过程如下图所示;[*]根据后序遍历的方法,对该二叉树后序遍历的结果为ACBEGFD。三、公共基础填空题(本题共5题,每题1.0分,共5分。)36、假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,则当前尾指针的值为【】。标准答案:10知识点解析:假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,则当前尾指针的值为10。37、广义表的深度是指【】。标准答案:表展开后括号的层数知识点解析:在广义表的深度是指表展开后括号的层数。38、栈顶的位置是随着【】操作而变化的。标准答案:进栈和退栈知识点解析:栈顶的位置是随着进栈和退栈操作而变化的。39、在单链表上难以实现的排序方法有希尔排序、【】和堆排序。标准答案:快速排序知识点解析:在单链表上难以实现的排序方法有希尔排序、快速排序和堆排序。因为这三种排序方法均适合完成顺序结构的排序,可随机访问其中的元素。而单链表属于动态的数据结构,访问元素要通过指针来实现。40、在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为【】。标准答案:2知识点解析:在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为2,仅需要拆分2次即可找到72。四、填空题(本题共10题,每题1.0分,共10分。)41、C++中类作用域符是【】。标准答案:::知识点解析:类作用域符::。42、在函数原型声明中,可以省略参数名,但必须声明函数参数的【】。标准答案:类型知识点解析:不能省略参数的类型。43、在类中声明的静态浮点数的默认初始化值是【】。标准答案:O知识点解析:静态变量由系统自动初始化为0。44、定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为【】类型。标准答案:const知识点解析:用const修饰的参数为常类型参数。45、在C++中,给一变量取别名,可以通过【】方式。标准答案:引用知识点解析:引用是给对对象的别名,对引用的操作就是对被引用对象的操作。46、面向对象的基本特点包括继承性、封装性和【】。标准答案:多态性知识点解析:继承性、封装性及多态性是面向对象的基本特点。47、C++源程序中,只有【】个主函数。标准答案:1知识点解析:C++源程序中,只有1个主函数。48、虚基类是含有【】函数的类。标准答案:虚知识点解析:虚基类是含有虚函数的类。49、下面程序执行的结果是【】#include<iostream>usingnamespacestd;classA{public:staticintx;A(inty){cout<<x+y;}};intA::x=2;voidmain(){Aa(5);}标准答案:7知识点解析:程序的静态变量初始化为2,而构造函数招待过程中y变量为初始化为5,故程序执行的结果为7。50、下面程序执行的结果是【】。#include<iostream>usingnamespacestd;voidmain(){intsum=0;intarray[6]={1,2,3,4,5,6};int*p;p=&array[0];for(inti=0;i<6;i++){sum=sum+*p;p++;}cout<<sum;}标准答案:21知识点解析:本题用数组地址来访问数组内容,通过数组指针来操作数组内容,依次取出数组内容进行加和,然后进行输出。五、填空题(含2小题)(本题共1题,每题1.0分,共1分。)51、C++编译时的多态性体现在【】,运行时的多态性体现在【】。标准答案:重载虚函数知识点解析:C++编译时的多态性体现在重载,运行时的多态性体现在虚函数。国家二级(C++)笔试模拟试卷第2套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、算法分析的目的是()。A、找出数据结构的合理性B、找出算法中输入和输出之间的关系C、分析算法的易懂性和可靠性D、分析算法的效率以求改进标准答案:D知识点解析:算法是指对解题方案准确而完整的描述,而对算法进行分析的目的,是为了在原有的基础上,对算法进行改进,从而提高对数据的处理效率。2、下列叙述中正确的是()。A、线性链表的各元素在存储空间中的位置必须是连续的B、线性链表的头元素一定存储在其他元素的前面C、线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D、线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的标准答案:D知识点解析:在线性链表中,各元素在存储空间中的位置是任意的,各元素的顺序也是任意的,依靠指针来实现数据元素的前后件关系。3、线性表常采用的两种存储结构是()。A、顺序存储结构和链式存储结构B、散列方法和索引方式C、链表存储结构和数组D、线性存储结构和非线性存储结构标准答案:A知识点解析:线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。4、设栈S和队列Q的初始状态为空,元素a、b、c、d、e和f依次通过栈s,一个元素出栈后即进入队列Q,若6个元素出队的顺序是b、d、c、f、e、a,则栈s的容量至少应该是()。A、6B、4C、3D、2标准答案:C知识点解析:栈的操作规则是后进先出,队列的运算规则是先进先出。对于本题,出队顺序也就是入队顺序,同样也是出栈顺序,为了得到b、d、c、f、e、a出栈顺序,则入栈顺序应该是a进、b进、b出、c进、d进、d出、c出、e进、f进、f出、e出、a出。可以看作最多只有3个元素在栈内,所以栈的容量最少应为3。5、数据库DB、数据库系统:DBS、数据库管理系统DBMS之间的关系是()。A、DB包括DBS和DBMSB、DBMS包括。DB和DBSC、DBS包括DB和DBMSD、没有任何关系标准答案:C知识点解析:数据库系统(DBS)由数据库(DB)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台5个部分组成,可见DB和DBMS都是DBS的组成部分。6、在包含1000个元素的线性表中实现如下各运算,所需的执行时间最长的是()。A、线性表按顺序方式存储,在线性表的第100个结点后面插入一个新结点B、线性表按链接方式存储,在线性表的第100个结点后面插入一个新结点C、线性表按顺序方式存储,删除线性表的第900个结点D、线性表按链接方式存储,删除指针P所指向的结点标准答案:A知识点解析:由于线性表采用的是顺序存储方式,用存储单元的邻接性体现线性表元素间的一维顺序关系,因此对线性表进行插入和删除运算时,可能需要移动大量的结点,以保持这种物理和逻辑的一致性。对于选项A),后面的900个结点都要住后移动,对于选项C),后面的100个结点都要往前移动。而对于线性表按链接方式存储,当进行插入与删除操作时,只改变相应的指针即可,所以比较4个选项的操作可得知选项A)所需要的执行时间最长。7、一间教室可坐多名学生,则实体教室和学生之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:两个实体集间的联系可以有下面几种:一对一的联系、一对多或多对一的联系和多对多的联系。由于一间教室可以坐多个学生,所以它们的联系是一对多联系。8、对于长度为n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是()。A、冒泡排序为n/2B、冒泡排序为nC、快速排序为nD、快速排序为n(n-1)/2标准答案:D知识点解析:在最坏情况下,冒泡排序和快速排序的比较次数都是n(n-1),2。9、对关系S和R进行集合运算,结果中既包含s中的所有元组也包含R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、积运算标准答案:A知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。10、建立E-R模型的工作,属于软件生命周期中的()。A、需求分析阶段B、设计阶段C、编码阶段D、测试阶段标准答案:B知识点解析:建立E-R模型是数据库概念设计的重要内容,而概念设计是设计阶段的组成部分。二、选择题(本题共25题,每题1.0分,共25分。)11、有如下程序:#includeusingnamespacestd;classA{public:A(){cout<<“A”;}~A(){tout<<“~A”;}};classB:publicA{A*ppublic:B(){cout<<“B”;p=newA;}~B(){cout<<“~B”;deletep;}};intmain(){Bobj;return0;}执行这个程序的输出结果是()。A、BAA~A~B~AB、ABA~B~A~AC、BAA~B~A~AD、ABA~A~B~A标准答案:B知识点解析:此题考查的是类的构造函数和析构函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。因此本题中,首先调用基类构造函数输出A,然后调用子对象的构造函数输出B,p=newA再调用类A的构造函数输出A;析构函数的调用顺序和构造函数的调用顺序相反。12、若有以下程序:#includeusingnamespacestd;classA{public:A(inti,intj){a=i:b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout(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,51的对应部分分别相加,最后输出6,9。13、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;)staticimgetNum(){returnn;}private:staticintn;};intTest:n=1;intmain(){Test*p=newTest;deletep;cout<<“n;”<A、n=0B、n=1C、n=2D、n=3标准答案:A知识点解析:语句Test*p=newTest;会调用类的构造函数’rest(){n+=2;},使n的值由原来的1变为3,然后deletep调用类的析构函数~Test(){n-=3.},因为n是static型变量,所以会在3的基础上减3使得输出结果为0。14、假定MyClass为一个类,那么下列的函数说明中,()为该类的析构函数。A、void~MyClass();B、~MyClass(intn);C、MyClass();D、~MyClass();标准答案:D知识点解析:C++语言中析构函数为符号“~”加类名,且析构函数没有返回值和参数,故前不加void关键字。所以正确的形式应该是~MyClass()。15、下列情况中,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时标准答案:B知识点解析:拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它的一般格式是:类名::类名(Const类名&引用对象名)。当一个类的对象赋值给该类的另一个对象时,是赋值而不是创建对象,所以不会调用拷贝构造函数。16、下列有关拷贝构造函数的描述中错误的是()。A、拷贝构造函数是一种构造函数B、拷贝构造函数与一般的构造函数一样,可以设置多个形参C、每一个类中都必须有一个拷贝构造函数D、拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象标准答案:B知识点解析:拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型;只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会自动生成一个公有的拷贝构造函数。17、类MyClass的定义如下,若要对value赋值,则下面语句正确的是()。classMyClass{public:MyClass(){)MyClass(inti){value=newint(i);}int*value;};A、MyClassmy;my.value=10;B、MyClassmy;*my.value=10;C、MyClassmy;my.*value=10;D、MyClassmy(10);标准答案:D知识点解析:因题目中定义的指针value是指向变量i的,所以直接利用语句MyClass(inti){value=newint(i);}对value进行赋值即可。18、若有如下程序:#includeusingnamespacestd;ints=0:classsample{staticintn:public:sample(inti){n=i:}staticvoidadd(){S+=n:}};intsample::n=0;intmain(){samplea(2),b(5);sample::add();cout<A、2B、5C、7D、3标准答案:B知识点解析:执行语句“samplea(2),b(5)”;的结果是使n的值最终变为5,sample::add()语句调用函数staticvoidadd(),使得s=s+n=5。19、下列运算符中不能在C++中重载的是()。A、?:B、+C、-D、<=标准答案:A知识点解析:此题考查的是运算符的有关概念。运算符重载是针对C++原有运算符进行的,不能通过重载创造新的运算符;除了.、.*、->、::、?:这五个运算符之外,其他运算符都可以重载。20、下列重载函数中,正确的是()。A、voidfun(inta,floatb);voidfun(intC,floatd)B、voidfun(inta,floatb);voidfun(floata,intb)C、floatfun(inta,floatb);intfun(intb,floata)D、intfun(inta,intb);floatfun(inta,intb)标准答案:B知识点解析:所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。21、有如下程序:#includeusingnamespacestd;classsample{private:intx,y;public:sample(inti,intj){x=i:y=j;}voiddisp(){cout<<“disp1”<A、disp1B、disp2C、disp1disp2D、程序编译时出错标准答案:B知识点解析:因为对象a被定义为常对象,所以a.disp()语句调用的是类的常成员函数voiddisp()const,输出的结果是disp2。22、有如下类的定义,横线处的语句是()。classTestClass{_______intx,y;public:TestClass(inta=0,intb=0){x=a:y=b;}staticvoidchange(){y=10:y-=10;}};A、publicB、privateC、staticD、protected标准答案:C知识点解析:因为staticvoidchange()为静态函数,静态函数主要访问静态数据,不访问非静态数据。所以函数中访问了数据y,所以下划线的数据类型应对应为static。23、有如下程序:#includeusingnamespacestd;classTestClass{protected:TestClass(){cout<<‘X’;)TestClass(charc){cout<A、yB、yxC、xyD、yy标准答案:C知识点解析:程序中的类TestClass为基类,TestClass1为TestClass的派生类。由main主函数入手,定义TestClass1类型的对象d1,参数值为‘y’。TestClass1类继承TestClass,所以主函数中“TestClassld1(‘y’);”语句首先调用调用基类中的“TestClass(){cout<<‘x’;}”输出x,然后调用“TestClassl(charc){cout<24、下面是关于派生类声明的开始部分,其中正确的是()。A、classvirtualB:publicAB、virtualclassB:publicAC、classB:publicAvirtualD、classB:virtualpublicA标准答案:D知识点解析:声明派生类的一般形式为:class派生类名:【继承方式】基类名。其中继承方式包括:public,private,protected,而virtual为C++中的关键字。虚函数的使用方法是在基类用virtual声明成员函数为虚函数。25、在函数中,可以用auto、extern、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是()。A、autoB、externC、registerD、static标准答案:A知识点解析:此题考查的是存储类型。C++语言变量的存储类型分为如下几种类型:auto——函数内部的局部变量;static——静态存储分配;extrn---全局变量;register——变量存储在硬件寄存器中。26、若有以下程序:#includeusingnamespacestd;classTestClass{public:voidwho(){cout<<“TestClass”<who();return0:}则该程序运行后的输出结果是()。A、TestClasslB、TestClassC、0D、无输出标准答案:B知识点解析:程序中的TestClas1为TestClass的派生类,主函数main中定义TstClass对象*p,TestClass1对象obj1,然后p引用obj1,执行p->who()则是调用基类中的who函数,输出TestClass。27、下列有关继承和派生的叙述中,正确的是()。A、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成员C、基类对象可以赋值给派生类对象D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类标准答案:D知识点解析:如果派生类私有继承基类,不能访问基类中的私有成员,所以A、B是错误的。派生类是对基类的具体化,所以C错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择D。28、下面叙述错误的是()。A、派生类可以使用private派生B、对基类成员的访问必须是无二义性的C、基类成员的访问能力在派生类中维持不变D、赋值兼容规则也适用于多继承的组合标准答案:C知识点解析:在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择C。29、下列程序的输出结果为2,横线处应添加语句()。#includeusingnamespacestd;classTestClass1{public:____________voidfun(){cout<<1;}};classTestClass2:publicTestClass1{public:voidfun(){cout<<2;}};intmain(){TestClass1*p=newTestClass2;P->fun();deletep;return0;}A、publicB、privateC、virtualD、protected标准答案:C知识点解析:由主函数main入手,定义TestClass1类的指针对象p指向派生类TestClass2。因为基类和派生类中都有fun函数,题目要求输出为2,就是基类对象访问派生类中fun函数。通过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同名函数。所以这里将基类中的fun函数声明为virtual。并且当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。30、要使程序执行后的输出结果为ABCD,应在横线处添加语句()。#includeusingnamespacestd;classA{public:A(){cout<<‘A’;}};classB:___________{public:B0{cout<<‘B’;}};classC:virtualpublicA{public:C0{cout<<‘C’;});classD:publicB,publicC{public:D0{cout<<‘D’;}};voidmain0{Dobj;)A、publicAB、privateAC、protectedAD、virtualpublicA标准答案:D知识点解析:由主函数main入手,定义了类D对象obj。其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为“ABCD”,依次为类A,类B,类C,类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。31、下面的描述中,正确的是()。A、virtual可以用来声明虚函数B、含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C、即使基类的构造函数没有参数,派生类也必须建立构造函数D、静态数据成员可以通过成员初始化列表来初始化标准答案:A知识点解析:在基类中用virtual声明成员函数为虚函数,所以A是正确的。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。32、若要把函数voidfun()定义为TestClass的友元函数,则应该在类TestClass的定义中加入的语句是()。A、voidfriendfun()B、friendfun()C、friendvoidfun()D、TestClassvoidfun()标准答案:C知识点解析:如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友元函数。因为函数为voidfun(),根据友元定义补全语句为“friendvoidfun();”。33、若要把函数voidfun()定义为TestClass的友元函数,则应该在类TestClass的定义中加入的语句是()。A)voidfriendfun()B)friendfun()C)friendvoidfun()D)TestClassvoidfun()(33)已知递归函数fun的定义如下:intfun(intn){if(n<=1)return1;//递归结束情况elsereturnn*fun(n-2);//递归}则函数调用语句fun(5)的返回值是()。A、5B、12C、15D、30标准答案:C知识点解析:递归函数fun被定义为含有参数intn,返回整型。其中fun函数递归调用本身,当n=1时,fun返回1,如果大于1那么执行n*fun(n-2)。所以,当n等于5时,执行5*fun(3);当3时继续调用fun,3*fun(1),即fun(5)=5*(3*fun(1)),答案为15。34、字面常量42、4.2、42L的数据类型分别是()。A、long;double,intB、long,float,intC、int,double,longD、int,float,long标准答案:C知识点解析:此题考查的知识点是字面常量。对于整型字面常量,只要没有超过C++中整数所能表示的范围,C++将自动按整数来存储此数,也可以通过在整型字面常量后添加u或1来指定无符号整数或长整数来存储;对于实型字面常量,C++将自动按照双精度数来存储,也可以通过在实型字面常量后添加f来指定按单精度数存储。35、下列有关内联函数的叙述中,正确的是()。A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是return语句标准答案:C知识点解析:此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B错误;内联函数只是比普通函数有更高的执行效率。三、公共基础填空题(本题共5题,每题1.0分,共5分。)36、关系代数是关系操作语言的一种传统表示方式,它以集合代数为基础,它的运算对象和运算结果均为______________。标准答案:关系知识点解析:关系代数是关系操纵语言的一种传统表示方式,它以集合代数为基础发展起来的,但它的运算对象和运算结果均是关系,这些新关系仍可以使用同样的代数运算进一步操作。关系代数也是一种抽象的查询语言,它通过对关系的运算来表达查询和修改处理的需求。37、在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间______________的信息。标准答案:前后件关系知识点解析:在数据存储结构中,除了要存储数据,还要存储数据的前后件关系,对于顺序存储的数据结构,前后件之间的关系是通过存储空间的位置来实现的,而对于链式存储来说,数据元素之间的前后件关系是通过指针来实现的。38、软件是程序、数据和______________的集合。标准答案:相关文档知识点解析:计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。39、对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较______________次。标准答案:log2n知识点解析:二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是有序表。对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次40、测试分为白箱法和黑箱法,______________又称为逻辑覆盖测试。标准答案:白箱法知识点解析:白箱测试是根据程序内部逻辑结构的分析来选取测试用例。由于测试用例对程序的逻辑覆盖程序决定了测试的完全性的程度,因此白箱测试也称为逻辑覆盖测试。四、填空题(本题共10题,每题1.0分,共10分。)41、若有以下程序:#includeusingnamespacestd;classTestClass1{public:TestClass1(){x=0:}intx;};classTestClass2:virtualpublicTestClass1{public:TestClass2(){x=10;}};classTestClass3:virtualpublicTestClass1{public:TestClass3(){x=20;}};classTestClass4:publicTestClass2,protectedTestClass3{};intmain(){TestClass4obj;cout<标准答案:20知识点解析:主函数中定义TestClass4的对象obj。TestClass4虽然公有继承于TestClass2,但是x在其中为私有,所以无法访问。TestClass4保护继承于TestClass3,TestClass3中的x=20为公有成员数据,对象obj可以访问这个数据,即输出为20。42、指针变量所保存的不是一般的数据值,而是程序中另一个对象的__________。标准答案:内存地址知识点解析:指针变量指向的不是变量保存的数据值,而是变量的地址,所以指针变量保存的是对象的内存地址。43、以下程序的输出结果是__________。#includeintadd(intx,inty){returnx+y;}doubleadd(doublex,doubley){returnx+y;}voidmain(){inta=3,b=3;doublec=6.5,d=1.5;cout<标准答案:6,8知识点解析:C++中允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同,这就是函数的重载,调用函数时,系统会根据调用函数时给出的信息,即参数的个数、类型查找与之匹配的函数,然后调用该函数。主函数中的输出语句第一个add根据a,b参数类型为整型,调用第一个参数为int类型的add。即输出6。同理第二个add(c,d)调用参数为double型的add函数,输出为8。44、下面程序运行时输出结果为__________。#include#includeclassRect{public:Rect(int1,intw){length=l;width=w;)voidPrint(){cout<<“Area:”<Print();deletep;}标准答案:Area:20知识点解析:此题考查的是内存空间的分配和释放,即free和delcte函数的应用。使用new对某种类型的变量进行动态分配的语法格式为:指针=new类型;使用delete对动态分配的变量进行释放是:delete指针。此题中,首先为变量分配内存单元,然后执行语句p->Print();输出Arca:20,然后利用delete释放内存单元。45、类中数据成员和成员函数的默认访问级别为__________。标准答案:私有或privale知识点解析:此题考查的是类的成员的默认访问权限。在未声明,即默认情况下,类中数据成员和成员函数的默认访问级别为私有。46、有如下程序:#includeusingnamespacestd;classPARENT{public:PARENT(){cout<<“PARENT”;}};classSON:publicPARENT{public:SON(){cout<<“SON”;}};intmain(){SONson;PARENT*p;p=&son;return0:}执行上面程序的输出是__________。标准答案:PARENTSON知识点解析:此题考查的是派生类和基类的构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。SONson;执行时首先调用基类的构造函数,输出“RARENT”,然后调用派生类的构造函数输出“SON”。需要注意的是,语句PARENT*p;只是定义一个PARENT类的指针,并不调用构造函数。47、以下程序的执行结果是__________。#include#includeclassSample{public:intx,y;Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}voiddisp(){cout<<“x=”<标准答案:x=2,y=3知识点解析:此题考查的是构造函数重载。语句Samples1(2,3)调用的类的构造爵数应该是含有两个参数的sample(inta,intb){x=a;y=b;}函数,所以输出的结果是x=2,y=3。48、下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回false。请在横线处填内容,实现该函数。boolfun(char*str){inti=0,j=0;while(str[j])j++;for(j--;i标准答案:>=知识点解析:此题考查的是while循环语句和for循环语句。题中函数的功能是判断字符串是否对称。从字符串两端依次比较各个字符是否相同,for循环结束后,当i>=j表明字符串对称,否则说明不对称。49、若下面程序运行时输出结果为:1,A,10.12,B,3.5请将程序补充完整。#includeusingnamespacestd;intmain(){voidtest(int,char,double__________);test(1,‘A’,10.1);test(2,‘B’);return0:}voidtest(inta,charb,doublec){cout<标准答案:=3.5知识点解析:本题考查了函数默认参数的应用。本题中第一次调用test()函数数值1,A,10.1;第二次调用少了一个实参,却要求输出2,B,3.5,由此分析,应将test()函数的第三个参数声明为默认参数。且默认为3.5,才能达到要求的输出结果。故应填入=3.5或者c=3.5。50、有如下类声明:classMyClass{inti;private:intj;protected:intk;public:intm,n;};其中,私有成员的数量为__________。标准答案:2知识点解析:此题考查的是类的成员的默认访问权限。在默认情况下,类中数据成员和成员函数的默认访问级别为私有,所以类中的私有成员有2个,i和j。国家二级(C++)笔试模拟试卷第3套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、栈和队列的共同特点是A、都是先进先出B、都是先进后出C、只允许在端点处插入和删除元素D、没有共同点标准答案:4知识点解析:栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。2、已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是A、acbedB、decabC、deabcD、cedba标准答案:8知识点解析:依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示。求得该二叉树的前序遍历序列为选项D)。3、链表不具有的特点是A、不必事先估计存储空间B、可随机访问任一元素C、插入删除不需要移动元素D、所需空间与线性表长度成正比标准答案:2知识点解析:链表采用的是链式存储结构,它克服了顺序存储结构的缺点:它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。但是链式存储结构也有不足之处:①每个结点中的指针域需额外占用存储空间;②链式存储结构是一种非随机存储结构。4、结构化程序设计的3种结构是A、顺序结构、选择结构、转移结构B、分支结构、等价结构、循环结构C、多分支结构、赋值结构、等价结构D、顺序结构、选择结构、循环结构标准答案:8知识点解析:顺序结构、选择结构和循环结构(或重复结构)是结构化程序设计的3种基本结构。5、为了提高测试的效率,应该A、随机选取测试数据B、取一切可能的输入数据作为测试数据C、在完成编码以后制定软件的测试计划D、集中对付那些错误群集的程序标准答案:8知识点解析:测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误数成正比。这一现象说明,为了提高测试效率,测试人员应该集中对付那些错误群集的程序。6、算法的时间复杂度是指A、执行算法程序所需要的时间B、算法程序的长度C、算法执行过程中所需要的基本运算次数D、算法程序中的指令条数标准答案:4知识点解析:算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。7、软件生命周期中所花费用最多的阶段是A、详细设计B、软件编码C、软件测试D、软件维护标准答案:8知识点解析:软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。8、数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为A、CB、BasicC、DDLD、DML标准答案:4知识点解析:选项A)、选项B)显然不合题意。数据定义语言(DataDefinitionLanguage,简称DDL)负责数据的模式定义与数据的物理存取构建;数据操纵语言(DataManipulationLanguage,简称DML)负责数据的操纵,包括查询及增、删、改等操作。9、下列有关数据库的描述,正确的是A、数据库是一个DBF文件B、数据库是一个关系C、数据库是一个结构化的数据集合D、数据库是一组文件标准答案:4知识点解析:数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。数据库中的数据具有“集成”、“共享”之特点。10、下列有关数据库的描述,正确的是A、数据处理是将信息转化为数据的过程B、数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C、关系中的每一列称为元组,一个元组就是一个字段D、如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字标准答案:8知识点解析:数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。二、选择题(本题共20题,每题1.0分,共20分。)11、面向对象程序设计将数据和()放在一起,作为一个相互依存、不可分割的整体来处理。A、对数据的操作B、信息C、数据隐藏D、数据抽象标准答案:1知识点解析:面向对象语言包含3个要素,即对象、类和继承。这3个要素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对数据的操作当成一个整体即对象。12、以下选项中,()是合法的字符常量。A、NB、’\010’C、68D、D标准答案:2知识点解析:本题考核字符型常量的表示。选项A中是字符串的表示方法。选项B所表示的是一个转义字符,是特殊的字符常量。选项C中所表示的是整型常量。选项D中不是常量的表示。13、为了避免在嵌套的条件语句if-else中产生二义性,C++语言中规定的if-else匹配原则是()。A、else字句与所排位置相同的if配对B、else子句与其之前最近的if配对C、else子句与其之后最近的if配对D、else子句与同一行上的if配对标准答案:2知识点解析:本题考核if-else语句中if与91se的匹配原则。当多个if…else语句嵌套时,else与哪个if匹配呢?为解决语义上的这种歧义性,C++语言规定,else连接到在同一层中最接近它而又没有其他else语句与之相匹配的if语句。14、有如下数组声明:intvalue[30];下标值引用错误的是()。A、value[30]B、value[0]C、value[10]D、value[20]标准答案:1知识点解析:本题考核对数组的引用。在C++语言中,数组的下标是从0开始的,最大的下标值比所定义的数组长度的值小1。同时需要注意的是,C++语言中,编译和执行时并不检查数组下标是否越界。因此value[30]在编译阶段是正确的,但是在运行时会出现错误。15、下列叙述中,错误的是()。A、一个函数中可以有多条return语句B、调用函数必须在一条独立的语句中完成C、函数可通过return语句返回其函数值D、主函数名main()也可以带形参标准答案:2知识点解析:本题考核函数的基本知识点。当函数有返回值时,调用函数可以作为一个表达式的子表达式,而不是作为一条独立的语句存在。故选项B的说法是错误的。16、下列关于成员访问权限的描述中,不正确的是()。A、公有数据成员和公有成员函数都可以被类对象直接处理B、类的私有数据成员只能被公有成员函数以及该类的任何友元类或友元函数访问C、只有类或派生类的成员函数和友元函数可以访问保护成员D、保护成员在派生类中可以被访问,而私有成员不可以标准答案:2知识点解析:类的私有数据成员也可以被类成员函数访问,不管是公有、私有或是保护成员,所以选项B是错误的,其他选项是正确的。17、下列有关类的说法中,不正确的是()。A、类是一种用户自定义的数据类型B、只有类中的成员函数才能存取类中的私有数据C、在类中,如果不作特别声明,所有数据成员均为私有类型D、在类中,如果不作特别声明,所有成员函数均为私有类型标准答案:2知识点解析:对于类中的私有成员,除了类的成员函数外,类的友元函数和友元类的成员函数也可以访问。18、继承具有(),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。A、规律性B、传递性C、重复性D、多样性标准答案:2知识点解析:在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员。当基类本身也是一个派生类时,它必然包含了它的直接基类成员,这些成员相应地也存在于该基类的派生类中。因此,继承是具有传递性的。19、下面关于虚函数的描述中,正确的是()。A、虚函数是一个静态成员函数B、虚函数是一个非成员函数C、虚函数既可以在函数说明时定义,也可以在函数实现时定义D、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型标准答案:8知识点解析:本题考核虚函数的定义。虚函数是非静态的成员函数。它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方。派生类的虚函数与基类中对应的虚函数必须满足下列条件,否则派生类中的虚函数将丢失其虚函数特性,在调用时进行静态联编:①派生类中的虚函数与基类中的虚函数具有相同的名称。②派生类中的虚函数与基类中的虚函数具有相同的参数个数和相同的对应参数类型。③派生类中的虚函数与基类中的虚函数的返回值,或者相同,或者都返回指针或引用。并且派生类中虚函数所返回的指针或引用的基类型,是基类型中的虚函数所返回的指针或引用的基类型的子类型。20、关于在调用模板函数时实参的使用,下列表述中正确的是()。A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略标准答案:8知识点解析:模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用<和>括起来的参数表)或从模板函数实参表(用()括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表<>也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。由此可知,只有选项D的说法是正确的。21、有以下程序段,其输出的结果是()。intx,y,z;x=y=z=O;++x||++y&&++z;cout<<x<<","<<y<<","<<z<<end1;A、1,1,1B、1,1,0C、1,0,0D、0,0,0标准答案:4知识点解析:本题考查自增运算符和逻辑运算符两个知识点。错误解答:x,y,z都参与逻辑运算++x||++y&&++z;,最后得到x=y=z=1。在正确解答此题前,我们先来看看以下两个表达式:①a++&&b++;②a++||b++;其中:①式中,若a的值为0,表达式先去求a++的值,系统完全可以确定逻辑表达式的运算结果为0,因此跳过b++不再对它进行求值,所以a的值将自增1,由0变成1,而b值将不变。②式中若a值为1,表达式先去求a++的值,由于表达式a++的值为1,无论表达式b++为何值,系统完全可以确定逻辑表达式的运算结果为1,因此也将跳过b++不再对它进行求值,所以b将保持不变。现在我们来看题目,首先我们对++x进行计算,由于开始x值为0,所以++x的值为1,由上述第②点可知“||”后面已不再进行运算了,也就是y,z保持原值不变。所以输出结果应为1,0,0。22、有下列程序段:#include<iostream>usingnamespacestd;intmain(){charb[]="Hello,you";b[5]=0;cout<<b<<end1;return0;}执行此程序后,得到的输出结果是()。A、Hello,youB、Hello0youC、HelloD、0标准答案:4知识点解析:本题考核字符数组的特性。本题表面上看起来很简单,其实不然,出题者在题中隐藏了一个陷阱。常见的错误答案是:字符数组b初始化后,得b[5]=’’,执行“b[5]=0;”后,把0代替b[5]中的’,’即可。最后输出整个字符串“Hello0you”。下面是正确解答:在C++语言中规定:以字符’0’作为字符串结束标志。语句“b[5]=0;”就相当于语句b[5]=’\0’,即在数组b的b[5]加上了字符串结束标志,故执行该语句后,数组中存放的内容变为Hello。23、若有以下程序:#include<iostream>usingnamespacestd;intf(){staticinti=0;ints=1;s+=i;i++;returns;}intmain(){inti,a=0;for(i=0;i<5;i++)a+=f();coutA、20B、24C、25D、15标准答案:8知识点解析:本题考核静态局部变量在函数中的使用。静态局部变量就是将局部变量说明为静态的。静态局部变量既有在局部域作用的特性(即变量只能在变量的作用范围内被访问),又可以永久存在(变量的值得以保留,并可继续使用)。静态局部变量只在第1次执行时初始化一次。在函数f()中定义了一个静态局部变量i,它的初始值为0,还定义了一个局部变量s(它的初始值为1),用来返回计算所得值。函数f()中所进行的数据加工是s+=i和i++。即每调用一次函数f(),返回(i+1)的值后,i的值增1。再看主函数,在主函数中,通过一个for语句连续调用f函数5次,并把每次调用f函数的返回值相加并存入a,最后输出a的值。在了解各函数功能以及调用关系后就可计算出a的值为15。24、有如下类的定义。应在空格处填入的语句是()。classMyClass{______________intx,y;public:MyClass(inta=0,intb=0){x=a;y=b;}staticvoidchange{){x-=10;y-=10;};A、staticB、constC、mutableD、不需要填入内容标准答案:1知识点解析:本题考核静态成员函数的使用。由题可知,函数change()为类MyClass的静态成员函数。先来了解静态成员函数:静态成员函数与静态数据成员相似,也从属于类,只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数的定义前加上关键词static。调用静态成员函数的格式如下:类名::静态成员函数名(参数表);静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。和一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。由静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员可知,变量x和y只能是类MyClass的静态数据成员,所以x和y的定义为“staticintx,y;”。25、若有以下程序:#include<iostream>usingnamespacestd;classpoint{private:intx,y;public:point(){x=0;y=0;}voidsetpoint(intx1,inty1){x=x1;y=y1;A、12,12B、5,5C、12,5D、5,12标准答案:8知识点解析:本题考核对象指针的定义与使用。分析程序:程序首先定义一个类point。类point中有两个私有成员,整型变量x和y,还有两个公有成员函数setpoint(intx1,inty1)和dispoint()。函数setpoint()用来设置私有成员x和y的值,而函数dispoint()用来显示私有成员x和y的值。主函数中,首先定义了类point的指针对象p,并申请了内存空间,然后调用对象p中公有成员setpoint给对象p中的私有成员x和y赋值,然后调用成员函数dispoint显示x和y的值。由此可知,最后输出的值应该是5,12。26、以下程序的执行结果是()。#include<iostream>usingnamespacestd;classsample{private:intx;public:sample(intA){x=a;}frienddoublesquare(samples);};doublesquare(samples){A、20B、30C、900D、400标准答案:4知识点解析:本题考核友元函数的应用。程序中函数square()是类sample的一个友元函数,它可以直接访问类sample的所有成员。它的功能是返回类sa

温馨提示

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

评论

0/150

提交评论