C++程序设计模拟试卷(三)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.设有定义inti;doublej=5;,则10+i+j值的数据类型是()A.intB.doubleC.floatD.不确定答案:B解析:考察数据的转换,j是double类型,运算只能作同类型的运算,所以要转换,而int能自动转换为double类型,所以结果是double类型。2.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为()A.constchar*p=“ABCD”;B.char*constp=“ABCD”;C.charconst*p=“ABCD”;D.constchar*constp=“ABCD”;答案:D解析:constchar*p说明禁止通过p修改所指向的数据。char*constp则说明不能修改指针p的地址。因此constchar*constp=“ABCD”;它禁止修改指针p本身,又禁止修改p所指向的数据。3.类的构造函数被自动调用执行的情况是在定义该类的()A.成员函数时B.数据成员时C.对象时D.友元函数时答案:C解析:建立对象时,自动构造函数的初始化对象,是系统自动调用的。而成员函数、友元函数,需要用户直接调用,因此选择C项。4.已知类A是类B的友元,类B是类C的友元,则()A.类A一定是类C的友元B.类C一定是类A的友元C.类C的成员函数可以访问类B的对象的任何成员D.类A的成员函数可以访问类B的对象的任何成员答案:C解析:友元说明方法如下:friend?类名;//友元类类名使用友元可以访问所有成员:(1)友元关系不能被继承。(2)友元关系是单向的,不具有交换性。所以,B项和D项错误。(3)友元关系不具有传递性。所以,A项错误。5.假定一个类的构造函数为“A(inti=4,intj=0){a=i;b=j;}”,则执行“Ax(1);”语句后,x.a和x.b的值分别为()A.1和0B.1和4C.4和0D.4和1答案:A解析:带默认的构造函数,对应实参没有值时就采用形参值。调用构造函数时,i=1,不采用默认值,而只有一个参数,j采用默认值0即j=0,因此a=1,b=0,选择A项。6.关于this指针使用说法正确的是()A.保证每个对象拥有自己的数据成员,但共享处理这些数据的代码B.保证基类私有成员在子类中可以被访问。C.保证基类保护成员在子类中可以被访问。D.保证基类公有成员在子类中可以被访问。答案:A解析:this指针是隐藏的,可以使用该指针来访问调用对象中的数据。基类的成员在派生类中能否访问,与继承方式有关,与this没有关系。所以选择A项。7.所谓多态性是指()A.不同的对象调用不同名称的函数B.不同的对象调用相同名称的函数C.一个对象调用不同名称的函数D.一个对象调用不同名称的对象答案:B解析:多态性有两种静态多态性和动态多态性,静态多态性是指调用同名函数,由于参数的不同调用不同的同名函数;动态多态性是指不同对象调用同名函数时,由于对象不同调用不同的同名函数。多态性肯定具有相同的函数名,所以选择B项。8.友元关系不能()A.提高程序的运行效率B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.继承答案:D解析:友元可以是函数与类的关系即友元函数,也可以类与类的关系即友元类,但友元不能继承,是单向性,且不具有传递性。友元可以访问类中所有成员,提高了访问的方便性。因此选择D项。9.语句ofstreamf(“TEMP.DAT”,ios::app|ios::binary)?的功能是建立流对象f,试图打开文件TEMP.DAT并与之连接,并且()A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件答案:A解析:ios::binary,采用二进制形式,ios::app定位到文件尾部。10.构造函数不具备的特征是()A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明答案:D解析:构造函数无返回类型不能继承但可以重载,所以选择D项。11.在公有继承的情况下,基类的公有或保护成员在派生类中的访问权限()A.受限制B.保持不变C.受保护D.不受保护答案:B解析:继承方式的不同派生类成员的权限也不同,采用公有继承,除了私有无法访问外,公有、保护在派生类中保持不变,所以选择B项。12.假定一个类的构造函数为A(intaa,intbb){a=aa--;b=a*bb;},则执行Ax(4,5);语句后,x.a和x.b的值分别为()A.3和15B.5和4C.4和20D.20和5答案:C解析:a=4,因为后减,b的值与a、bb相关,b=4*5=20,而与aa没有任何关系。13.C++对C语言做了很多改进,即从面向过程变成为面向对象的主要原因是()A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明符必须用原型D.引进了类和对象的概念答案:D解析:C++是一面向对象的语言,面向对象的特征,抽象、多态、继承和封装。14.在类中说明的成员可以使用关键字的是()A.publicB.externC.cpuD.register答案:A解析:extern用于声明外部变量的。register声明寄存器类型变量。无cpu类型。它们都不能声明类成员。public声明为公有访问权限,所以选择A项。15.C++语言中所有在函数中定义的变量,连同形式参数,都属于()A.全局变量B.局部变量C.静态变量D.函数答案:B解析:变量存储类可分为两类:全局变量和局部变量。(1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到源程序结束。使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局变量。(2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到函数结束。局部变量包含自动变量(auto)静态变量(static)以及函数参数。形参不能是静态的。所以选择B项。16.在私有继承的情况下,基类成员在派生类中的访问权限()A.受限制B.保持不变C.受保护D.不受保护答案:A解析:私有继承下,基类中的公有或保护成员在派生类中也是私有的,所以选择A选项。17.使用地址作为实参传给形参,下列说法正确的是()A.实参是形参的备份B.实参与形参无联系C.形参是实参的备份D.实参与形参是同一对象答案:D解析:地址作为实参,表示实参与形参代表同一个对象。如果实参是数值,形参也是普通变量,此时形参是实参的备份。所以选择D项。18.C++的继承性允许派生类继承基类的()A.部分特性,并允许增加新的特性或重定义基类的特性B.部分特性,但不允许增加新的特性或重定义基类的特性C.所有特性,并允许增加新的特性或重定义基类的特性D.所有特性,但不允许增加新的特性或重定义基类的特性答案:A解析:派生类有两类成员:一是基类,二是自身类。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。19.对于int*pa[5];的描述,正确的是()A.pa是一个指向数组的指针,所指向的数组是5个int型元素B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量C.pa[5]表示某个数组的第5个元素的值D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针答案:D解析:指针数组:数组元素都是相同类型的指针,相同类型的指针是说指针所指向的对象类型是相同的。例如,语句int*pa[5];定义了一个指针数组。在指针数组的定义中有两个运算符:*和[],运算符[]的优先级高于*,所以*pa[5]等价于*(pa[5]),pa[5]表示一个数组,而*表示后面的对象为指针变量,合在一起*pa[5]表示一个指针数组。该数组包含5个元素,每个元素都是指向int型的指针。所以选择D选项。20.以下基类中的成员函数表示纯虚函数的是()A.virtualvoidtt()=0B.voidtt(int)=0C.virtualvoidtt(int)D.virtualvoidtt(int){}答案:A解析:当在基类中不能为虚函数给出一个有意义的实现时,可以将其声明为纯虚函数,实现由派生类完成。格式:virtual函数返回类型说明符函数名(参数表)=0;。二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。1.单目运算符作为类成员函数重载时,形参个数为___个。答案:0[解析]单目运算符使用成员函数重载可以不用形参,双目运算符使用一个参数。2.抽象类中至少要有一个___函数。答案:纯虚[解析]至少有一个纯虚函数的类就称为抽象类,即不能实例化。3.设类A有成员函数voidf(void);若要定义一个指向类成员函数的指针变量pf来指向f,该指针变量的声明语句是:___。答案:void(A::*pf)(void)=&A::f;[解析]void(A::*pf)(void)=&A::f;指向成员函数的指针,它相当于两条语句:void(A::*pf)(void);和pf=&A::f;。4.执行下列程序doublea=3.1415926,b=3.14;coutsetprecision(5)a,setprecision(5)bendl;程序的输出结果是___。答案:3.1416,3.14[解析]题目设置精度即有效数字都是5,a四舍五入是3.1416,b是3.14。5.vector类中用于删除向量中的所有对象的方法是___。答案:clear()[解析]向量的使用。返回向量中对象的方法有:front()back()operator[],在向量中删除对象的方法pop_backeraseclear。6.重载的运算符保持其原有的___、优先级和结合性不变。答案:操作数[解析]运算符重载时要遵循以下规则:(1)除了类属关系运算符“.”、成员指针运算符“.*”、作用域运算符“::”、sizeof运算符和三目运算符“?:”以外,C++中的所有运算符都可以重载。(2)重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。(3)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。7.编译时的多态性通过___函数实现。答案:重载[解析]编译多态性,实现的方法主要通过函数的重载或运算符的重载。8.基类的公有成员在派生类中的访问权限由___决定。答案:访问控制方式或继承方式9.假设类X的对象x是类Y的成员对象,则“YObj”语句执行时,先调用类___的构造函数。答案:X[解析]派生类中的构造函数的执行顺序,先基类后派生类。10.下列程序段的输出结果是___。cout.setf(ios::showpos);cout509.3endl;答案:(P193)+509.3[解析]输入、输出格式ios::showpos用于输出数据的符号位。11.下列程序段的输出结果是___。for(i=0,j=10,k=0;i=j;i++,j-=3,k=i+j);coutk;答案:4[解析]for循环结构,三个表达式的作用,初始化、循环判断条件和循环变量变化。循环执行了三次,k的作用是计算i、j的和。12.C++中ostream的直接基类___。答案:ios[解析]istream和ostream的直接基类是ios。13.intn=0;while(n=1)n++;while循环执行次数是___。答案:无限次[解析]=是赋值运算符,不是关系运算符,且不等0,所以死循环。14.C++中有两种继承:单继承和___。答案:多继承[解析]单继承和多继