《面向对象技术与语言C++》期中/期末考试卷(A、B)使用专业、班级学号姓名l题数一二三四五六七总分得分一、选择题〖每题1分,共计20分〗1.在C++程序中使用的cin标识符是系统类库中定义的()类中的一个对象。A.istreamB.ostreamC.iostreamD.fstream………………………………………………………………………………………()2.在C++中有以下4条语句:staticinthot=200;int&rad=hot;hot=hot+100;coutradendl;执行这4条语句后输出为:________。A.0B.100C.300D.200………………………………………………………………………………………()3.下列对派生类的描述中错误的说法是:()。A.派生类至少有一个基类B.派生类可作为另一个派生类的基类C.派生类除了包含它直接定义的成员外,还包含其基类的成员D.派生类所继承的基类成员的访问权限保持不变………………………………………………………………………………………()4.当#include后面的文件名用尖括号括起来时,寻找被包含文件的方式是()。A.直接按系统设定的标准方式搜索目录B.先在源程序所在目录搜索,再按系统设定的标准方式搜索目录江南大学考1考试形式开卷()、闭卷(),在选项上打(√)开课教研室命题教师命题时间使用学期sC.仅仅搜索源程序所在目录D.搜索当前逻辑盘上的所有目录………………………………………………………………………………………()5.关于void指针,下列说法正确的是()。A.void指针就是未指向任何数据的指针B.void指针就是已定义而未初始化的指针C.指向任何类型数据的指针可直接赋值给一个void指针D.void指针值可直接赋给一个非void指针………………………………………………………………………………………()6.构造函数不具备的特征的是________A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明………………………………………………………………………………………()7.假定有“structBOOK{chartitle[40];floatprice;};BOOK*book=newBOOK;”,则正确的语句为()。A.strcpy(book-title,”WangTao”);B.strcpy(book.title,”WangTao”);C.strcpy(*book.title,”WangTao”);D.strcpy((*book)-title,”WangTao”);………………………………………………………………………………………()8.编写C++程序一般需经过的几个步骤依次是()。A.编译、编辑、连接、调试B.编辑、编译、连接、调试C.编译、调试、编辑、连接D.编辑、调试、编辑、连接………………………………………………………………………………………()9.关于运算符重载,下列说法正确的是()。A.重载时,运算符的优先级可以改变。B.重载时,运算符的结合性可以改变。C.重载时,运算符的功能可以改变。D.重载时,运算符的操作数个数可以改变。………………………………………………………………………………………()10.假定变量a和pa定义为“doublea[10],*pa=a;”,要将12.35赋值给a中的下标试卷专用纸总张数教研室主任审核签字江南大学考试卷专用纸为5的元素,不正确的语句是()。A.pa[5]=12.35;B.a[5]=12.35;C.*(pa+5)=12.35;D.*(a[0]+5)=12.35;………………………………………………………………………………………()11.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为()。A.px(a)B.px[a]C.px-aD.px.a………………………………………………………………………………………()12.定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为________。A.int*p=newint[30];B.int*p=newint(30);C.int*p=new[30];D.*p=newint[30];………………………………………………………………………………………()13.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为________。A.intAA::a()B.intAA:a()C.AA::a()D.AA::inta()………………………………………………………………………………………()14.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的()。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数………………………………………………………………………………………()15.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的()。A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员………………………………………………………………………………………()16.对于公有继承,基类的公有和保护成员在派生类中将()成员。A.全部变成公有B.全部变成保护C.全部变成私有D.仍然相应保持为公有和保护………………………………………………………………………………………()17.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“A2x(4,5);”语句后,x.a和x.b的值分别为()。A.4和5B.5和4C.4和20D.20和5………………………………………………………………………………………()18.类的静态成员的访问控制()。A.只允许被定义为privateB.只允许被定义为private或protectedC.只允许被定义为publicD.可允许被定义为private、protected或public………………………………………………………………………………………()19.关于虚函数的描述中,()是正确的。A.虚函数是一个static类型的成员函数B.虚函数是一个非成员函数C.基类中说明了虚函数后,派生类中将其对应的函数不必说明为虚函数D.派生类的虚函数和基类的虚函数具有不同的参数个数和类型………………………………………………………………………………………()20.类B是通过public继承方式从类A派生而来的,且类A和类B都有完整的实现代码,那么下列说法正确的是():A.类B中具有pubic可访问性的成员函数个数一定不少于类A中public成员函数的个数。B.一个类B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间。C.只要类B中的构造函数都是public的,在main函数中就可以创建类B的实例对象。D.类A和类B中的同名虚函数的返回值类型必须完全一致。………………………………………………………………………………………()二、填空题〖每空1分,共计10分〗21.在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块__________________。22.若要把类外定义的成员函数规定为内联函数,则必须把________关键字放到函数原型或函数头的前面。江南大学考试卷专用纸23.已知有定义“intx,a[]={5,7,9},*pa=a;”,在执行“x=++*pa;”语句后,x的值是________。24.若有定义“structAA{inta;charb;doublec;}x;”,则x占用空间大小为_______字节。25.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。26.假定指针p指向一个动态分配的类对象,则当执行“deletep;”语句时,在释放p所指向的动态存储空间之前将自动调用该类的____________。27.为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上________关键字。28.假定p所指对象的值为25,p+1所指对象的值为42,则执行*p++运算后,p所指对象的值为________。29.对于类中定义的任何成员,其隐含访问权限为____________________。30.C++中语句constchar*constp=hello;所定义的指针p和它所指的内容都不能被_____________。三、程序填空题〖每空2分,共计24分〗31.在下面程序的横线处填上适当字句,使该程序执行结果为20。#includeiostream.hclassbase{intY;public:______【1】_____//为Y置值_____【2】_____//取Y值};voidmain(){basetest;test.init(20);couttest.Getnum();}332.打印出2至99之间的所有素数(即不能被任何数整除的数)。#includeiostream.h#includemath.hvoidmain(){inti,n;for(n=2;n=99;n++){inttemp=int(sqrt(n));//求出n的平方根并取整for(i=2;_【3】_;i++)if(n%i==0)_【4】_;if(itemp)coutn'';}cout'\n';}32.根据运行结果,完成下面递归程序的填空。#includeiostream.hintf(int*x){if(!(*x==0)){cout*x,;_____【5】_____;∥递归调用;}}main(){intA[]={3,2,1};int*y;y=A;_____【6】______;∥调用f;}运行结果是:3,2,1,江南大学考33.已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[]要对下标是否越界进行检查。classARRAY{int*v;//指向存放数组数据的空间ints;//数组大小public:ARRAY(inta[],intn);~ARRAY(){delete[]v;}intsize(){returns;}int&operator[](intn);};__【7】_operator[](intn)//[]的运算符成员函数定义{if(n0||__【8】_){cerr下标越界!;exit(1);}return__【9】_;}34.已知一个类的定义如下:#includeiostream.hclassAA{inta[10];intn;public:voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,//用nn初始化数据成员nintMaxA();//从数组a中前n个元素中查找最大值voidSortA();//采用选择排序的方法对数组a中前n个元素//进行从小到大排序voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序voidPrintA();//依次输出数组a中的前n个元素};voidAA::SortA(){inti,j;试卷专用纸4for(i=0;_【10】_;i++){intx=a[i],k=i;for(j=i+1;jn;j++)if(a[j]x){_【11】_a[j]=x;__【12】_;}}}四、程序功能题〖每小题8分,共计16分〗35.intf8(constchar*str1,constchar*str2){inti=0;while(str1[i]&&str2[i])//while(str1[i]!=’\0’&&str2[i]!=’\0’)if(str1[i]