面向对象程序设计形成性考核册作业三一、填空题:1.关于面向对象系统分析,下列说法中不正确的是(B)。A.术语“面向对象分析”可以用缩写OOA表示B.面向对象分析阶段对问题域的描述比实现阶段更详细C.面向对象分析包括问题域分析和应用分析两个步骤D.面向对象分析需要识别对象的内部和外部特征2.在关键字public后面定义的成员为类的(B)成员。A.私有B.公用C.保护D.任何3.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(B)。A.x.aB.x.a()C.x-aD.x-a()4.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。A.intAA::a()B.intAA:a()C.AA::a()D.AA::inta()5.在多文件结构的程序中,通常把类的定义单独存放于(D)中。A.主文件B.实现文件C.库文件D.头文件6.一个C++程序文件的扩展名为(C)。A..hB..cC..cppD..cp7.假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为(D)。A.intB.charC.AAD.AA*8.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值(C)。A.已经被改变B.可能被改变C.不变D.受到函数调用的影响9.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为(C)。A.nB.n+1C.n-1D.n-210.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为(D)。A.length+1B.first+lengthC.(first+length-1)%MSD.(first+length)%MS11.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给(C)。A.elemHeadB.elemTailC.elemHead和elemTailD.elemHead或elemTail12.对于一个类的构造函数,其函数名与类名(A)。A.完全相同B.基本相同C.不相同D.无关系13.类的析构函数是一个对象被(B)时自动调用的。A.建立B.撤消C.赋值D.引用14.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的(B)。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数15.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的(D)。A.无参构造函数B.带参构造函数C.赋值重载函数D.拷贝构造函数16.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“Ax(4,5);”语句后,x.a和x.b的值分别为(C)。A.4和5B.5和4C.4和20D.20和517.假定一个类的构造函数为“B(intax,intbx):a(ax),b(bx){}”,执行“Bx(1,2),y(3,4);x=y;”语句序列后x.a的值为(C)。A.1B.2C.3D.418.对于任一个类,用户所能定义的构造函数的个数至多为(D)。A.0B.1C.2D.任意个二、填空题1.若p指向x,则___*p_____与x的表示是等价的。2.假定p为指向二维数组intd[4][6]的指针,则p的类型为__int(*)[6]______。3.若y是x的引用,则对y的操作就是对____x___的操作。4.执行char*p=newchar(’a’)操作后,p所指向的数据对象的值为___’a’_____。5.执行__delete[]p______操作将释放由p所指向的动态分配的数组空间。6.已知语句“couts;”的输出是“apple”,则执行语句“couts+2;”的输出结果为____ple______。7.与结构成员访问表达式p-name等价的表达式是____(*p).name________。8.已知有定义“intx,a[]={5,7,9},*pa=a;”,在执行“x=++*pa;”语句后,x的值是____6____。9.以面向对象方法构造的系统,其基本单位是___对象_______。10.复杂对象可以由简单对象构成,这种现象称为____聚合______。11.如果一个派生类的基类不止一个,则这种继承称为___多继承(或多重继承)_____。12.面向对象软件开发的生命周期分为三个阶段,即分析、___设计_______和____实现______。13.类中的数据成员的访问属性通常被指明为__private(私有)______。14.为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为__private______。15.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个__冒号(::)_____分隔符。16.成员函数的参数表在类作用域中,成员函数的返回值类型___不在_____类作用域中。17.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的___*this_____就代表了类外的x对象。18.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指明_____队列长度_______。19.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则删除一个元素后队首的位置为__(first+1)%MS________。三、程序填空:1.已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[]要对下标是否越界进行检查。classARRAY{int*v;//指向存放数组数据的空间ints;//数组大小public:ARRAY(inta[],intn);~ARRAY(){delete[]v;}intsize(){returns;}int&operator[](intn);};___(1)___operator[](intn)//[]的运算符成员函数定义{if(n0||___(2)___){cerr下标越界!;exit(1);}return___(3)___;}(1)int&ARRAY::(2)n=s(3)v[n]或*(v+n)2.已知一个类的定义如下:#includeiostream.hclassAA{inta[10];intn;public:voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,//用nn初始化数据成员nintMaxA();//从数组a中前n个元素中查找最大值voidSortA();//采用选择排序的方法对数组a中前n个元素//进行从小到大排序voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序voidPrintA();//依次输出数组a中的前n个元素};//该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。int____(1)_____{intx=a[0];for(inti=1;in;i++)if(a[i]x)___(2)___;___(3)___;}(1)AA::MaxA()(2)x=a[i](3)returnx3.已知一个类的定义如下:#includeiostream.hclassAA{inta[10];intn;public:voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,//用nn初始化数据成员nintMaxA();//从数组a中前n个元素中查找最大值voidSortA();//采用选择排序的方法对数组a中前n个元素//进行从小到大排序voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序voidPrintA();//依次输出数组a中的前n个元素//最后输出一个换行};//使用该类的主函数如下:voidmain(){inta[10]={23,78,46,55,62,76,90,25,38,42};AAx;___(1)___;intm=___(2)___;___(3)___;coutmendl;}该程序运行结果为:23784655627678(1)x.SetA(a,6)(2)x.MaxA()(3)x.PrintA()四、写出程序运行结果1.#includeiostream.hvoidmain(){inta[10]={76,83,54,62,40,75,90,92,77,84};intb[4]={60,70,90,101};intc[4]={0};for(inti=0;i10;i++){intj=0;while(a[i]=b[j])j++;c[j]++;}for(i=0;i4;i++)coutc[i]’’;coutendl;}程序运行结果为:2152Pressanykeytocontinue2.#includeiostream.hvoidmain(){chars[3][5]={1234,abcd,+-*/};char*p[3];for(intI=0;I3;I++)p[I]=s[I];for(I=2;I=0;I--)coutp[I]'';coutendl;}程序运行结果为:+-*/abcd1234Pressanykeytocontinue3.#includeiostream.hclassCE{private:inta,b;intgetmax(){return(ab?a:b);}public:intc;voidSetValue(intx1,intx2,intx3){a=x1;b=x2;c=x3;}intGetMax();};intCE::GetMax(){intd=getmax();return(dc?d:c);}voidmain(){intx=5,y=12,z=8;CEex,*ep=&ex;ex.SetValue(x,y,z);coutex.GetMax()endl;ep-SetValue(x+y,y-z,20);coutep-GetMax()endl;}程序运行结果为:1220Pressanykeytocontinue五、指出程序或函数的功能1.voidf4(chara[M][N]){intc1,c2,c3;c1=c2=c3=0;for(inti=0;iM;i++)if(strlen(a[i])5)c1++;elseif(strlen(a[i])=5&&strlen(a[i])15)c2++;elsec3++;coutc1’’c2’’c3endl;}程序或函数的功能为:对于二维字符数组a中保存的M个字符串,分别统计并输出其长度小于5、大于等于5且小于15、大于等于15的字符串个数。2.char*f8(char*str1,constchar*str2){inti=0,j=0;while(str1[i])i++;while(str2[j])str1[i++]=str2[j++];str1[i]='\0';returnstr1;}程序或函数的功能为:实现strcat函数的功能,把str2所指字符串连接到str1所指字符串的后面,并返回str1指针。六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。1.下面程序段第10-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。classA{//1行inta;//2行public://3行A(intaa=0):a(aa){}//4行};//5行classB{//6行inta,b;//7行