• 751.50 KB
  • 2022-04-22 11:14:05 发布

《面向对象程序设计c++》综合复习题集及答案详解.doc

  • 106页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《面向对象程序设计》综合复习题集 一、单选题1.C++源程序文件的缺省扩展名为(A)。A.cppB.exeC.objD.lik2.由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。A.cppB.exeC.objD.lik3.由C++目标文件连接而成的可执行文件的缺省扩展名为(B)。A.cppB.exeC.objD.lik4.编写C++程序一般需经过的几个步骤依次是(B)。A.编译、编辑、连接、调试B.编辑、编译、连接、调试C.编译、调试、编辑、连接D.编辑、调试、编辑、连接5.以下标识符中不全是保留字的是B)。A.caseforintB.defaultthenwhileC.boolclasslongD.gotoreturnchar6.能作为C++程序的基本单位是(CADBD)。A.字符B.语句C.函数D.源程序文件7.程序中主函数的名字为(A)。A.mainB.MAINC.MainD.任意标识符8.C++程序的基本模块为(D)。A.表达式B.标识符C.语句D.函数9.可用作C++语言用户标识符的一组标识符是(B)。A.voiddefine+WORDB.a3_b3_123YNC.for-abcCaseD.2aDOsizeof10.存储以下数据,占用存储字节最多的是(D)。A.0B.‘0’C.“0”D.0.011.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用(DCDDC)符号作为分隔符。A.空格或逗号B.逗号或回车C.逗号或分号D.空格或回车12.设”inta=12;”,则执行完语句”a+=a*a;”后,a的值是(C)。A.12B.144C.156D.28813.假设在程序中a、b、c均被定义成整型,所赋的值都大于1,则下列能正确表示代数式1/abc的表达式是(D)。A.1.0/a*b*cB.1/(a*b*c)C.1/a/b/(float)cD.1.0/a/b/c14.设”inta=15,b=26;”,则”cout<<(a,b);”的输出结果是(D)。A.15B.26,15C.15,26D.2615.设x是一个bool型的逻辑量,y的值为10,则表达式x&&y的值为(C)。A.1B.0C.与x值相同D.与x值相反16.x>0&&x<=10的相反表达式为()。A.x<=0||x>10B.x<=0&&x>10C.x<=0||x<=10D.x>0&&x>1017.x>0||y==5的相反表达式为()。A.x<=0||y!=5B.x<=0&&y!=5C.x>0||y!=5D.x>0&&y==5 18.设x和y均为bool量,则x&&y为真的条件是()。A.它们均为真B.其中一个为真C.它们均为假D.其中一个为假19.设x和y均为bool量,则x||y为假的条件是()。A.它们均为真B.其中一个为真C.它们均为假D.其中一个为假20.字符串”a+b=12n”的长度为()。A.6B.7C.8D.921.假定下列x和y均为int型变量,则不正确的赋值为()。A.x+=y++B.x++=y++C.x=++yD.++x=++y22.下列的符号常量定义中,错误的定义是()。A.constM=10;B.constintM=20;C.constcharch;D.constboolmark=true;23.循环语句“for(inti=0;in/2)break;A.n/2B.n/2+1C.n/2-1D.n-125.在下面循环语句中内层循环体S语句的执行总次数为()。for(inti=0;ititle,”WangTao”);B.strcpy(book.title,”WangTao”);C.strcpy(*book.title,”WangTao”);D.strcpy((*book)->title,”WangTao”);86.假定有“structBOOK{chartitle[40];floatprice;};BOOK*book;”,则不正确的语句为()。A.BOOK*x=newbook;B.BOOKx={"C++Programming",27.0};C.BOOK*x=newBOOK;D.BOOK*x=book; 87.假定有“structBOOK{chartitle[40];floatprice;}book;”,则正确的语句为()。A.BOOK&x=&book;B.BOOK&x=book;C.BOOK&x=newBOOK;D.BOOK&x=BOOK;88.下列对引用的陈述中不正确的是()。A.每一个引用都是其所引用对象的别名,因此必须初始化B.形式上针对引用的操作实际上作用于它所引用的对象C.一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行D.不需要单独为引用分配存储空间89.假定变量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;90.假定变量b和pb定义为“intb[10],*pb=b;”,要将24赋值给b[1]元素中,不正确的语句是()。A.*(pb+1)=24;B.*(b+1)=24;C.*++b=24;D.*++pb=24;91.假定指针变量p定义为“int*p=newint(100);”,要释放p所指向的动态内存,应使用语句()。A.deletep;B.delete*p;C.delete&p;D.delete[]p;92.假定指针变量p定义为“int*p=newint[30];”,要释放p所指向的动态内存,应使用语句()。A.deletep;B.delete*p;C.delete&p;D.delete[]p;93.假定变量x定义为“intx=5;”,要使rx成为x的引用(别名),rx应定义为()。A.intrx=x;B.intrx=&x;C.int*rx=&x;D.int&rx=x;94.关于消息,下列说法中不正确的是()。A.发送消息的对象请求服务,接受消息的对象提供服务B.消息的发送者必须了解消息的接收者如何相应消息C.在C++中,消息的发送具体体现为对接收消息的对象的某个函数的调用D.每个对象只能接收某些特定格式的消息95.关于封装,下列说法中不正确的是()。A.通过封装,对象的全部属性和操作结合在一起,形成一个整体B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)C.通过封装,每个对象都成为相对独立的实体D.通过封装,对象的属性都是不可见的96.面向对象方法的多态性是指()。A.一个类可以派生出多个特殊类B.一个对象在不同的运行环境中可以有不同的变体C.针对一消息,不同的对象可以以适合自身的方式加以响应D.一个对象可以是由多个其他对象组合而成的97.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的()。A.可维护性B.可复用性C.兼容性D.正确性98.软件产品可被全部或部分地再用于新的应用的能力叫做软件的()。A.可维护性B.可复用性C.兼容性D.正确性99.软件产品与其他软件产品组合成一个整体的难易程度叫做软件的()。A.可维护性B.可复用性C.兼容性D.正确性 100.软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的()。A.可维护性B.可复用性C.兼容性D.正确性101.面向对象软件开发中使用的OOA表示()。A.面向对象分析B.面向对象设计C.面向对象语言D.面向对象方法102.面向对象软件开发中使用的OOD表示()。A.面向对象分析B.面向对象设计C.面向对象语言D.面向对象方法103.关于面向对象系统分析,下列说法中不正确的是()。A.术语“面向对象分析”可以用缩写OOA表示B.面向对象分析阶段对问题域的描述比实现阶段更详细C.面向对象分析包括问题域分析和应用分析两个步骤D.面向对象分析需要识别对象的内部和外部特征104.在一个类的定义中,包含有()成员的定义。A.数据B.函数C.数据和函数D.数据或函数105.在类作用域中能够通过直接使用该类的()成员名进行访问。A.私有B.公用C.保护D.任何106.在关键字public后面定义的成员为类的()成员。A.私有B.公用C.保护D.任何107.在关键字private后面定义的成员为类的()成员。A.私有B.公用C.保护D.任何108.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为()。A.x(a)B.x[a]C.x->aD.x.a109.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()。A.x.aB.x.a()C.x->aD.x->a()110.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为()。A.px(a)B.px[a]C.px->aD.px.a111.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为()。A.x.aB.x.a()C.x->GetValue()D.x.GetValue()112.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为()。A.intAA::a()B.intAA:a()C.AA::a()D.AA::inta()113.假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为()。A.aB.AA::aC.a()D.AA::a()114.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字()放在函数原型或函数头的前面。A.inB.inlineC.inLineD.InLiner115.在多文件结构的程序中,通常把类的定义单独存放于()中。A.主文件B.实现文件C.库文件D.头文件116.在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于()中。A.主文件B.实现文件C.库文件D.头文件 117.在多文件结构的程序中,通常把含有main()函数的文件称为()。A.主文件B.实现文件C.程序文件D.头文件118.一个C++程序文件的扩展名为()。A..hB..cC..cppD..cp119.在C++程序中使用的cin标识符是系统类库中定义的()类中的一个对象。A.istreamB.ostreamC.iostreamD.fstream120.在C++程序中使用的cout标识符是系统类库中定义的()类中的一个对象。A.istreamB.ostreamC.iostreamD.fstream121.假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为()。A.intB.charC.AAD.AA*122.假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为()。A.abcB.*thisC.thisD.this&123.假定AA是一个类,“AA&abc();”是该类中一个成员函数的原型,若该函数存在对*this赋值的语句,当用x.abc()调用该成员函数后,x的值()。A.已经被改变B.可能被改变C.不变D.不受函数调用的影响124.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值()。A.已经被改变B.可能被改变C.不变D.受到函数调用的影响125.类中定义的成员默认为()访问属性。A.publicB.privateC.protectedD.friend126.结构中定义的成员默认为()访问属性。A.publicB.privateC.protectedD.friend127.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为()。A.nB.n+1C.n-1D.n-2128.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾(即最后一个)元素的位置为()。A.length+1B.first+lengthC.(first+length-1)%MSD.(first+length)%MS129.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为()。A.length+1B.first+lengthC.(first+length-1)%MSD.(first+length)%MS130.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为()。A.first+1B.(first+1)%MSC.(first-1)%MSD.(first+length)%MS131.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给()。A.elemHeadB.elemTailC.elemHead->next和elemHeadD.elemTail->next和elemTail 132.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给()。A.elemHeadB.elemTailC.elemHead和elemTailD.elemHead或elemTail133.队列具有()的操作特性。A.先进先出B.先进后出C.进出无序D.进出任意134.栈具有()的操作特性。A.先进先出B.先进后出C.进出无序D.进出任意135.对于一个类的构造函数,其函数名与类名()。A.完全相同B.基本相同C.不相同D.无关系136.对于一个类的析构函数,其函数名与类名()。A.完全相同B.完全不同C.只相差一个字符D.无关系137.类的构造函数是在定义该类的一个()时被自动调用执行的。A.成员函数B.数据成员C.对象D.友元函数138.类的析构函数是一个对象被()时自动调用的。A.建立B.撤消C.赋值D.引用139.一个类的构造函数通常被定义为该类的()成员。A.公用B.保护C.私有D.友元140.一个类的析构函数通常被定义为该类的()成员。A.私有B.保护C.公用D.友元141.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的()。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数142.假定AB为一个类,则执行“ABx(a,5);”语句时将自动调用该类的()。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数143.假定AB为一个类,则执行“AB*s=newAB(a,5);”语句时得到的一个动态对象为_______。A.sB.s->aC.s.aD.*s144.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的()。A.无参构造函数B.带参构造函数C.赋值重载函数D.拷贝构造函数145.若需要使类中的一个指针成员指向一块动态存储空间,则通常在()函数中完成。A.析构B.构造C.任一成员D.友元146.当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储()个整数。A.nB.n+1C.n-1D.1147.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“Ax(4,5);”语句后,x.a和x.b的值分别为()。A.4和5B.5和4C.4和20D.20和5148.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa;b=bb;}”,则执行“Ax(4);”语句后,x.a和x.b的值分别为()。A.1和0B.1和4C.4和1D.4和0149.假定AB为一个类,则()为该类的拷贝构造函数的原型说明。A.AB(ABx);B.AB(AB&x);C.voidAB(AB&x);D.AB(intx);150.假定一个类的构造函数为“B(intax,intbx):a(ax),b(bx){}”,执行“Bx(1,2),y(3,4);x=y;”语句序列后x.a的值为()。A.1B.2C.3D.4 151.假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为()。A.AB(){a=0;}B.AB(intaa=0):a(aa){}C.AB(intaa):a(aa){}D.AB(){}152.假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为()。A.AB(){}B.AB():a(0){}C.AB(intaa=0){a=aa;}D.AB(intaa){}153.对于任一个类,用户所能定义的构造函数的个数至多为()。A.0B.1C.2D.任意个154.对于任一个类,用户所能定义的析构函数的个数至多为()。A.0B.1C.2D.任意个155.假定AB为一个类,则执行“AB*px=newAB[n];”语句时将()。A.动态分配一个数组B.动态分配一个对象C.静态分配一个数组D.静态分配一个对象156.设px是指向一个类对象的指针变量,则执行“deletepx;”语句时,将自动调用该类的()。A.无参构造函数B.带参构造函数C.析构函数D.拷贝构造函数157.当一个类对象离开它的作用域时,系统自动调用该类的()。A.无参构造函数B.带参构造函数C.拷贝构造函数D.析构函数158.假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为()。A.0B.1C.nD.n-1159.假定AB为一个类,则执行“ABa[10];”语句时调用该类无参构造函数的次数为()。A.0B.1C.9D.10160.假定AB为一个类,则执行“AB*px=newAB[n];”语句时调用该类无参构造函数的次数为()。A.nB.n-1C.1D.0161.假定AB为一个类,则执行“ABa,b(3),*p;”语句时共调用该类构造函数的次数为()。A.2B.3C.4D.5162.假定AB为一个类,则执行“ABa(2),b[3],*p[4];”语句时共调用该类构造函数的次数为()。A.3B.4C.5D.9163.假定AB为一个类,则执行“ABa,b(2),c[3],*p=&a;”语句时共调用该类无参构造函数的次数为()。A.5B.6C.3D.4164.假定AB为一个类,则执行“AB*p=newAB(1,2);”语句时共调用该类构造函数的次数为()。A.0B.1C.2D.3165.假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete[]px;”语句时共调用该类析构函数的次数为()。A.0B.1C.nD.n+1166.对类对象成员的初始化是通过构造函数中给出的()实现的。A.函数体B.初始化表C.参数表D.初始化表或函数体167.对类中常量成员的初始化是通过构造函数中给出的()实现的。A.函数体B.参数表C.初始化表D.初始化表或函数体 168.对类中引用成员的初始化是通过构造函数中给出的()实现的。A.函数体B.参数表C.初始化表D.初始化表或函数体169.类的构造函数可以带有()个参数。A.0B.1C.2D.任意170.类的析构函数可以带有()个参数。A.0B.1C.2D.任意171.一个类的静态数据成员所表示属性()。A.是类的或对象的属性B.只是对象的属性C.只是类的属性D.类和友元的属性172.类的静态成员的访问控制()。A.只允许被定义为privateB.只允许被定义为private或protectedC.只允许被定义为publicD.可允许被定义为private、protected或public173.静态成员函数对类的数据成员访问()。A.是不允许的B.只允许是静态数据成员C.只允许是非静态数据成员D.可允许是静态数据成员或非静态数据成员174.被非静态成员函数访问的类的数据成员()。A.可以是非静态数据成员或静态数据成员B.不可能是类的静态数据成员C.只能是类的非静态数据成员D.只能是类的静态数据成员175.静态数据成员的初始化是在()中进行的。A.构造函数B.任何成员函数C.所属类D.全局区176.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的()。A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员177.引入友元的主要目的是为了()。A.增强数据安全性B.提高程序的可靠性C.提高程序的效率和灵活性D.保证类的封装性178.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明()。A.需加上类域的限定B.不需加上类域的限定C.类域的限定可加可不加D.不需要任何限定179.一个类的友元不是该类的成员,与该类的关系密切,所以它()。A.有this指针,有默认操作的对象B.没有this指针,可以有默认操作的对象C.有this指针,不能执行默认操作D.没有this指针,也就没有默认操作的对象180.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符181.在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。A.0B.1C.2D.3182.双目运算符重载为普通函数时,其参数表中应带有()个参数。A.0B.1C.2D.3183.如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator+(b)B.b.operator+(a) C.operator+(a,b)D.operator(a+b)184.如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator==(b)B.b.operator==(a)C.operator==(a,b)D.operator==(b,a)185.如果表达式a++中的“++”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator++()B.operator++(a)C.operator++(a,1)D.operator++(1,a)186.如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator++(1)B.operator++(a)C.operator++(a,1)D.a.operator++()187.关于运算符重载,下列说法正确的是()。A.重载时,运算符的优先级可以改变。B.重载时,运算符的结合性可以改变。C.重载时,运算符的功能可以改变。D.重载时,运算符的操作数个数可以改变。188.关于运算符重载,下列说法正确的是()。A.所有的运算符都可以重载。B.通过重载,可以使运算符应用于自定义的数据类型。C.通过重载,可以创造原来没有的运算符。D.通过重载,可以改变运算符的优先级。189.一个程序中数组a和变量k定义为“inta[5][10],k;”,且程序中包含有语句“a(2,5)=++k*3;”,则此语句中肯定属于重载操作符的是()。A.()B.=C.++D.*190.假定K是一个类名,并有定义“Kk;intj;”,已知K中重载了操作符(),且语句“j=k(3);”和“k(5)=99;”都能顺利执行,说明该操作符函数的原形只可能是()。A.Koperator()(int);B.intoperator()(int&);C.int&operator()(int);D.K&operator()(int);191.假定M是一个类名,且M中重载了操作符=,可以实现M对象间的连续赋值,如“m1=m2=m3;”。重载操作符=的函数原型最好是()。A.intoperaotor=(M);B.intoperator=(M&);C.Moperator=(M&);D.M&operator=(M);192.下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是()。A.Valueoperator+(Value,Value);B.Valueoperator+(Value,int);C.Value&operator+(Value,Value);D.Value&operator+(Value&,Value&);193.下面是重载双目运算符-的成员函数原形,其中最符合-原来含义的是()。A.ValueValue::operator-(Value);B.ValueValue::operator-(int);C.Value&Value::operator-(Value);D.Value&Value::operator-(Value&);194.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。A.该运算符是一个单目运算符。B.该运算符函数有一个隐含的参数this。C.该运算符函数是类的成员函数。D.该运算符函数是类的友元函数。 195.关于插入运算符<<的重载,下列说法不正确的是()。A.运算符函数的返回值类型是ostream&。B.重载的运算符必须定义为类的成员函数。C.运算符函数的第一个参数的类型是ostream&。D.运算符函数有两个参数。196.从一个基类派生出的各个类的对象之间()。A.共享所有数据成员,每个对象还包含基类的所有属性B.共享部分数据成员,每个对象还包含基类的所有属性C.不共享任何数据成员,但每个对象还包含基类的所有属性D.共享部分数据成员和函数成员197.如果是类B在类A的基础上构造,那么,就称()。A.类A为基类或父类,类B为超类或子类B.类A为基类、父类或超类,类B为派生类或子类C.类A为派生类,类B为基类D.类A为派生类或子类,类B为基类、父类或超类198.C++的继承性允许派生类继承基类的()。A.部分特性,并允许增加新的特性或重定义基类的特性B.部分特性,但不允许增加新的特性或重定义基类的特性C.所有特性,并允许增加新的特性或重定义基类的特性D.所有特性,但不允许增加新的特性或重定义基类的特性199.派生类的成员函数可以直接访问基类的()成员。A.所有B.公有和保护C.保护和私有D.私有200.对于公有继承,基类的公有和保护成员在派生类中将()成员。A.全部变成公有B.全部变成保护C.全部变成私有D.仍然相应保持为公有和保护201.对于公有继承,基类中的私有成员在派生类中将()。A.能够直接使用成员名访问B.能够通过成员运算符访问C.仍然是基类的私有成员D.变为派生类的私有成员202.当保护继承时,基类的()在派生类中成为保护成员,在类作用域外不能够通过派生类的对象来直接访问该成员。A.任何成员B.公有成员和保护成员C.保护成员和私有成员D.私有成员203.在定义一个派生类时,若不使用保留字显式地规定采用何种继承方式,则默认为()方式。A.私有继承B.非私有继承C.保护继承D.公有继承204.建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为()的构造函数。A.自己所属类、对象成员所属类、基类B.对象成员所属类、基类、自己所属类C.基类、对象成员所属类、自己所属类D.基类、自己所属类、对象成员所属类205.当派生类中有和基类一样名字的成员时,一般来说,()。A.将产生二义性B.派生类的同名成员将覆盖基类的成员C.是不能允许的D.基类的同名成员将覆盖派生类的成员206.C++中的虚基类机制可以保证:()。A.限定基类只通过一条路径派生出派生类B.允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类 C.当一个类多次间接从基类派生以后,派生类对象能保留多份间接基类的成员D.当一个类多次间接从基类派生以后,其基类只被一次继承207.下列对派生类的描述中错误的说法是:()。A.派生类至少有一个基类B.派生类可作为另一个派生类的基类C.派生类除了包含它直接定义的成员外,还包含其基类的成员D.派生类所继承的基类成员的访问权限保持不变208.派生类的对象对其基类中()可直接访问。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员二、判断题1.C++中标识符内的大小写字母是没有区别的。(F )2.C++是一种以编译方式实现的高级语言。(T )3.计算函数参数顺序引起的二义性是由不同的编译系统决定的。(T )4.返回值类型、参数个数和类型都相同的函数也可以重载。(F )5.使用关键字class定义的类中缺省的访问权限是私有(private)的。(T )6.类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。(F )7.多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。(F )8.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。(F )9.在私有继承中,基类中所有成员对派生类都是不可见的。(F )10.在保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。(T )11.构造函数可以声明为虚函数。(F )12.在析构函数中调用虚函数时,采用动态束定。(F )13.在一个成员函数内调用一个虚函数时,对该虚函数的调用进行动态束定。(T )14.公有继承可以实现子类型。(T )15.构造函数可以声明为纯虚函数。(F )16.说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。对17.所有的表达式都有值。错18.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。对19.类的静态数据成员需要在定义每个类的对象时进行初始化。错20.基类中被说明为protected和private的成员只能被其派生类的成员函数访问,不能被其它的函数访问。错21.当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。对22.当函数的返回值是数组类型的,传递的是数组第一个元素的地址。错23.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。对24.字符串’hello,world”在内存中存放时,占用11个字节的空间。错25.用new动态申请的内存空间,必须用delete来释放。对26.静态数据成员必须在类外定义和初始化。(√) 27.保护继承时,派生类中的成员函数可以直接访问基类中的protected成员。(√)28.静态成员函数可以引用属于该类的任何函数成员。(×)29.指针常量可以指向相应类型的常量。(√)30.友元函数是在类声明中由关键字friend修饰说明的类的成员函数。(×)31.如果程序中未声明构造函数,则系统自动产生出一个默认形式的构造函数。(√)32.友元函数访问对象中的成员可以不通过对象名(×)33.如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。(√)34.类中的成员数据可以是另一个类的对象。(√)35.常引用做形参,在函数中不能更新所引用的对象。(√)36.虚函数不能是类的静态成员。对37.重定义虚函数的派生类必须是公有继承的。对38.对于从基类继承的虚函数,派生类也可以不进行重定义。对39.纯虚函数与函数体为空的虚函数等价。错40.多态类提供了一种动态多分支派送机制。对41.作为虚函数隐含参数的this指针,决定了虚函数调用时执行的代码。对三、填空题1. C++语言是在_________语言的基础上发展起来的。2. C++语言的编译单位是扩展名为__________的__________文件。3. 行尾使用注释的开始标记符为__________。4. 多行注释的开始标记符和结束标记符分别为__________和__________。5. 用于输出表达式值的标准输出流对象是_________。6. 用于从键盘上为变量输入值的标准输入流对象是________。7. 一个完整程序中必须有一个名为________的函数。8. 一个函数的函数体就是一条_________语句。9. 当执行cin语句时,从键盘上输入每个数据后必须接着输入一个________符,然后才能继续输入下一个数据。10. 在C++程序中包含一个头文件或程序文件的预编译命令为__________。11. 程序中的预处理命令是指以______字符开头的命令。12. 一条表达式语句必须以______作为结束符。13. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是________定义的头文件。14. 使用#include命令可以包含一个头文件,也可以包含一个______文件。15.一个函数定义由________和________两部分组成。16.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。17.C++头文件和源程序文件的扩展名分别为______和______。18.程序文件的编译错误分为________和________两类。19.当使用_______保留字作为函数类型时,该函数不返回任何值。20.当函数参数表用______保留字表示时,则表示该参数表为空。21.从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为______,该函数带有______个参数。22. 当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到________的开始位置。23. 假定x=5,y=6,则表达式x++*++y的值为__________。 24. 假定x=5,y=6,则表达式x--*--y的值为__________。25. 假定x=5,y=6,则执行表达式y*=x++计算后,x和y的值分别为__________和__________。26. 假定x=5,y=6,则执行表达式y+=x--计算后,x和y的值分别为__________和__________。27. C++常数0x145对应的十进制值为__________。28. C++常数0345对应的十进制值为__________。29. 十进制常数245对应的十六进制的C++表示为__________。30. 十进制常数245对应的八进制的C++表示为__________。 31. signed char类型的值域范围是________至__________之间的整数。32. int和float类型的数据分别占用_________和__________个字节。33. float和double类型的数据分别占用_________和________个字节。34. bool和char类型的数据分别占用_________和________个字节。35. unsigned short int和int类型的长度分别为_________和________。36. 字符串”This’s a book.n”的长度为__________。37. 字符串”nThis’s a pennn”的长度为__________。38. 在C++中存储字符串”abcdef”至少需要________个字节。39. 在C++中存储字符串”a+b=c”至少需要________个字节。40. 假定x和y为整型,其值分别为16和5,则xy和x/y的值分别为__________和__________。41. 假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为__________和__________。42. 假定x是一个逻辑量,则x  true的值为__________。43. 假定x是一个逻辑量,则x || true的值为__________。44. 假定x是一个逻辑量,则x  false的值为__________。45. 假定x是一个逻辑量,则x || false的值为__________。46. 假定x是一个逻辑量,则!x || false的值为__________。47. 假定x是一个逻辑量,则x  !x的值为__________。48. 假定x是一个逻辑量,则x || !x的值为__________。49. 数学算式 的C++表达式为________________。50. 数学算式 的C++表达式为________________。51. 数学算式 的C++表达式为________________。52. 设enum Printstatus{ready,busy,error}; 则 cout<name等价的表达式是____________。148. 与结构成员访问表达式(*fp).score等价的表达式是____________。149. 已知变量a定义为“int a=5;”,要使ra成为a的引用,则ra应定义为____________。150. 已知有定义“int x, a[]={5,7,9}, *pa=a;”,在执行“x=++*pa;”语句后,x的值是________。151.已知有定义“int x, a[]={6,10,12}, *pa=a;”,在执行“x=*++pa;”语句后,*pa的值是________。152. 已知有定义“int x, a[]={15,17,19}, *pa=a;”,在执行“x=*pa++;”后,*pa的值是________。153. 以面向对象方法构造的系统,其基本单位是__________。 154. 每个对象都是所属类的一个__________。155. 对象将其大部分实现细节隐藏起来,这种机制称为__________。156. 基类和派生类的关系称为__________。157. 复杂对象可以由简单对象构成,这种现象称为__________。158. 对象是对问题域中客观事物的________,它是一组属性和在这些属性上操作的__________。159. 特殊类的对象拥有其一般类的全部属性与操作,称特殊类________了一般类。160. 如果一个派生类的基类不止一个,则这种继承称为____________。161. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。162. C++支持两种多态性:_________时的多态性和__________时的多态性。163. 在C++中,编译时的多态性是通过__________实现的,而运行时的多态性则是通过__________实现的。164. 面向对象软件开发的生命周期分为三个阶段,即分析、__________和__________。165. 面向对象的分析包括__________分析和__________分析两步。166. 类定义中,既包含数据成员,也包含________成员。167. 类中的数据成员的访问属性通常被指明为________。168. 类中的供外部调用定义的函数成员,其访问属性通常被定义为________。169. 对于类中定义的任何成员,其隐含访问权限为________。170. 对于结构中定义的任何成员,其隐含访问权限为________。171. 为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为________。 172. 若在类的定义体中给出了一个成员函数的完整定义,则该函数属于________函数。173. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。174. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个________分隔符。175. 若要把类外定义的成员函数规定为内联函数,则必须把________关键字放到函数原型或函数头的前面。 176. 把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的____________。177. 假定AA是一个类,“AA* abc();”是该类中一个成员函数的原型,则在类外定义时的函数头为__________________。178. 成员函数的参数表在类作用域中,成员函数的返回值类型________类作用域中。179. 为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上________关键字。180. 若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上________关键字。181. 若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的x对象。182. 若采用p->abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的p指针。 183. 内联函数的定义模块与________模块必须放在同一个文件中。    184.假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,在该函数体中(能够/不能够)__________向*this或其成员赋值。    185.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指明____________。186.  在一个用数组实现的队列类中,包含有两个数据成员,一个指明队列长度,另一个指明__________元素的位置。187. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则插入一个新元素的位置为__________。188. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则删除一个元素后队首的位置为__________。189. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队列为空的条件为__________。190. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队列为满的条件为__________。191. 当一个队列为空时,不能对其做________元素的操作。192. 当一个队列为满时,不能对其做________元素的操作。193.从一个队列中删除元素就是删除________位置上的元素。194.向一个队列中插入元素就是把该元素放到________元素的后一位置上。195.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,_____________指向队首结点的后继(即下一个)结点。196. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,新插入结点的地址应当赋给___________所指结点的next域。197. 在一个用链表实现的队列类中,队尾结点的指针域的值为________。198. 在一个用链表实现的队列类中,若链队中只含有一个结点,则队首指针的值与队尾指针的值________。199. 在一个用链表实现的队列类中,若链队为空或只含有一个结点,则队首指针的值与队尾指针的值________。200. 在一个用链表实现的队列类中,若队首指针与队尾指针的值不同,则说明链队中至少包含有________个结点。201.一个类的__________函数实现对该类对象的初始化功能。202.一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。203.当用户为一个类定义有____________时,则系统不会为该类再自动生成一个默认构造函数。204.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为__________。205.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为__________。206.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。207.在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块__________________。208.为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义____________。209. 假定 AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数为________。210.假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为________。211.对类中对象成员的初始化是通过在构造函数中给出的______________来实现的。212.对类中常量成员的初始化是通过在构造函数中给出的______________来实现的。213.对类中引用成员的初始化只能通过在构造函数中给出的______________来实现。 214.对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的____________来实现。215. 假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为____________。216. 假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为____________。217. 假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为____________________。218. 假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对其进行初始化,则该类的构造函数的定义为____________________。219.假定指针p指向一个动态分配的类对象,则当执行“delete p;”语句时,在释放p所指向的动态存储空间之前将自动调用该类的____________。220.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)_________为该类自动定义一个无参构造函数"AB() {}"。221. 假定用户为类AB定义了一个构造函数“AB(int aa, char *bb=NULL):a(aa),b(bb){}”,则该类中至少包含有__________个数据成员。222.假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,该构造函数实现对数据成员_________的初始化。223.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则定义该类的对象时,可以有________种不同的定义格式。224.假定用户为类AB定义了一个构造函数“AB(int aa):a(aa){}”,则定义该类的对象时,有________种定义格式。225.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,其实参表中至多带有_________个实参。226.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,其实参表中至少带有_________个实参。227.假定用户为类AB定义了一个构造函数“AB(int aa=0, int bb=0) {a=aa; b=bb;}”,则定义该类的对象时,可以有________种不同的定义格式。228.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x();”是_________(正确/错误)的。229.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x;”是_________(正确/错误)的。230.假定用户只为类AB定义了一个构造函数“AB():a(0),b(0){}”,则定义该类对象x的定义语句“AB x(5);”是_________(正确/错误)的。231.假定AB为一个类,则类定义体中的“AB(AB x);”语句为该类______________的原型语句。232.假定AB为一个类,则该类的拷贝构造函数的函数头为_____________。233.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条______________语句。234. 静态成员函数____访问类的静态数据成员, ____访问类的非静态数据成员。235. 静态数据成员必须在所有函数的定义体外进行__________。236. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上__________的限定。237. 重载运算符时,该运算符的__________、结合性以及操作符的个数不允许改变。 238. 一个单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数重载,则有________个参数。239. 一个双单目运算符作为类的成员函数重载时有________个参数;如果作为独立函数重载,则有________个参数。240. 除了__________运算符外,其他重载的运算符都可以被派生类继承。241. 作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有________个操作数。242. 在重载一个单目运算符时,参数表中没有参数,说明该运算符函数只能是类的_____________。243. 重载插入运算符<<时,其运算符函数的返回值类型应当是____________。244. 重载抽取运算符>>时,其运算符函数的返回值类型应当是____________。245. 重载插入运算符<<或抽取运算符>>时,其运算符函数的参数有________个。246. 重载插入运算符<<或抽取运算符>>时,其运算符函数不能被定义为类的________函数。247. 类型转换函数没有____________类型,而且参数表为____________。248. 在一个或若干个类的基础上构造一个新类,被称为___________。249. 派生类的成员函数可以直接访问基类的__________成员,不能直接访问基类的 ______成员。250. 当保护继承时,基类的__________成员在派生类中成为保护成员,派生类对象不能直接访问基类的__________成员。251. 在定义一个派生类时,使用__________关键字或者不显式地使用它则表示为__________继承。252. 若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上______和类区分符。 253. 若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。254. 引进虚基类的根本目的是为了消除____________。255. 在每个成员函数中,隐含的第一个参数的参数名为________。 四、程序填充1.斐波那契数列的第1和第2个数分别为0和1,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。#includevoidmain(){intf,f1,f2,i;cout<<”斐波那契数列:n”;f1=0;f2=1;cout<voidmain(){doublex,p1=1,p2=1,s=0;inti,j=1;cout<<"输入x的值:";cin>>x;for(i=1;i<=10;i++){p1*=___(1)_____;p2*=____(2)____;s+=j*p1/p2;//j的值为(-1)i+1j=____(3)____;}cout<#includevoidmain(){inti,n;for(n=2;___(1)___;n++){inttemp=int(sqrt(n));//求出n的平方根并取整for(i=2;___(2)___;i++)if(n%i==0)___(3)___;if(i>temp)cout<voidmain(){inta,b;cout<<"请输入两个正整数:";cin>>a>>b; while(a<=0||__(1)___){cout<<"重新输入:";cin>>a>>b;}while(b){intr;r=a%b;___(2)___;___(3)___;//分别修改a和b的值}cout<voidmain(){intx;cout<<"请输入一个整数,若小于3则重输:";docin>>x;while(___(1)___);inti=2;do{while(___(2)___){cout<=i&&___(3)___);returnp*a*b;}(1)(2)(3) 7.在输出屏幕上打印出一个由字符’*’组成的等腰三角形,该三角形的高为5行,从上到下每行的字符数依次为1,3,5,7,9。#includevoidmain(){inti,j;for(i=1;___(1)___;i++){for(j=1;j<=9;j++)if(j<=5-i||___(2)___)cout<<’’;else___(3)___;cout<intcount(charstr[]);voidmain(){chars1[80];cout<<”Enteraline:”;cin>>s1;cout<<”count=”<=’a’&&str[i]<=’z’||___(1)___)___(2)___;___(3)___;}(1)(2)(3)9.主函数调用一个fun函数将字符串逆序。#include#include___(1)___;voidmain(){chars[80];cin>>s;___(2)___;cout<<”逆序后的字符串:”<constintlen=20;voiddelstr(chara[],charb[],charc);voidmain(){charstr1[len],str2[len];charch;cout<<"输入一个字符串:";cin>>str1;cout<<"输入一个待删除的字符:";cin>>ch;delstr(str1,str2,ch);cout<constintN=8;voidmain(){inta[N],*p,*q;for(p=a;pvoidmain(){intx;cout<<"输入一个整数:";cin>>x;inta[20],k=0,r;do{r=x%2;a[k++]=r;x=___(1)___;}while(___(2)___);for(--k;k>=0;k--)___(3)___;cout<=0;j--)//为x顺序向前寻找合适的插入位置if(x=0;j--)if(strcmp(p,table[j])<0)___(2)___;elsebreak;table[j+1]=___(3)___;}}(1)(2)(3)17.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。voidf5(NODE*&L,inttable[],intn){if(n<=0){L=NULL;return;}L=newNODE;//生成附加的头结点inti=0;NODE*p=L;while(___(1)___){p=p->next=___(2)___; p->data=___(3)___;i++;}p->next=NULL;//把最后一个结点的指针域置空p=L;L=L->next;//使L指向链表的第一个带值的结点deletep;}(1)(2)(3)18.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。voidf6(NODE*&L,inttable[],intn){L=NULL;if(n<=0)return;inti=0;NODE*p;while(___(1)___){p=newNODE;p->data=___(2)___;p->next=L;___(3)___;i++;}}(1)(2)(3)19.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。voidf7(NODE*L){for(___(1)___;p!=NULL;___(2)___)cout<<___(3)___<<"";cout<next=___(2)___;p=t;}___(3)___;}(1)(2)(3)21.已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[]要对下标是否越界进行检查。classARRAY{int*v;//指向存放数组数据的空间ints;//数组大小public:ARRAY(inta[],intn);~ARRAY(){delete[]v;}intsize(){returns;}int&operator[](intn);};___(1)___operator[](intn)//[]的运算符成员函数定义{if(n<0||___(2)___){cerr<<"下标越界!";exit(1);}return___(3)___;}(1)(2)(3)22.已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。classARRAY{int*v;//指向存放数组数据的空间ints;//数组大小public:ARRAY(inta[],intn);~ARRAY(){delete[]v;}intsize(){returns;}int&operator[](intn);};___(1)___ARRAY(inta[],intn){if(n<=0){v=NULL;s=0;return;}s=n;v=___(2)___;for(inti=0;iclassAA{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;ix)___(2)___;___(3)___;}(1)(2)(3)25.已知一个类的定义如下: #includeclassAA{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;for(i=0;___(1)___;i++){intx=a[i],k=i;for(j=i+1;jclassAA{inta[10];intn;public:voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,//用nn初始化数据成员nintMaxA();//从数组a中前n个元素中查找最大值voidSortA();//采用选择排序的方法对数组a中前n个元素//进行从小到大排序voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序voidPrintA();//依次输出数组a中的前n个元素};void___(1)___{inti,j;for(i=1;i=0;j--)if(xclassAA{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)___;cout<classAA{inta[10];intn;public:voidSetA(intaa[],intnn);//用数组aa初始化数据成员a, //用nn初始化数据成员nintMaxA();//从数组a中前n个元素中查找最大值voidSortA();//采用选择排序的方法对数组a中前n个元素//进行从小到大排序voidPrintA();//依次输出数组a中的前n个元素,//最后输出一个换行};使用该类的主函数如下:voidmain(){inta[10]={23,78,46,55,62,76,90,25,38,42};___(1)___;x.SetA(a,8);int___(2)___;___(3)___;x.PrintA();cout<#includeclassA{int*a;intn;intMaxLen; public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(n>MaxLen)exit(1);___(1)___;//由a指向长度为MaxLen的动态数组for(inti=0;i#includeclassA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(n>MaxLen)exit(1);a=newint[MaxLen];___(1)___;//以i为循环变量把aa数组中每个元素值//传送给a数组的对应元素中}~A();intGetValue(inti){returna[i];}//函数体返回a[i]的值};___(2)___//析构函数的类外定义voidmain(){intb[10]={1,2,3,4,5,6,7,8,9,10};Ar(b,10,10); inti,s=0;___(3)___;//以i为循环变量,把r对象的a数据成员中的//每个元素值依次累加到s中cout<<"s="<#includevoidmain(){inta[8]={25,48,32,85,64,18,48,29};intmax,min;max=min=a[0];for(inti=0;i<8;i++){if(x>a[i])max=a[i];if(xvoidmain(){inta,b;for(a=1,b=2;b<50;){cout<constintM=3,N=4;voidmain() {inti,j,s=0;for(i=1;i<=M;i++)for(j=1;j<=N;j++)s+=i*j;cout<<”s=”<voidmain(){inta=2,b=5,c=0;if(a+b>10)c=a*b;elsec=3*a+b;if(c<=20)cout<voidmain(){intx=5;switch(2*x-3){case4:cout<#includeinta[4]={36,-5,73,8};voidmain(){inti,y;for(i=0;i<4;i++){if(a[i]<0)y=1;elseif(a[i]<10)y=a[i]*a[i]+3;elseif(a[i]<60)y=4*a[i]-5;elsey=int(sqrt(a[i]));//sqrt(x)为取x的平方根函数cout< inta[8]={36,25,20,43,12,70,66,35};voidmain(){ints0,s1,s2;s0=s1=s2=0;for(inti=0;i<8;i++){switch(a[i]%3){case0:s0+=a[i];break;case1:s1+=a[i];break;case2:s2+=a[i];break;}}cout<constintN=5;voidmain(){inti,p=1,s=0;for(i=1;iconstintM=20;voidmain(){intc2,c3,c5;c2=c3=c5=0;for(inti=1;i<=M;i++){if(i%2==0)c2++;if(i%3==0)c3++;if(i%5==0)c5++;}cout<voidmain(){inti,j;for(i=0;i<5;i++){for(j=i;j<5;j++)cout<<’*’; cout<voidmain(){for(inti=1,s=0;i<20;i++){if(i%2==0||i%3==0)continue;cout<constintT=6;voidmain(){inti,j;for(i=1;i<=T;i+=2)for(j=2;j<=T;j+=2){if(i+jvoidmain(){inta,b,c=0;for(a=1;a<4;a++)for(b=6;b>1;b-=2){if((a+b)%2==0)c+=a+b;elsec+=a*b;if(b==2)cout<constintB=2;voidmain(){intp=1,s=1;while(s<50){p*=B;s+=p;}cout<<"s="<voidmain(){intx=24,y=88;inti=2,p=1;do{while(x%i==0&&y%i==0){p*=i;x/=i;y/=i;}i++;}while(x>=i&&y>=i);cout<constintN=3;voidmain(){inta[N][N]={{7,-5,3},{2,8,-6},{1,-4,-2}};intb[N][N]={{3,6,-9},{2,-8,3},{5,-2,-7}};inti,j,c[N][N];for(i=0;iinta=5;voidmain(){intb=a+20;inta=10;cout<intf1(intx,inty){x=x+y;y=x+y;cout<<"x="<voidf2(int&x,int&y){intz=x;x=y;y=z;}voidf3(int*x,int*y){intz=*x;*x=*y;*y=z;}voidmain(){intx=10,y=26;cout<<"x,y="<voidf4(inta[],intn,int&s){s=0;for(inti=0;ivoidmain(){inta[8]={36,25,48,14,55,40,50,24};intb1,b2;b1=b2=a[0];for(inti=1;i<8;i++)if(a[i]>b1){b2=b1;b1=a[i];}elseif(a[i]>b2)b2=a[i];cout<voidmain(){chara[]="abcdabcabfgacd";inti1=0,i2=0,i=0;while(a[i]){if(a[i]==’a’)i1++;if(a[i]==’b’)i2++;i++;}cout<voidmain(){inta[10]={76,83,54,62,40,75,90,92,77,84};intb[4]={60,70,90,101};intc[4]={0};for(inti=0;i<10;i++){intj=0;while(a[i]>=b[j])j++;c[j]++;}for(i=0;i<4;i++)cout<#includevoidmain(){chara[5][10]={"student","worker","soldier","cadre","peasant"}; chars1[10],s2[10];strcpy(s1,a[0]);strcpy(s2,a[0]);for(inti=1;i<5;i++){if(strcmp(a[i],s1)>0)strcpy(s1,a[i]);if(strcmp(a[i],s2)<0)strcpy(s2,a[i]);}cout<constintN=5;voidfun();voidmain(){for(inti=1;ivoidmain(){chars[3][5]={"1234","abcd","+-*/"};char*p[3];for(intI=0;I<3;I++)p[I]=s[I];for(I=2;I>=0;I--)cout<voidmain(){inti,j,len[3];chara[3][8]={"year","month","day"};for(i=0;i<3;i++){for(j=0;j<8;j++)if(a[i][j]==""){len[i]=j;break;}cout<#includeclassCD{char*a;intb;public:voidInit(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}voidOutput(){cout<#includeclassCD{char*a;intb;public:voidInit(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}voidOutput(){cout<classCE{private:inta,b;intgetmax(){return(a>b?a:b);}public:intc;voidSetValue(intx1,intx2,intx3){a=x1;b=x2;c=x3;}intGetMax();};intCE::GetMax(){intd=getmax();return(d>c?d:c);}voidmain(){intx=5,y=12,z=8;CEex,*ep=&ex;ex.SetValue(x,y,z);cout<SetValue(x+y,y-z,20);cout<GetMax()<classCE{private:inta,b;intgetmin(){return(aSetValue(x+y,y-z,10);cout<GetMin()<classFranction{//定义分数类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(){cout<classFranction{//定义分数类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(){cout<#includeclassA{char*a;public:A(char*s){a=newchar[strlen(s)+1];strcpy(a,s);cout<classA{int*a;public:A(intx=0):a(newint(x)){}~A(){deletea;}intgetA(){return*a;}voidsetA(intx){*a=x;}};voidmain(){Ax1,x2(3);A*p=&x2;p->setA(x2.getA()+5);x1.setA(15+x1.getA());cout<classA{inta;public:A(intaa=0):a(aa){cout<classA{inta,b;public:A(){a=b=0;}A(intaa,intbb){a=aa;b=bb;}intSum(){returna+b;}int*Mult(){int*p=newint(a*b);returnp;} };voidmain(){int*k;Ax(2,3),*p;p=newA(4,5);cout<Sum()<<""<<*(k=p->Mult())<classA{inta[10];intn;public:A(intaa[],intnn):n(nn){for(inti=0;iclassA{inta,b;public:A(intaa,intbb){a=aa;b=bb;}floatMultip(charop){switch(op){case"+":returna+b;case"-":returna-b;case"*":returna*b;case"/":if(b!=0)returnfloat(a)/b; else{cout<<"除数为0!"<classPoint{intx,y;public:Point(intx1=0,inty1=0):x(x1),y(y1){cout<<"Point:"<#include classPoint{intx,y;public:Point(intx1=0,inty1=0):x(x1),y(y1){cout<<"Point:"<classDate{public:voidSetDate(inty,intm,intd){Year=y;Month=m;Day=d;}voidPrintDate(){cout<classDate{public:Date(inty=2001,intm=1,intd=1){Year=y;Month=m;Day=d;}voidPrintDate(){cout<classBase{public:Base(inti,intj){x0=i;y0=j;}voidMove(intx,inty){x0+=x;y0+=y;}voidShow(){cout<<"Base("<classPoint{public:voidInitP(floatx0=0,floaty0=0){X=x0;Y=y0;}voidMove(floatxf,floatyf){X+=xf;Y+=yf;}floatGetX(){returnX;}floatGetY(){returnY;}private:floatX,Y;};classRectangle:publicPoint{public:voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}voidZoomR(floatk){W*=k,H*=k;}floatGetH(){returnH;}floatGetW(){returnW;}private:floatW,H;};//**************************test.cpp************************//#include"test.h"voidmain(){Rectanglerect;rect.InitR(10,20,30,40);cout<classBase {public:virtualvoidSet(intb){x=b;}virtualintGet(){returnx;}private:intx;};classDerived:publicBase{public:voidSet(intd){y=d;}intGet(){returny;}private:inty;};//**************************test.cpp************************//#include"test.h"voidmain(){BaseB_obj;DerivedD_obj;Base*p=&B_obj;p->Set(100);cout<<"B_objx="<Get()<Set(200);cout<<"D_objy="<Get()<Base::Set(300);cout<<"B_objx="<Base::Get()<Set(p->Get()+200);cout<<"D_objy="<Get()<voidmain(){inti,s=0;for(i=2;i<=30;i+=2)s+=i*i;cout<<"s="<#include#includevoidmain()加上一句:srand(time(0));则每次执行结果不同{inti=10,a;while(i>0){ a=rand()%100应改为90才生成2位随机数,否则可能是3位数+10;intj,k=int(sqrt(a)+1e-5)可改为:k=ceil(sqrt(a));//sqrt(x)为求x的平方根函数for(j=2;j<=k;j++)if(a%j==0)break;if(j>k){cout<0)cout<doublef1(intn){doublesign=1,s=1;for(inti=2;i<=n;i++){s+=sign/(i*i);sign*=-1;}returns;}voidmain(){inta;cin>>a;cout<#includevoidmain(){intx,y;cin>>x;y=int(sqrt不取平方根产生的因子有重复(x));//sqrt(x)为求x的算术平方根for(inti=1;i<=y;i++)if(x%i==0)cout<<”x=”<voidmain(){inti,p=1,s=0;intN;cout<<"输入一个正整数:";cin>>N;for(i=1;i<=N;i++){p*=i;s+=p;}cout<#include#includeconstN=10;intff(intx,inty){intz;cout<>z;if(x+y==z)return1;elsereturn0;}voidmain(){inta,b,c=0;srand(time(0));//初始化随机数序列for(inti=0;iboolfun8(Ta[],intn,Tkey){for(inti=0;i=sum)cout<=5&&strlen(a[i])<15)c2++;elsec3++;cout<x){x=a[i][j];row=i;col=j;}}15.intfun6(intm,intn,intb=2){if(mstr2[i])return1;elsereturn-1;if(str1[i]==str2[i])return0;elseif(str1[i]>str2[i])return1;elsereturn-1;}18.IntNode*FindMax(IntNode*f){if(!f)returnNULL;IntNode*p=f;f=f->next;while(f){if(f->data>p->data)p=f;f=f->next;}returnp; }假定IntNode的类型定义为:structIntNode{intdata;//结点值域IntNode*next;//结点指针域};19.intCount(IntNode*f){if(!f)return0;intc=0;while(f){c++;f=f->next;}returnc;}假定IntNode的类型定义为:structIntNode{intdata;//结点值域IntNode*next;//结点指针域};20.voidOutput(IntNode*f){if(!f)return;while(f){cout<data<<’’;f=f->next;}cout<>n;while(n<0);if(n==0){f=NULL;return;}f=newIntNode;IntNode*p=f;cout<<”从键盘输入”<next=newIntNode;cin>>p->data;}p->next=NULL;p=f;f=f->next;deletep;}假定IntNode的类型定义为:structIntNode{intdata;//结点值域IntNode*next;//结点指针域};22.intf(constchar*s){inti=0;while(*s++)i++;returni;};23.char*f(char*s){intn=strlen(s);char*r=newchar[n+1];for(inti=0;i="a"&&s[i]<="z")r[i]=s[i]-"a"+"A";elser[i]=s[i];r[n]=’’;returnr;}七、程序改错1.在下面的定义中,NODE是链表结点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的结点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。structNODE{intdata;NODE*next;};NODE*appendToList(NODE*list,intx){//1行NODE*p=newint与NODE类型不匹配;//2行p->data=x;//3行p->next=NULL;//4行if(list==NULL)returnp;//5行NODE*p1=list;//6行while(p1->next!=NULL)p1=p1->next;//7行,链表非空先找到表尾p1应让指针域指向新添加的结点=p;//8行,让原表尾指针指向新添加的结点returnlist;} 错误行的行号为______和________。分别改正为______________和______________。2.在下面的定义中,NODE是链表结点的结构,addToList则是一函数,其功能是:将一个值为x的新结点添加到以plist为表头指针的链表的首部(即第一个结点的前面)并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。structNODE{intdata;NODE*next;};NODE*adndToList(NODE*plist,intx){//1行NODE*p;//2行**只在定义指针及取所指地址的值时出现p=newNODE;//3行p->data=x;//4行p->next=NULL新结点加在表尾才用NULL,加在表头应指向原表头结点;//5行plist=p;//6行returnp;//7行}错误行的行号为______和________。分别改正为______________和______________。3.假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。#includeclassFranction{//定义分数类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(){cout<classFranction{//定义分数类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(){cout<InitFranction(6,15);//5行b.指针应用->InitFranction(3,4);//6行Franctionc;//7行c.InitFranction();//8行c=a.FranAdd(b);//9行cout<classA{//1行inta[10];intn;//2行public://3行A(intaa[],intnn):n(nn){//4行for(inti=0;ims){cout<<"Error!"<ms){cout<<"Error!"<ms){cout<<"Error!"<ms){cout<<"Error!"<ms){cout<<"Error!"<ms){cout<<"Error!"<ms){cout<<"Error!"<x){t=x;x=y;y=t;}}intVariance(){returnx*x-y*y;}//其它函数从略};voidmain(){A_classA_obj(3,5);cout<<"Result:"<voidmain(){inta,b;cout<<"请输入两个正整数:";cin>>a>>b;while(a<=0||b<=0){cout<<"重新输入:";cin>>a>>b;}while(b){intr;r=a%b;______________;______________;//分别修改a和b的值}cout<=0;j--)if(strcmp(p,table[j])<0)table[j+1]=___________;elsebreak;table[j+1]=__________;}} 3.类A的定义classA{char*a;public:A(){a=NULL;}//定义无参构造函数,使a为空指针A(char*aa){a=__________char[strlen(aa)+1];strcpy(a,aa);//用aa所指字符串初始化a所指向的动态存储空间}__________________//定义析构函数,删除a所指向的动态存储空间};4.类Goods的定义class{private:charName[20];//商品名称intWeight;//商品重量staticinttotalWeight;//同类商品总重量public:Goods(char*str,intw){//构造函数strcpy(Name,str);Weight=w;totalWeight+=Weight;}~Goods(){totalWeight-=Weight;}char*GetN(){__________________;}//返回商品名称intGetW(){returnweight;}staticintGetTotalWeight(){//定义静态成员函数返回总重量____________________;}}四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。(每小题6分,共24分)1.#includeconstintT=6;voidmain(){inti,j,k=0;for(i=1;i<=T;i+=2){for(j=2;j<=T;j+=2)k++;}cout<<”k=”<classCE{private:inta,b;intgetmax(){return(a>b?a:b);}public:intc;voidSetValue(intx1,intx2,intx3){a=x1;b=x2;c=x3;}intGetMax();};intCE::GetMax(){intd=getmax();return(d>c?d:c);}voidmain(){intx=5,y=12,z=8;CEex;ex.SetValue(x,y,z);cout<voidmain(){inti,p=1;intN;cout<<"输入一个正整数:";cin>>N;for(i=1;i<=N;i++)p*=i;cout<<”N!=”<ms){cout<<"Error!"<=i&&____________);returnp*a*b;}2.对数组a中的元素按相反次序重新排列。voidPV(inta[],intn){inti;for(i=0;inext;t->next=__________;p=__________;}returnp;}4.类A的定义classA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}//无参构造函数A(int*aa,intnn,intMM){//带参构造函数n=nn;MaxLen=MM;if(n>MaxLen)exit(1);a=newint[MaxLen];for(inti=0;iconstintB=2;voidmain(){intp=1,s=1;while(s<50){p*=B;s+=p;}cout<<"s="<classCE{private:inta,b;intgetmin(){return(aSetValue(x+y,y-z,10);cout<GetMin()<>z;if(x+y==z)return1;elsereturn0;break;case"-":cout<>z;if(x-y==z)return1;elsereturn0;break;case"*":cout<>z;if(x*y==z)return1;elsereturn0;break;case"/":cout<="a"&&s[i]<="z")r[i]=s[i]-"a"+"A";elser[i]=s[i];r[n]=’’;returnr;}函数功能:五、编程题(每小题6分,共12分)1.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。intf(inta[],intn);2.根据下面类中拷贝构造函数的原型写出它的类外定义。classArray{int*a;//指向动态分配的整型数组空间intn;//记录数组长度public:Array(intaa[],intnn);//构造函数,利用aa数组长度nn初始化n,//利用aa数组初始化a所指向的数组空间Array(Array&aa);//拷贝构造函数}; 模拟试题(第三套)一、单项选择题(每小题2分,共20分)1.C++程序的基本功能模块为()。A.表达式B.标识符C.语句D.函数2.当处理特定问题的循环次数已知时,通常采用()来解决。A.for循环B.while循环C.do循环D.switch语句3.下面函数原型语句正确的是()。A.intFunction(voida);B.voidFunction(int);C.intFunction(a);D.int(doublea);4.假定变量m定义为“intm=7;”,则定义变量p的正确语句为()。A.intp=&m;B.int*p=&m;C.int&p=*m;D.int*p=m;5.假定变量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;6.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为()。A.x.aB.x.a()C.x->GetValue()D.x.GetValue()7.类的构造函数是在定义该类的一个()时被自动调用执行的。A.成员函数B.数据成员C.对象D.友元函数8.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的()。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数9.假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为()。A.AB(){a=0;}B.AB(intaa=0):a(aa){}C.AB(intaa):a(aa){}D.AB(){}10.如果表达式a++中的“++”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator++()B.operator++(a)C.operator++(a,1)D.operator++(1,a)二、填空题(每小题2分,共20分)1.存储字符’a’和字符串”a”分别需要占用________和________个字节。2.重载一个函数的条件是:该函数必须在参数的________或参数对应的__________上与其它同名函数不相同。3.假定p是一个指向整数对象的指针,则用________表示该整数对象,用________表示指针变量p的地址。4.元素a[i]和b[i][j]的指针访问方式分别为__________和__________。 5.已知有定义“intx,a[]={5,7,9},*pa=a;”,在执行“x=++*pa;”语句后,x的值是________,*(pa+1)的值为________。6.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队列为空和队列为满的条件分别为__________和__________。7.对类中________和________成员的初始化只能通过在构造函数中给出的初始化表项来实现的。8.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条______________语句。9.假定派生类及其基类中都定义有同名函数成员,若要在派生类中调用基类的同名函数成员时,就需要在其函数名前加上______和__________。10.派生类的成员函数能够直接访问所含基类的__________成员函数和___________成员函数。三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序后面的标号处。(每小题5分,共20分)1.统计字符串中英文字母个数的程序。#includeintcount(charstr[]);voidmain(){chars1[80];cout<<”Enteraline:”;cin>>s1;cout<<”count=”<=’a’&&str[i]<=’z’||___(1)___)___(2)___;___(3)___;}(1)(2)(3)2.对数组a[n]中的n个元素按升序进行的选择排序算法。voidSelectSort(inta[],___(1)___){inti,j,k;for(i=1;iconstintN=3;voidmain(){inta[N][N]={{7,-5,3},{2,8,-6},{1,-4,-2}};intb[N][N]={{3,6,-9},{2,-8,3},{5,-2,-7}};inti,j,c[N][N];for(i=0;i#includeclassA{char*a;public:A(char*s){a=newchar[strlen(s)+1];strcpy(a,s);cout<classA{inta,b;public:A(){a=b=0;}A(intaa,intbb){a=aa;b=bb;}intSum(){returna+b;}int*Mult(){int*p=newint(a*b);returnp;}};voidmain(){ Ax(2,3),*p;p=newA(4,5);cout<Sum()<<’’<<*(p->Mult())<boolfun8(Ta[],intn,Tkey){for(inti=0;iaD.x.a7.假定AB为一个类,则执行“ABx(a,5);”语句时将自动调用该类的()。A.带参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数8.对于任一个类,用户所能定义的析构函数的个数至多为()。A.0B.1C.2D.任意个9.对类中引用成员的初始化是通过构造函数中给出的()实现的。A.函数体B.参数表C.初始化表D.初始化表或函数体10.如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。A.a.operator==(b)B.b.operator==(a)C.operator==(a,b)D.operator==(b,a)二、填空题(每小题2分,共20分)1.常数-4.205和6.7E-9分别具有__________和__________位有效数字。2.元素类型为double的二维数组a[4][6]共有________个元素,共占用________字节的存储空间。3.假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]分别被初始化为_______和________。4.假定p为指向二维数组intd[4][6]的指针,则p的类型为________,其中一个元素d[i][j]表示成指针访问方式为____________。 5.已知变量a定义为“inta=5;”,要使ra成为a的引用,则ra应定义为____________,要使rb指向a,则rb应定义为____________。6.若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上________关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用__________关键字。7.假定一个类对象数组为A[N],当定义该数组时,将自动调用该类的无参构造函数的次数为________次,当离开它的作用域时,将自动调用该类析构函数的次数为________次。8.假定AB为一个类,则类定义体中的“AB(AB&x);”语句为该类______________的原型语句,而“operator=(AB&x);”为该类______________的原型语句。9.在定义一个派生类时,使用__________关键字表示为私有继承,使用__________关键字表示为公有继承。10.重载一个运算符时,该运算符的__________、__________以及操作符的个数不允许改变。三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序后面的标号处。(每小题5分,共20分)1.在输出屏幕上打印出一个由字符’*’组成的等腰三角形,该三角形的高为5行,从上到下每行的字符数依次为1,3,5,7,9。#includevoidmain(){inti,j;for(i=1;___(1)___;i++){for(j=1;j<=9;j++)if(j<=5-i||___(2)___)cout<<’’;else___(3)___;cout<constintlen=20;voiddelstr(chara[],charb[],charc);voidmain(){charstr1[len],str2[len];charch;cout<<"输入一个字符串:";cin>>str1;cout<<"输入一个待删除的字符:";cin>>ch;delstr(str1,str2,ch);cout<constintB=2;voidmain(){intp=1,s=1;while(s<50){p*=B;s+=p;}cout<<"s="<classCE{private:inta,b;intgetmin(){return(aSetValue(x+y,y-z,10);cout<GetMin()<classA{inta[10];intn;public:A(intaa[],intnn):n(nn){for(inti=0;i#include#includeconstintN=10;intff(intx,inty){intz;cout<>z;if(x+y==z)return1;elsereturn0;}voidmain() {inta,b,c=0;srand(time(0));//初始化随机数序列for(inti=0;i="a"&&s[i]<="z")r[i]=s[i]-"a"+"A";elser[i]=s[i];r[n]=’’;returnr;}程序功能:五、编程题(每小题5分,共10分)1.编写一个函数,分别求出由指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素中,该函数的原型如下。voidfun(char*a,intb[]);2.根据下面类中CompareBig函数成员的原型和注释写出它的类外定义。classAA{int*a;intn;intMS;public:voidInitAA(intaa[],intnn,intms){if(nn>ms){cout<<"Error!"<