1面向对象程序设计试题(2)题号一二三四五六七总分1218181812616100得分一、单项选择(每小题1分,共12分)1.设x和y均为bool量,则x||y为假的条件是(C)。A.它们均为真B.其中一个为真C.它们均为假D.其中一个为假2.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为()。A.2B.4C.6D.83.以下错误的描述是()。函数调用可以A.出现在一个表达式中B.出现在执行语句中C.作为一个函数的实参D.作为一个函数的形参4.关于局部变量,下面说法正确的是()。A.定义该变量的程序文件中的函数都可以访问B.定义该变量的函数中的定义处以下的任何语句都可以访问C.定义该变量的复合语句中的定义处以下的任何语句都可以访问D.定义该变量的函数中的定义处以上的任何语句都可以访问5.假定p是具有int**类型的指针变量,则给p赋值的正确语句为()。A.p=newint;B.p=newint*;C.p=newint**;D.p=newint[10];6.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的()。A.可维护性B.可复用性C.兼容性D.正确性7.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字()放在函数原型或函数头的前面。A.inB.inlineC.inLineD.InLiner8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为()。A.length+1B.first+lengthC.(first+length-1)%MSD.(first+length)%MS9.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“Ax(4,5);”语句后,x.a和x.b的值分别为()。A.4和5B.5和4C.4和20D.20和510.假定AB为一个类,则执行“AB*p=newAB(1,2);”语句时共调用该类构造函数的次数为()。A.0B.1C.2D.311.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明()。A.需加上类域的限定B.不需加上类域的限定C.类域的限定可加可不加D.不需要任何限定212.关于插入运算符的重载,下列说法不正确的是()。A.运算符函数的返回值类型是ostream&。B.重载的运算符必须定义为类的成员函数。C.运算符函数的第一个参数的类型是ostream&。D.运算符函数有两个参数。二、填空(每空1分,共14分)1.下一行2.33.23.不停止4.515.代码6.4*i7.H8.单继承9.不能够10.AB(){}11.a12.21.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到____下一行____的开始位置。2.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为____3______和_______3.2___。3.执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时_____不停止___执行。4.strlen(”apple”)的值为___5_____,strcmp(”a”,”A”)的值为_____1___。5.C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和___代码_______区。6.假定a是一个一维指针数组,则a+i所指对象的地址比a大_____.4*i___字节。7.已知语句“coutp;”的输出是“Hello!”,则语句“cout*p;”输出的是______H____。8.如果一个派生类只有一个唯一的基类,则这样的继承关系称为_____单继承_____。9.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,在该函数体中_____不能够_向*this或其成员赋值。10.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为___AB(){}__。11.假定用户为类AB定义了一个构造函数AB(intaa){a=aa;},该构造函数实现对数据成员____a_____的初始化。12.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有___2_____个操作数。三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共24分)1.下面程序计算出1011!)1(iiiix的值。#includeiostream.hvoidmain(){doublex,p1=1,p2=1,s=0;inti,j=1;cout输入x的值:;cinx;for(i=1;i=10;i++){p1*=___(1)_____;(1)x3p2*=____(2)____;(2)is+=j*p1/p2;//j的值为(-1)i+1j=____(3)____;(3)–j}coutsendl;}2.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。voidff(NODE*L){for(___(1)___;p!=NULL;___(2)___)cout___(3)___'';coutendl;}(1)NODE*p=L(2)p=p-next(3)p-data3.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。NODE*f8(NODE*L){if(L==NULL)returnNULL;NODE*p=NULL,*q=L,*t;while(q!=NULL){t=q;q=___(1)___;(1)q-nextt-next=___(2)___;(2)pp=t;}___(3)___;(3)returnp}(1)(2)(3)4.已知一个利用数组实现栈的类定义如下:constintARRAY_SIZE=10;classStack{public:voidInit(){top=-1;}//初始化栈为空voidPush(intnewElem);//向栈中压入一个元素intPop();//从栈顶弹出一个元素boolEmpty(){//判栈空if(top==-1)returntrue;elsereturnfalse;}intDepth(){returntop+1;}//返回栈的深度voidPrint();4//按照后进先出原则依次输出栈中每个元素,直到栈空为止private:intelem[ARRAY_SIZE];//用于保存堆栈元素的数组inttop;//指明栈顶元素位置的指针};该类的Pop和Print函数的实现分别如下:___(1)___{if(top==-1){cout栈空!endl;exit(1);//中止运行}return___(2)___;}voidStack::Print(){while(!Empty())cout___(3)___'';coutendl;}(a)intStack::Pop()(2)(b)elem[top--](c)Pop()四、写出程序运行结果(每小题8分,共16分)1.#includeiostream.hinta[8]={36,25,20,43,12,70,66,35};voidmain(){ints0,s1,s2;s0=s1=s2=0;for(inti=0;i8;i++){switch(a[i]%3){case0:s0+=a[i];break;case1:s1+=a[i];break;case2:s2+=a[i];break;}}couts0’’s1’’s2endl;}1.114138552.abcdef30abcdefxyz5052.#includeiostream.h#includestring.hclassCD{char*a;intb;public:voidInit(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}voidOutput(){couta''bendl;}};voidmain(){CDdx,dy;chara[20];dx.Init(abcdef,30);strcpy(a,dx.Geta());strcat(a,xyz);dy.Init(a,dx.Getb()+20);dx.Output();dy.Output();}五、指出程序或函数的功能(每小题6分,共12分)1.#includeiostream.h#includestdlib.h#includemath.hvoidmain(){inti=10,a;while(i0){a=rand()%90+10;intj,k=int(sqrt(a)+1e-5);//sqrt(x)为求x的平方根函数for(j=2;j=k;j++)if(a%j==0)break;if(jk){couta'';i--;}}}62.voidInput(IntNode*&f){intn;cout”从键盘给n输入一个整数:”;docinn;while(n0);if(n==0){f=NULL;return;}f=newIntNode;IntNode*p=f;cout”从键盘输入”n”个整数:”;while(n--){p=p-next=newIntNode;cinp-data;}p-next=NULL;p=f;f=f-next;deletep;}假定IntNode的类型定义为:structIntNode{intdata;//结点值域IntNode*next;//结点指针域};六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)。假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。#includeiostream.hclassFranction{//定义分数类intnume;//定义分子intdeno;//定义分母public://把*this化简为最简分数,具体定义在另外文件中实现voidFranSimp();//返回两个分数*this和x之和,具体定义在另外文件中实现FranctionFranAdd(constFranction&x);//置分数的分子和分母分别0和1voidInitFranction(){nume=0;deno=1;}//置分数的分子和分母分别n和dvoidInitFranction(intn,intd){nume=n;deno=d;}//输出一个分数voidFranOutput(){coutnume'/'denoendl;}};voidmain()//1行{//2行7Franctiona,b,c;//3行a.InitFranction(6,15);//4行b.InitFranction(1);//5行c.InitFranction();//6行c=FranAdd(a,b);//7行coutc.nume’/’c.denoendl;//8行}//9行错误行的行号为______、________和________。分别改正为____________________、________________和___________________。七、编程(每小题8分,共16分)1.计算1+3+32+...+310的值并输出,假定分