还剩7页未读,继续阅读
文本内容:
面向对象程序设计试题
(2)题号一二三四五六七总分1218181812616100得分
一、单项选择(每小题1分,共12分)1.设x和y均为bool量,则x||y为假的条件是CA.它们均为真B.其中一个为真C.它们均为假D.其中一个为假
2.假定一个二维数组的定义语句为“inta
[3]
[4]={{34}{286}};”,则元素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.InLiner
8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为A.length+1B.first+lengthC.first+length-1%MSD.first+length%MS
9.假定一个类的构造函数为“Aintaaintbb{a=aa;b=aa*bb;}”,则执行“Ax45;”语句后,x.a和x.b的值分别为A.4和5B.5和4C.4和20D.20和
510.假定AB为一个类,则执行“AB*p=newAB12;”语句时共调用该类构造函数的次数为A.0B.1C.2D.
311.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明()A.需加上类域的限定B.不需加上类域的限定C.类域的限定可加可不加D.不需要任何限定
12.关于插入运算符的重载,下列说法不正确的是()A.运算符函数的返回值类型是ostreamB.重载的运算符必须定义为类的成员函数C.运算符函数的第一个参数的类型是ostreamD.运算符函数有两个参数
二、填空(每空1分,共14分)
1.下一行
2.
33.
23.不停止
4.
515.代码
6.4*i
7.H
8.单继承
9.不能够
10.AB{}
11.a
12.
21.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到____下一行____的开始位置
2.假定x和y为整型,其值分别为16和5,则x/y和doublex/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*abcconst;”是该类中一个成员函数的原型,在该函数体中_____不能够_向*this或其成员赋值10.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为___AB{}__11.假定用户为类AB定义了一个构造函数ABintaa{a=aa;},该构造函数实现对数据成员____a_____的初始化
12.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有___2_____个操作数
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共24分)
1.下面程序计算出的值#includeiostream.hvoidmain{doublexp1=1p2=1s=0;intij=1;cout输入x的值:;cinx;fori=1;i=10;i++{p1*=___1_____;1xp2*=____2____;2is+=j*p1/p2;//j的值为-1i+1j=____3____;3–j}coutsendl;}
2.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值voidffNODE*L{for___1___;p!=NULL;___2___cout___3___;coutendl;}1NODE*p=L2p=p-next3p-data
3.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针NODE*f8NODE*L{ifL==NULLreturnNULL;NODE*p=NULL*q=L*t;whileq!=NULL{t=q;q=___1___;1q-nextt-next=___2___;2pp=t;}___3___;3returnp}
1234.已知一个利用数组实现栈的类定义如下constintARRAY_SIZE=10;classStack{public:voidInit{top=-1;}//初始化栈为空voidPushintnewElem;//向栈中压入一个元素intPop;//从栈顶弹出一个元素boolEmpty{//判栈空iftop==-1returntrue;elsereturnfalse;}intDepth{returntop+1;}//返回栈的深度voidPrint;//按照后进先出原则依次输出栈中每个元素,直到栈空为止private:intelem[ARRAY_SIZE];//用于保存堆栈元素的数组inttop;//指明栈顶元素位置的指针};该类的Pop和Print函数的实现分别如下___1___{iftop==-1{cout栈空!endl;exit1;//中止运行}return___2___;}voidStack::Print{while!Emptycout___3___;coutendl;}aintStack::Pop2belem[top--]cPop
四、写出程序运行结果(每小题8分,共16分)
1.#includeiostream.hinta
[8]={3625204312706635};voidmain{ints0s1s2;s0=s1=s2=0;forinti=0;i8;i++{switcha[i]%3{case0:s0+=a[i];break;case1:s1+=a[i];break;case2:s2+=a[i];break;}}couts0’’s1’’s2endl;}
1.
114138552.abcdef30abcdefxyz502.#includeiostream.h#includestring.hclassCD{char*a;intb;public:voidInitchar*aaintbb{a=newchar[strlenaa+1];strcpyaaa;b=bb;}char*Geta{returna;}intGetb{returnb;}voidOutput{coutabendl;}};voidmain{CDdxdy;chara
[20];dx.Initabcdef30;strcpyadx.Geta;strcataxyz;dy.Initadx.Getb+20;dx.Output;dy.Output;}
五、指出程序或函数的功能(每小题6分,共12分)
1.#includeiostream.h#includestdlib.h#includemath.hvoidmain{inti=10a;whilei0{a=rand%90+10;intjk=intsqrta+1e-5;//sqrtx为求x的平方根函数forj=2;j=k;j++ifa%j==0break;ifjk{couta;i--;}}}
2.voidInputIntNode*f{intn;cout”从键盘给n输入一个整数:”;docinn;whilen0;ifn==0{f=NULL;return;}f=newIntNode;IntNode*p=f;cout”从键盘输入”n”个整数:”;whilen--{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之和,具体定义在另外文件中实现FranctionFranAddconstFranctionx;//置分数的分子和分母分别0和1voidInitFranction{nume=0;deno=1;}//置分数的分子和分母分别n和dvoidInitFranctionintnintd{nume=n;deno=d;}//输出一个分数voidFranOutput{coutnume/denoendl;}};voidmain//1行{//2行Franctionabc;//3行a.InitFranction615;//4行b.InitFranction1;//5行c.InitFranction;//6行c=FranAddab;//7行coutc.nume’/’c.denoendl;//8行}//9行错误行的行号为______、________和________分别改正为____________________、________________和___________________
七、编程(每小题8分,共16分)
1.计算1+3+32+...+310的值并输出,假定分别用ips作为循环变量、累乘变量和累加变量的标识符
2.根据下面类中Uion函数的原型和注释写出它的类外定义classArray{int*a;//指向动态分配的整型数组空间intn;//记录数组长度public:Arrayintaa[]intnn;//构造函数,利用aa数组长度nn初始化n,//利用aa数组初始化a所指向的数组空间ArrayArrayaa;//拷贝构造函数ArrayGiveArrayaa;//实现aa赋值给*this的功能并返回*thisArrayUionArrayaa;//实现*this和aa中的数组合并的功能,把合并//结果其长度为两数组长度之和存入临时对象并返回intLenth{returnn;}//返回数组长度voidPrint{//输出数组forinti=0;in;i++couta[i];coutendl;}};向对象程序设计试题2答案及评分标准(供参考)
一、单项选择(每小题1分,共12分)
1.C
2.C
3.D
4.C
5.B
6.A
7.B
8.D
9.C
10.B
11.A
12.B
二、填空(每空1分,共14分)
1.下一行
2.
33.
23.不停止
4.
515.代码
6.4*i
7.H
8.单继承
9.不能够
10.AB{}
11.a
12.2
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共24分)
1.1x//2分2i//2分3–j//2分
2.1NODE*p=L//2分2p=p-next//2分3p-data//2分3.1q-next//2分2p//2分3returnp//2分
4.aintStack::Pop//2分belem[top--]//2分cPop//2分
四、写出程序运行结果(每小题8分,共16分)
1.11413855//每个数据占3分,全对给8分
2.abcdef30//4分,每个数据2分abcdefxyz50//4分,每个数据2分
五、指出程序或函数的功能(每小题6分,共12分)1.随机产生出10个10至100(或99)之间的素数并显示出来2.首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表评分标准根据叙述情况酌情给分
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)错误行的行号为578分别改正为b.InitFranction13;c=a.FranAddb;c.FranOutput评分标准共6个数据,每个数据1分
七、编程(每小题8分,共16分)评分标准根据编程情况酌情给分
1.#includeiostream.hvoidmain{inti;//用i作为循环变量intp=1;//用p作为累乘变量ints=1;//用s作为累加循环变量fori=1;i=10;i++{p*=3;s+=p;}coutsendl;}
2.ArrayArray::UionArrayaa{intk=n+aa.n;int*w=newint[k];inti;fori=0;in;i++w[i]=a[i];fori=0;iaa.n;i++w[i+n]=aa.a[i];Arrayrwk;returnr;}。