手机贴吧微信发不出图片什么情况去图片怎么个情况

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
C++语言程序设计教程 第2版
习题答案 作者 吕凤翥 王树彬 习题解答11 13.doc22页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
第11章 模板
11.1 判断题
√ 1. 使用模板的目的是为了避免重复性劳动。
× 2. 函数模板是一个实实在在的函数,编译系统会产生执行代码。
√ 3. 由函数模板中参数化的类型被替换后所生成的函数被称为模板函数。
√ 4. 函数模板中参数化的类型可以用任何一种类型代替。
√ 5. C++中的模板分为函数模板和类模板两种。
√ 6. 模板类是类模板的实例化。
× 7. 模板类在程序中不可以定义对象,或者说明函数的参数或返回值。
√ 8. 类模板的对象或对象引用可以用来作为函数的参数
√ 9. 类模板作为基类可生成派生的类模板。
× 10. 类模板不能被继承,但可以继承。
× 11. 如果类模板的模板类型参数有多个,除第1个模板类型参数前使用关键字class,其余的模板类型参数前都不使用关键字class。
√ 12. 定义类模板至少要确定一个模板类型参数。
1. 在下列函数模板的定义中,正确的是
A. template
class T, S B. template
class T, typename S
void fun T, S ; T fun T, S ;
C. template D. template
class T, class T
void fun T ; T fun T,
2.已定义的函数模板如下:
template T max T a,T b return a b ? a:b; 下列描述中,
是错误的。
A. 该函数模板只有一个模板类型参数
B. 该函数模板生成的模板函数中其参数和返回值的类型必须相同
C. 该函数模板生成的模板函数中,其参数和返回值类型可以不同
D. T类型所规定的类型范围对运算符“ ”操作必须有定义
3. 在2题所定义的函数模板中,生成下列模板函数,
是错误的。
max int, int B.
max double, double
max char, char D.
max int, double
4. 关于函数模板,描述错误的是( A )。
A. 函数模板必须由程序员实例化为可执行的函数模板
B. 函数模板的实
正在加载中,请稍后...《C++程序设计上机指导与习题解答》(邵兰洁,徐海云)【摘要_书评_试读】- 蔚蓝网
共有图书3009124种
顾客评分:
已有0人评论
字数:暂无&&&&&
页数:240&&&&&
开本:16开&&&&&
包装:平装
程序设计是一门实践性很强的课程,任何一门程序设计课程,不上机实践是不可能学好的。本教材是邵兰洁主编的《C++程序设计》(北京邮电大学出版社出版)的配套教材。共分4部分,第1部分是上机指导,设计了10个实验,实验1介绍C++编程环境,给出了基于Visual C++6.0的编程和程序运行方法,以帮助读者迅速掌握编程环境。除实验1外,其余9个实验都是每一个实验对应教材的一章,针对每一章的知识点,精心设计每个实验的内容。通过实验,不仅可以使读者进一步巩固所学知识,更重要的是让读者通过实验编程逐步掌握c++编程技巧。第2部分是教材习题答案,给出了主教材的习题参考答案。第3部分是补充习题,该部分是对原教材的有益补充和丰富,侧重对C++基本知识点的练习。第4部分是自测题,提供了2套自测题,给出了参考答案,可供读者自测。  《普通高等学校计算机科学与技术应用型规划教材:C++程序设计上机指导与习题解答》既可作为高等院校计算机及相关专业本科生学习C++面向对象程序设计的实践环节教材,也可作为广大C++编程爱好者的编程训练指导参考书。
第1部分 上机指导实验1 Visual C++6.0上机操作实验2 C++对C的扩充实验3 类和对象实验4 继承与组合实验5 多态性与虚函数实验6 面向对象的妥协实验7 运算符重载实验8 模板实验9 输入/输出流(自学)实验10 异常处理(自学)第2部分 教材习题解答第1章 面向对象程序设计概述第2章 C++基础知识第3章 类和对象第4章 继承与组合第5章 多态性与虚函数第6章 面向对象的妥协第7章 运算符重载第8章 模板第9章 输入/输出流第10章 异常处理第3部分 补充习题第1章 面向对象程序设计概述第2章 C++基础知识第3章 类和对象第4章 继承与组合第5章 多态性与虚函数第6章 面向对象的妥协第7章 运算符重载第8章 模板第9章 输入/输出流第10章 异常处理第4部分 自测题自测题1自测题2附录 C++程序编码风格参考文献
摘要与插图
1.(9分)【答案要点】  (1)从认识论的角度看,面向对象程序设计改变了软件开发的方式。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。  (2)面向对象程序中的数据的安全性高。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。  (3)面向对象程序设计有助于软件的维护与复用。某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动。面向对象程序设计中类的继承机制有效解决了代码复用的问题。人们可以像使用集成电路(IC)构造计算机硬件那样,比较方便地重用对象类,来构造软件系统。  2.(8分)【答案要点】  基类对象和其公共派生类对象之间的赋值兼容关系包括:  (1)派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。  (2)可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新成员。同样也不能反过来做。  (3)派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的成员。  3.(8分)【答案要点】  我们总是要求将类设计成通用的,无论其他程序员怎样调用都必须保证不出错。针对在基类及其派生类中都有动态分配内存的情况,就需要把析构函数定义为虚函数,实现撤消对象时的多态性。因为根据基类对象和其公共派生类对象之间的赋值兼容关系,我们可以用基类的指针指向派生类对象,如果由该指针撤销派生类对象,则需要将析构函数声明为虚函数,才能实现多态性,让系统自动调用派生类的析构函数,所以析构函数通常要声明为虚函数。   ……
0人参与评分
很好(5星,4星):
一般(3星,2星):
不推荐(1星):&&&
写购物评价,赢购物积分,可换购物券!好书不要私藏哦,分享给别人吧!
温馨提示:由于每位咨询者提问时间及蔚蓝网促销等不同原因,以下回复仅对提问者3天内有效,其他网友仅供参考!
1件商品成功放入购物车
购物车共件商品,商品金额合计¥97.10
购物车中已有该商品
非常报歉,本商品没有库存暂时无法购买,如果您仍需要该图书
请输入邮箱做缺货登记,到货后我们会给您发邮件通知。
非常抱歉,您购买的数量超过库存,当前最多可买303件,请您修改。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
C++语言程序设计第四版(郑莉)答案
下载积分:0
内容提示:C++语言程序设计第四版(郑莉)答案
文档格式:PDF|
浏览次数:1170|
上传日期: 20:44:44|
文档星级:
全文阅读已结束,此文档不支持下载
该用户还上传了这些文档
C++语言程序设计第四版(郑莉)答案
官方公共微信您当前的位置:&&&&&正文
C++语言程序设计试题及答案_计算机二级
C++语言程序设计试题及答案
一、单项选择题
&&& 1. 面向对象软件开发中使用的OOA表示( 面向对象分析)。
&&&&&&& A. 面向对象分析&&& B. 面向对象设计&&&
&&&&&&& C. 面向对象语言&&& D. 面向对象方法
&&& 2. 面向对象软件开发中使用的OOD表示(&& 面向对象设计)。
&&&&&&& A. 面向对象分析&&& B. 面向对象设计&&&
&&&&&&& C. 面向对象语言&&& D. 面向对象方法
&&& 3. 关于面向对象系统分析,下列说法中不正确的是(&& 面向对象分析阶段对问题域的描述比实现阶段更详细
&&&&&&& A. 术语&面向对象分析&可以用缩写OOA表示
&&&&&&& B. 面向对象分析阶段对问题域的描述比实现阶段更详细
&&&&&&& C. 面向对象分析包括问题域分析和应用分析两个步骤
&&&&&&& D. 面向对象分析需要识别对象的内部和外部特征
&&& 4. 在一个类的定义中,包含有(数据和函数& )成员的定义。
&&&&&&& A. 数据&&&&& B. 函数&&&&& C. 数据和函数&&&&& D. 数据或函数
&&& 5. 在类作用域中能够通过直接使用该类的(任何)成员名进行访问。
&&&&&&& A. 私有&&&&& B. 公用&&&&& C. 保护&&&&& D. 任何
&&& 6. 在关键字public后面定义的成员为类的(公用)成员。
&&&&&&& A. 私有&&&&& B.公用&&&& C. 保护&&&&& D. 任何
&&& 7. 在关键字private后面定义的成员为类的(私有)成员。
&&&&&&& A. 私有&&&&& B. 公用&&&&& C. 保护&&&&& D. 任何
8. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(x.a&& )。
&&&&&&& A. x(a)&&&&& B. x[a]&&&&& C. x-&a&&&&& D. x.a
9. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(x-&a() )。
&&&&&&& A. x.a&&&&& B. x.a()&&&&& C. x-&a&&&&& D. x-&a()
10. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为(px-&a )。
&&&&&&& A. px(a)&&&&& B. px[a]&&&&& C. px-&a&&&&& D. px.a
11. 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(x.GetValue()
&&&&&&& A. x.a&&&&& B. x.a()&&&&& C. x-&GetValue()&&&&& D. x.GetValue()
&&& 12. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(int AA::a()&&&& )。
&&&&&&& A. int AA::a()&&&&& B. int AA:a()
&&&&&&& C. AA::a()&&&&&&&&& D. AA::int a()
&&& 13. 假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为( a )。
&&&&&&& A. a&&&&& B. AA::a&&&&& C. a()&&&&& D. AA::a()
&&& 14. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字(inline& )放在函数原型或函数头的前面。
&&&&&&& A. in&&&&& B. inline&&&&& C. inLine&&&&& D. InLiner
&&& 15. 在多文件结构的程序中,通常把类的定义单独存放于(头文件
&&&&&&& A. 主文件&&&&& B. 实现文件&&&&& C. 库文件&&&&& D. 头文件
&&& 16. 在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于(实现文件& )中。
&&&&&&& A. 主文件&&&&& B. 实现文件&&&&& C. 库文件&&&&& D. 头文件
&&& 17. 在多文件结构的程序中,通常把含有main()函数的文件称为(主文件)。
&&&&&&& A. 主文件&&&&& B. 实现文件&&&&& C. 程序文件&&&&& D. 头文件
&&& 18. 一个C++程序文件的扩展名为(.cpp& )。
&&&&&&& A. .h&&&&& B. .c&&&&& C. .cpp&&&&& D. .cp
&&& 19. 在C++程序中使用的cin标识符是系统类库中定义的(istream&& )类中的一个对象。
&&&&&&& A. istream&&&&& B. ostream&&&&& C. iostream&&&&& D. fstream
&&& 20. 在C++程序中使用的cout标识符是系统类库中定义的(ostream& )类中的一个对象。
&&&&&&& A. istream&&&&& B. ostream&&&&& C. iostream&&&&& D. fstream
&&& 21. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为(AA*&& )。
&&&&&&& A. int&&&&& B. char&&&&& C. AA&&&&& D. AA*
&&& 22. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为(& this& )。
&&&&&&& A. abc&&&&& B. *this&&&&& C. this&&&&& D. this&
&&& 23. 假定AA是一个类,&AA& abc();&是该类中一个成员函数的原型,若该函数存在对*this赋值的语句,当用x.abc()调用该成员函数后,x的值(已经被改变& )。
&&&&&&& A. 已经被改变&&&&&& B. 可能被改变
&&&&&&& C. 不变&&&&&&&&&&&& D.不受函数调用的影响
&&& 24. 假定AA是一个类,&AA* abc()&是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值(不变&&& )。
&&&&&&& A. 已经被改变&&&&&& B. 可能被改变
&&&&&&& C. 不变&&&&&&&&&&&& D. 受到函数调用的影响
&&& 25. 类中定义的成员默认为(private&& )访问属性。
&&&&&&& A. public&&&&& B. private&&&&& C. protected&&&&& D. friend
&&& 26. 结构中定义的成员默认为(public&& )访问属性。
&&&&&&& A. public&&&&& B. private&&&&& C. protected&&&&& D. friend
&&& 27. 当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为(n-1& )。
&&&&&&& A. n&&&&& B. n+1&&&&& C. n-1&&&&& D. n-2
&&& 28. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾(即最后一个)元素的位置为((first+length-1)%MS&& )。
&&&&&&& A. length+1&&&&&&&&&&&&&&&&& B. first+length
&&&&&&& C. (first+length-1)%MS&&&&&& D. (first+length)%MS
&&& 29. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为((first+length)%MS& )。
&&&&&&& A. length+1&&&&&&&&&&&&&&&&& B. first+length
&&&&&&& C. (first+length-1)%MS&&&&&& D. (first+length)%MS
&&& 30. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为((first+1)%MS& )。
&&&&&&& A. first+1&&&&&&&&&&& B. (first+1)%MS
&&&&&&& C. (first-1)%MS&&&&&& D. (first+length)%MS
&&& 31. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给(elemTail-&next和elemTail& )。
&&&&&&& A. elemHead&&&&&&&&&&&&&&&&&&&&& B. elemTail
&&&&&&& C. elemHead-&next和elemHead&&&& D. elemTail-&next和elemTail
&&& 32. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给(& elemHead和elemTail& )。
&&&&&&& A. elemHead&&&&&&&&&&&&&&& B. elemTail
&&&&&&& C. elemHead和elemTail&&&& D. elemHead或elemTail
&&& 33. 队列具有(先进先出& )的操作特性。
&&&&&&& A. 先进先出&&&&& B. 先进后出&&&&& C. 进出无序&&&&& D. 进出任意
&&& 34. 栈具有(先进后出& )的操作特性。
&&&&&&& A. 先进先出&&&&& B. 先进后出&&&&& C. 进出无序&&&&& D. 进出任意
&&& 35. 对于一个类的构造函数,其函数名与类名(& 完全相同& )。
&&&&&&& A. 完全相同&&&&& B. 基本相同&&&&& C. 不相同&&&&& D. 无关系
&&& 36. 对于一个类的析构函数,其函数名与类名(只相差一个字符&& )。
&&&&&&& A. 完全相同&&&&& B. 完全不同&&&&& C. ?相差一个字符&&&&& D. 无关系
&&& 37. 类的构造函数是在定义该类的一个(& 对象& )时被自动调用执行的。
&&&&&&& A. 成员函数&&&&& B. 数据成员&&&&& C. 对象&&&&& D. 友元函数
&&& 38. 类的析构函数是一个对象被(撤消&& )时自动调用的。
&&&&&&& A. 建立&&&&& B. 撤消&&&&& C. 赋值&&&&&&& D. 引用
&&& 39. 一个类的构造函数通常被定义为该类的(& 公用& )成员。
&&&&&&& A. 公用&&&&& B. 保护&&&&& C. 私有&&&&& D. 友元
&&& 40. 一个类的析构函数通常被定义为该类的(& 公用& )成员。
&&&&&&& A. 私有&&&&& B. 保护&&&&& C. 公用&&&&& D. 友元
&&& 41. 假定AB为一个类,则执行 &AB&语句时将自动调用该类的(& 带参构造函数& )。
&&&&&&& A. 带参构造函数& B. 无参构造函数&& C. 拷贝构造函数&& D. 赋值重载函数
&&& 42. 假定AB为一个类,则执行 &AB x(a,5);&语句时将自动调用该类的(& 带参构造函数& )。
&&&&&&& A. 带参构造函数& B. 无参构造函数&& C. 拷贝构造函数&& D. 赋值重载函数
&&& 43. 假定AB为一个类,则执行 &AB *s=new AB(a,5);&语句时得到的一个动态对象为___*s ____。
&&&&&&& A. s&&&&&&& B. s-&a&&&&&&& C. s.a&&&&&&& D. *s
&&& 44. 假定AB为一个类,则执行 &AB r1=r2;&语句时将自动调用该类的(拷贝构造函数&& )。
&&&&&&& A. 无参构造函数& B. 带参构造函数&& C. 赋值重载函数&& D. 拷贝构造函数
&&& 45. 若需要使类中的一个指针成员指向一块动态存储空间,则通常在(& 构造& )函数中完成。
&&&&&&& A. 析构&&&&& B. 构造&&&&& C. 任一成员&&&&& D. 友元
&&& 46. 当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( n&& )个整数。
&&&&&&& A. n&&&&&&&& B. n+1&&&&&& C. n-1&&&&& D. 1
&&& 47. 假定一个类的构造函数为 &A(int aa, int bb) {a= b=aa*}&,则执行 &A& x(4,5);&语句后,x.a和x.b的值分别为(4和20&&&&& )。
&&&&&&& A. 4和5&&&& B. 5和4&&&&& C. 4和20&&&&& D. 20和5
&&& 48. 假定一个类的构造函数为 &A(int aa=1, int bb=0) {a= b=}&,则执行 &A x(4);&语句后,x.a和x.b的值分别为(&& 4和0 )。
&&&&&&& A. 1和0&&&& B. 1和4&&&&& C. 4和1&&&&&& D. 4和0
&&& 49. 假定AB为一个类,则(AB(AB& x)&& )为该类的拷贝构造函数的原型说明。
&&&&&&& A. AB(AB x);&&& B. AB(AB& x);&&&& C. void AB(AB& x);&&&& D. AB(int x);
&&& 50. 假定一个类的构造函数为 &B(int ax, int bx): a(ax), b(bx) {}&,执行 &B x(1,2),y(3,4);x=y;&语句序列后x.a的值为( 3&& )。
&&&&&&& A. 1&&&&& B. 2&&&&& C. 3&&&&& D. 4
&&& 1.假定a是一个一维指针数组,则a+i所指对象的地址比a大4*i字节。
&&& 2. 假定a是一个一维数组,则a[i]的指针访问方式为___ *(a+i)&& _____。
&&& 3. 假定a是一个一维数组,则a[i]对应的存储地址(以字节为单位)为___ a+i*sizeof(a[i])_________。
&&& 4. 一个数组的数组名实际上是指向该数组__第一个______元素的指针,并且在任何时候都不允许___修改_____它。
&&& 5. 假定指向一维数组b中元素b[4]的指针为p,则p+3所指向的元素为_ b[7]______,p-2所指向的元素为___ b[2]_____。
&&& 6.若要定义整型指针p并初始指向x,则所使用的定义语句为___ int *p=&x _____。
&&& 7. 若p指向x,则__*p ______与x的表示是等价的。
&&& 8. 在一个二维数组int a[m][n]中,包含的一维元素a[i]的类型为__ int[n]______,访问a[i]时返回值的类型为__ int * ______。
&&& 9. 假定一个二维数组为c[5][8],则c[3]的值为二维元素__ c[3][0]______的地址,c[3]+2的值为二维元素___ c[3][2] _____的地址。
&&& 10. 假定p为指向二维数组int d[4][6]的指针,则p的类型为____ int(*)[6]____。
&&& 11. 假定a是一个二维数组,则a[i][j]的指针访问方式为___ *(a[i]+j) 或*(*(a+i)+j)或*(a+i)[j] _________。
&&& 12. 若要把y定义为整型变量x的引用,则所使用的定义语句为___ int &y=x;_____。
&&& 13. 若y是x的引用,则对y的操作就是对_____x__的操作。
&&& 14. 若y是x的引用,则&y和&x的值__相等______,即为变量_______x_的地址。
&&& 15. 执行int p=new int操作得到的一个动态分配的整型对象为_____*p ___。
&&& 16. 执行int *p=new int[10]操作,使p指向动态分配的数组中下标为0的元素,该元素可表示为___ p[0]____或____*p ____。
&&& 17. 执行char *p=new char(&a&)操作后,p所指向的数据对象的值为___ &a& _____。
&&& 18. 执行new char[m][n]操作时的返回值的类型为____ char(*)[n]____。
&&& 19. 执行__ delete p ______操作将释放由p所指向的动态分配的数据空间。
&&& 20. 执行__ delete []p ______操作将释放由p所指向的动态分配的数组空间。
&&& 21. NULL是一个符号常量,通常作为空指针值,它的具体值为____0 (或&\0&)____。
&&& 22. 变量v定义为&double v=23.4;&,要使指针pv指向v,则定义pv的语句为_____ double *pv=&v;_________。
&&& 23. 已知语句&cout&&p;&的输出是&Hello!&,则语句&cout&&*p;&输出的是_ H _________。
&&& 24. 已知语句&cout&&s;&的输出是&apple&,则执行语句&cout&&s+2;&的输出结果为_ ple ___________________。
&&& 25. 指针变量pv和pc定义为&void *pv =&Hello, word!&; char *&,要将pv值赋给pc,则正确的赋值语句是_ pc=(char *)pv ______________。
&&& 26. 数组b定义为&int b[20][100];&,要使p[j][k] 与b[j][k] 等效,则指针p应定义为_ int (*p)[100]=b _________________。
&&& 27. 与结构成员访问表达式p-&name等价的表达式是__(*p).name __________。
&&& 28. 与结构成员访问表达式(*fp).score等价的表达式是_ fp-&score ___________。
&&& 29. 已知变量a定义为&int a=5;&,要使ra成为a的引用,则ra应定义为_ int &ra=a ___________。
&&& 30. 已知有定义&int x, a[]={5,7,9}, *pa=a;&,在执行&x=++*&语句后,x的值是_6_______。
&&& 31.已知有定义&int x, a[]={6,10,12}, *pa=a;&,在执行&x=*++&语句后,*pa的值是__10______。
&&& 32. 已知有定义&int x, a[]={15,17,19}, *pa=a;&,在执行&x=*pa++;&后,*pa的值是__17______。
&&& 33. 以面向对象方法构造的系统,其基本单位是__对象________。
&&& 34. 每个对象都是所属类的一个_____实例_____。
&&& 35. 对象将其大部分实现细节隐藏起来,这种机制称为___封装_______。
&&& 36. 基类和派生类的关系称为_____继承_____。
&&& 37. 复杂对象可以由简单对象构成,这种现象称为& 聚合__________。
&&& 38. 对象是对问题域中客观事物的__抽象______,它是一组属性和在这些属性上操作的___封装体______。
&&& 39. 特殊类的对象拥有其一般类的全部属性与操作,称特殊类__继承______了一般类。
&&& 40. 如果一个派生类的基类不止一个,则这种继承称为___多继承(或多重继承)_________。
&&& 41. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为_单继承_________。
&&& 42. C++支持两种多态性:___编译______时的多态性和__运行________时的多态性。
&&& 43. 在C++中,编译时的多态性是通过__重载________实现的,而运行时的多态性则是通过__虚函数________实现的。
&&& 44. 面向对象软件开发的生命周期分为三个阶段,即分析、__设计________和___实现_______。
&&& 45. 面向对象的分析包括_问题域_________分析和__应用________分析两步。
&&& 46. 类定义中,既包含数据成员,也包含_函数 _______成员。
&&& 47. 类中的数据成员的访问属性通常被指明为__ private(或私有)______。
&&& 48. 类中的供外部调用定义的函数成员,其访问属性通常被定义为__ public(或公有)______。
&&& 49. 对于类中定义的任何成员,其隐含访问权限为_ private _______。
&&& 50. 对于结构中定义的任何成员,其隐含访问权限为_ public(或公有)_______。
&&& 51. 为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为__ private ______。
52. 若在类的定义体中给出了一个成员函数的完整定义,则该函数属于_内联_______函数。
&&& 53. 若在类的定义体中只给出了一个成员函数的原型,而在类外给出完整定义时,则其函数名前必须加上__类名&&&&&&&& ______和两个冒号分隔符。
&&& 54. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和__:: (或双冒号) ______分隔符。
&&& 55. 若要把类外定义的成员函数规定为内联函数,则必须把__ inline ______关键字放到函数原型或函数头的前面。
&&& 56. 把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的___作用域_________。
&&& 57. 假定AA是一个类,&AA* abc();&是该类中一个成员函数的原型,则在类外定义时的函数头为__ AA* AA::abc() ________________。
&&& 58. 成员函数的参数表在类作用域中,成员函数的返回值类型__不在______类作用域中。
&&& 59. 为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上_ const _______关键字。
&&& 60. 若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上__ const ______关键字。
&&& 61. 在每个成员函数中,隐含的第一个参数的参数名为_ this _______。
&&& 62. 数组a定义为&int a[100];&,要使p[j] 与a[j] 等效,则指针p应定义为_ int *p=a;& (或int *p=&a[0];)_____________。
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面
&&& 1. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。
class ARRAY{&&
&int *v;&&&&&& //指向存放数组数据的空间
&&&&&&&& //数组大小&
&ARRAY(int a[], int n);
&&& ~ ARRAY(){delete []v;}
&&& int size(){}
&int& operator[](int n);
___(1) int& ARRAY::&& ___ operator[](int n)& //[ ]的运算符成员函数定义
&if(n&0 || ___(2)_ n&=s __) {cerr&&&下标越界!&; exit(1);}
&&& return ___(3) v[n] (或*(v+n))___;
(1)&&&&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&&&& (3)
&&& 2. 已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。
class ARRAY{
&int *v;&&&&&& //指向存放数组数据的空间
&&&&&&&& //数组大小&
&ARRAY(int a[], int n);
&&& ~ ARRAY(){delete []v;}
&&& int size(){}
&int& operator[](int n);
___(1) ARRAY:: ___ ARRAY(int a[], int n)
&if(n&=0) {v=NULL;s=0;}
&v=___(2)_ new int[n] __;
&for(int i=0; i&n; i++) ___(3)_ v[i]=a[i]__;
(1)&&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&&&&& (3)
&&& 3. 下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(a)用()而不是[]进行下标访问,(2)下标从1而不是从0开始,(c)要对下标是否越界进行检查。
class ARRAY{&&
&int *v;&&&&& //指向存放数组数据的空间
&&&&&&&& //数组大小&
&ARRAY(int a[], int n);
&&& ~ ARRAY(){delete []v;}
&&& int size(){}
&&& int& operator()(int n);
&___(1) int& ARRAY:: ___ operator()(int n)
{& // ()的运算符函数定义&
&if(___(2) n&1 || n&s ___) {cerr&&&下标越界!&; exit(1);}
&&& return ___(3) v[n-1] (或*(v+n-1))___;
(1)&&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&& (3)
&&& 4. 已知一个类的定义如下:
#include&iostream.h&
class AA {
&int a[10];
&void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //用nn初始化数据成员n
&int MaxA();& //从数组a中前n个元素中查找最大值
void SortA();& //采用选择排序的方法对数组a中前n个元素
&&&&&&&&&&&&&& //进行从小到大排序
&&& void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
&void PrintA();& //依次输出数组a中的前n个元素
&&& 该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。
int ____(1)_ AA::MaxA()& ____
&int x=a[0];
&for(int i=1; i&n; i++)
&&if(a[i]&x) ___(2) x=a[i] ___;
&___(3) return x ___;
(1)&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&& (3)
&&& 5. 已知一个类的定义如下:
#include&iostream.h&
class AA {
&int a[10];
&void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //用nn初始化数据成员n
&int MaxA();& //从数组a中前n个元素中查找最大值
void SortA();& //采用选择排序的方法对数组a中前n个元素
&&&&&&&&&&&&&& //进行从小到大排序
&&& void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
&void PrintA();& //依次输出数组a中的前n个元素
void AA::SortA()
&for(i=0; ___(1)_ i&n-1 (或i&=n-2) __; i++) {
&&int x=a[i], k=i;
&&for(j=i+1; j&n; j++)
&&&if(a[j]&x) ___(2) {x=a[j]; k=j;} ___
&&a[k]=a[i];
&&___(3)_ a[i]=x __;
(1)&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&& (3)
&&& 6. 已知一个类的定义如下:
#include&iostream.h&
class AA {
&int a[10];
&void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //用nn初始化数据成员n
&int MaxA();& //从数组a中前n个元素中查找最大值
void SortA();& //采用选择排序的方法对数组a中前n个元素
&&&&&&&&&&&&&& //进行从小到大排序
&&& void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
&void PrintA();& //依次输出数组a中的前n个元素
void ___(1) AA::InsertA()___&&&&&&& //插入排序函数
&for(i=1; i&n; i++) {
&&int x=a[i];
&&for(j=i-1; j&=0; j--)
&&&if(x&a[j]) ___(2) a[j+1]=a[j] ___;
&&&else ___(3)_ break __;
&&a[j+1]=x;
(1)&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&&&& (3)
&&& 7. 已知一个类的定义如下:
#include&iostream.h&
class AA {
&int a[10];
&void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //用nn初始化数据成员n
&int MaxA();& //从数组a中前n个元素中查找最大值
void SortA();& //采用选择排序的方法对数组a中前n个元素
&&&&&&&&&&&&&& //进行从小到大排序
&&& void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
&void PrintA();& //依次输出数组a中的前n个元素
&&&&&&&&&&&&&&&&&&& //最后输出一个换行
&&& 使用该类的主函数如下:
void main()
&int a[10]={23,78,46,55,62,76,90,25,38,42};
&___(1)_ x.SetA(a,6)__;
&int m=___(2) x.MaxA() ___;
&___(3) x.PrintA() ___;
&cout&&m&&
&&& 该程序运行结果为:
23 78 46 55 62 76
(1)&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&&&& (3)
8. 已知一个类的定义如下:
#include&iostream.h&
class AA {
&int a[10];
&void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //用nn初始化数据成员n
&int MaxA();& //从数组a中前n个元素中查找最大值
void SortA();& //采用选择排序的方法对数组a中前n个元素
&&&&&&&&&&&&&& //进行从小到大排序
&void PrintA();& //依次输出数组a中的前n个元素,
&&&&&&&&&&&&&&&&&&& //最后输出一个换行
&&& 使用该类的主函数如下:
void main()
&int a[10]={23,78,46,55,62,76,90,25,38,42};
&___(1) AA x ___;&
&x.SetA(a,8);
&int ___(2) m=x.MaxA() ___;
&___(3) x.SortA()___;
&x.PrintA();
&&& cout&&m&&
&&& 该程序运行结果为:
23 25 46 55 62 76 78 90
(1)&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&& (3)
&&& 9. 已知一个利用数组实现栈的类定义如下:
const int ARRAY_SIZE=10;
class Stack {
&void Init() {top=-1;}&&&&&& //初始化栈为空
&&& void Push(int newElem);&&&& //向栈中压入一个元素
&int Pop();&&&&&&&&&&&&&&&&& //从栈顶弹出一个元素
&bool Empty() {& //判栈空
&&&&&&& if(top==-1)}
&int Depth() {return top+1;}& //返回栈的深度
&void Print();&
&&&&&&& //按照后进先出原则依次输出栈中每个元素,直到栈空为止
&int elem[ARRAY_SIZE];& //用于保存栈元素的数组
&&&&&&&&&&&&&&& //指明栈顶元素位置的指针
void Stack::Push(int newElem) {
&if(___(1)_ top==ARRAY_SIZE-1__) {
&&cout&&&栈满!&&&
&&exit(1);& //中止运行
&___(2)_ top++(或++top)__;
&elem[top]=___(3) newElem ___;
(1)&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&& (3)
&&& 10. 已知一个利用数组实现栈的类定义如下:
const int ARRAY_SIZE=10;
class Stack {
&void Init() {top=-1;}&&&& //初始化栈为空
&&& void Push(int newElem);&& //向栈中压入一个元素
&int Pop();&&&&&&&&&&&&&&& //从栈顶弹出一个元素
&bool Empty() {& //判栈空
&&&&&&& if(top==-1)}
&int Depth() {return top+1;}& //返回栈的深度
&void Print();&
&&&&&&& //按照后进先出原则依次输出栈中每个元素,直到栈空为止
&int elem[ARRAY_SIZE];& //用于保存堆栈元素的数组
&&&&&&&&&&&&&&& //指明栈顶元素位置的指针
&&& 该类的Pop和Print函数的实现分别如下:
___(1)_ int Stack::Pop()__ {
&if(top==-1) {
&&cout&&&栈空!&&&
&&exit(1);& //中止运行
&return ___(2) elem[top--]___;
void Stack::Print() {
&while(!Empty())
&&cout&&___(3)_ Pop()__ &&' ';
(1)&&&&&&&&&&&&&&&&&&&& (2)&&&&&&&&&&&&&&&&&&&& (3)
四、写出程序运行结果
&&& 1. #include&iostream.h&
&&&&&&& void main() {
&&&&&&&& int a[10]={76,83,54,62,40,75,90,92,77,84};
&&&&&&&& int b[4]={60,70,90,101};
&&&&&&&& int c[4]={0};
&&&&&&&& for(int i=0;i&10;i++) {
&&&&&&&&& int j=0;
&&&&&&&&& while(a[i]&=b[j]) j++;
&&&&&&&&& c[j]++;
&&&&&&&& }
&&&&&&&& for(i=0;i&4;i++) cout&&c[i]&&& &;
&&&&&&&& cout&&
答案:2 1 5 2
&&& 2. #include&iostream.h&
&&&&&&& #include&string.h&
&&&&&&& void main() {
&&&&&&&&&&& char a[5][10]={&student&,&worker&,&soldier&,&cadre&,&peasant&};
&&&&&&&& char s1[10], s2[10];
&&&&&&&& strcpy(s1,a[0]); strcpy(s2,a[0]);
&&&&&&&& for(int i=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&&s1&&& &&&s2&&
答案:worker cadre
&&& 3. #include&iostream.h&
&&&&&&& const int N=5;
&&&&&&& void fun();
&&&&&&& void main()
&&&&&&&&&&& for(int i=1; i&N; i++)
&&&&&&&&&&& fun();
&&&&&&& void fun()
&&&&&&&&&&&
&&&&&&&&&&& int b=2;
&&&&&&&&&&& cout&&(a+=3,a+b)&&' ';
答案:5 8 11 14
&&& 4. #include&iostream.h&
&&&&&&& void main()
&& &&&&&&&& char s[3][5]={&1234&,&abcd&,&+-*/&};&
&&&&&&&&&&& char *p[3];
&&&&&&&&&&& for(int I=0;I&3;I++) p[I]=s[I];
&&&&&&&&&&& for(I=2;I&=0;I--) cout&&p[I]&&' ';
&&&&&&&&&&& cout&&
答案:+-*/ abcd 1234
&&& 5. #include&iostream.h&
&&&&&&& void main()
&&&&&&&& int i,j,len[3];
&&&&&&&& char a[3][8]={&year&,&month&,&day&};
&&&&&&&& for(i=0;i&3;i++) {
&&&&&&&&& for(j=0;j&8;j++)
&&&&&&&&&&&&&&&& if(a[i][j]=='\0') {
&&&&&&&&&&& len[i]=j;
&&&&&&&&&&&& cout&&a[i]&&&:&&&len[i]&&
&&&&&&&& }
答案:year:4
&&&&& month:5
&&&&& day:3
&&& #include&iostream.h&
&&& #include&string.h&&&&
&&& class CD {
&&&& char*
&&&&& public:
&&&& void Init(char* aa, int bb)
&&&&&&&& a=new char[strlen(aa)+1];
&&&&&&&& strcpy(a,aa);
&&&&&&&& b=
&&&& char* Geta() {}
&&&& int Getb() {}
&&&& void Output() {cout&&a&&' '&&b&&}
void main()
&dx.Init(&abcdef&,30);
&dy.Init(&shenyafen&,3*dx.Getb()+5);
&dx.Output();
&dy.Output();
答案:abcdef 30
&& shenyafen 95
&&& 7.#include&iostream.h&
&&&&&&& #include&string.h&&&&
&&&&&&& class CD {
&&&&&&&& char*
&&&&&&&&& public:
&&&&&&&& void Init(char* aa, int bb)
&&&&&&&& {
&&&&&&&&& a=new char[strlen(aa)+1];
&&&&&&&&& strcpy(a,aa);
&&&&&&&&& b=
&&&&&&&& }
&&&&&&&& char* Geta() {}
&&&&&&&& int Getb() {}
&&&&&&&& void Output() {cout&&a&&' '&&b&&}
&&&&&&& };
void main()
&char a[20];
&dx.Init(&abcdef&,30);
&strcpy(a,dx.Geta());
&strcat(a,&xyz&);
&dy.Init(a,dx.Getb()+20);
&dx.Output();
&dy.Output();
答案:abcdef 30
&& abcdefxyz 50
&&& 8. #include&iostream.h&
&&&&&&& class CE {
&&&&&&&&& private:
&&&&&&&& int a,b;
&&&&&&&& int getmax() {return (a&b?a:b);}
&&&&&&&&& public:
&&&&&&&&&&&
&&&&&&&& void SetValue(int x1,int x2,int x3) {
&&&&&&&&&&&&&&& a=x1; b=x2; c=x3;
&&&&&&&& }
&&&&&&&& int GetMax();
&&&&&&& };
int CE::GetMax() {
&&&&&& int d=getmax();
&&&&&& return (d&c? d:c);
void main()
&&&&&&&& int x=5,y=12,z=8;
&&&&&&&& CE ex, *ep=&
&&&&&&&& ex.SetValue(x,y,z);
&&&&&&&& cout&&ex.GetMax()&&
&&&&&&&& ep-&SetValue(x+y,y-z,20);
&&&&&&&& cout&&ep-&GetMax()&&
&&& 9. #include&iostream.h&
&&&&&&& class CE {
&&&&&&&&& private:
&&&&&&&& int a,b;
&&&&&&&& int getmin() {return (a&b? a:b);}
&&&&&&&&& public:
&&&&&&&&&&&
&&&&&&&& void SetValue(int x1,int x2, int x3) {
&&&&&&&&&&&&&&& a=x1; b=x2; c=x3;
&&&&&&&& }
&&&&&&&& int GetMin();
&&&&&&& };
int CE::GetMin() {
&&&&&&&& int d=getmin();
&&&&&&&& return (d&c? d:c);
void main()
&&&&&&&& int x=5,y=12,z=8;
&&&&&&&& CE *
&&&&&&&& ep=new CE;
&&&&&&&& ep-&SetValue(x+y,y-z,10);
&&&&&&&& cout&&ep-&GetMin()&&
&&&&&&&& CE a=*
&&&&&&&& cout&&a.GetMin()*3+15&&
&&& 10. #include&iostream.h&
&&&&&&& class Franction {& //定义分数类
&&&&&&&&& //定义分子
&&&&&&&&& //定义分母
&&&&&&&&& public:
&&&&&&&&& //把*this化简为最简分数,具体定义在另外文件中实现
&&&void FranSimp();&
&&&&&&&&& //返回两个分数*this和x之和,具体定义在另外文件中实现
&&&Franction FranAdd(const Franction& x);
&&&&&&&&& //置分数的分子和分母分别0和1
&&&&&&&& void InitFranction() {nume=0; deno=1;}
&&&&&&&&& //置分数的分子和分母分别n和d
&&&&&&&& void InitFranction(int n, int d) {nume=n; deno=d;}
&&&&&& //输出一个分数
&&&void FranOutput() {cout&&nume&&'/'&&deno&&}
&&&&&&& };
&&void main()
&&&&&&&& Franction a,b,c,d;
&&&&&&&& a.InitFranction(7,12);
&&&&&&&& b.InitFranction(-3,8);
&&&&&&&& c.InitFranction();
&&&&&&&& c=a.FranAdd(b);
&&&&&&&& d=c.FranAdd(a);
&&&cout&&&a: &; a.FranOutput();
&&&&&&&& cout&&&b: &; b.FranOutput();
&&&&&&&& cout&&&c: &; c.FranOutput();
&&&&&&&& cout&&&d: &; d.FranOutput();
答案:a: 7/12
&&&& b: -3/8
&&&& c: 5/24
&&&& d: 19/24
&&& 11. #include&iostream.h&
&&&&&&& class Franction {& //定义分数类
&&&&&&&&& //定义分子
&&&&&&&&& //定义分母
&&&&&&&&& public:
&&&&&&&&& //把*this化简为最简分数,具体定义在另外文件中实现
&&&void FranSimp();&
&&&&&&&&& //返回两个分数*this和x之和,具体定义在另外文件中实现
&&&Franction FranAdd(const Franction& x);
&&&&&&&&& //置分数的分子和分母分别0和1
&&&&&&&& void InitFranction() {nume=0; deno=1;}
&&&&&&&&& //置分数的分子和分母分别n和d
&&&&&&&& void InitFranction(int n, int d) {nume=n; deno=d;}
&&&&&& //输出一个分数
&&&void FranOutput() {cout&&nume&&'/'&&deno&&}
&&&&&&& };
&&void main()
&&&&&&&& Franction a,b,c,d;&
&&&&&&&& a.InitFranction(6,15);
&&&&&&&& b.InitFranction(3,10);
&&&&&&&& c.InitFranction();
&&&&&&&& c=a.FranAdd(b);
&&&&&&&& d=c.FranAdd(a);
&&&cout&&&a: &; a.FranOutput();
&&&&&&&& cout&&&b: &; b.FranOutput();
&&&&&&&& cout&&&c: &; c.FranOutput();
&&&&&&&& cout&&&d: &; d.FranOutput();
答案:a: 6/15&&
&&& c: 7/10
&&& d: 11/10
五、程序改错,指出错误的程序行并改正
&&& 1. 在下面的定义中,NODE是链表结点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的结点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。
struct NODE{
&&& NODE *
&NODE* appendToList(NODE *list, int x){&&&&& //1行
NODE *p=new NODE;&&&&&&&&&&&&&&&&&&&&&&& //2行
&p-&data=x;&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //3行
& p-&next=NULL;&&&&&&&&&&&&&&&&&&&&&&&&&& //4行
if(list==NULL)&&&&&&&&&&&&&&& //5行
&NODE *p1=&&&&&&&&&&&&&&&&&&&&&&&&& //6行
while(p1-&next!=NULL) p1=p1-&&&&&& //7行
& p1-&next=p;p1=p;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //8行
错误行的行号为___2___和____8____。
分别改正为_ NODE *p=new NODE _____________和__ p1-&next=p;____________。
&&& 2. 在下面的定义中,NODE是链表结点的结构,addToList则是一函数,其功能是:将一个值为x的新结点添加到以plist为表头指针的链表的首部(即第一个结点的前面)并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。
struct NODE{
&&& NODE *
&NODE* adndToList(NODE * plist, int x){&&&& //1行
NODE *p;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
p=new NODE;&&&&&&&&&&&&&&&&&&&&&& //3行
p-&data=x;&&&&&&&&&&&&&&&&&&&&&&&&&&&& //4行
p-&next=&&&&&&&&&&&&&&&&&&&&&&&&& //5行
& plist=p;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //6行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //7行
错误行的行号为__3____和____5____。
分别改正为__ p=new NODE ____________和__ p-&next=plist ____________。
&&& 3. 下面程序的主函数中第7和8行有错误,请把它们改正过来。
&&&&&&& #include&iostream.h&
&&&&&&& class Franction {& //定义分数类
&&&&&&&&& //定义分子
&&&&&&&&& //定义分母
&&&&&&&&& public:
&&&&&&&&& //把*this化简为最简分数,具体定义在另外文件中实现
&&&void FranSimp();&
&//返回两个分数*this和x之和,具体定义在另外文件中实现
&&&Franction FranAdd(const Franction& x);
&&&&&&&&& //置分数的分子和分母分别0和1
&&&&&&&& void InitFranction() {nume=0; deno=1;}
&&&&&&&&& //置分数的分子和分母分别n和d
&&&&&&&& void InitFranction(int n, int d) {nume=n; deno=d;}
&&&&&& //输出一个分数
voi FranOutput() {cout&&nume&&'/'&&deno&&}
&&&&&&& };
void main()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
&& Franction a,b,c;&&&&&&&&&&&&&&&&&&&&& //3行
&& a.InitFranction(6,15);&&&&&&&&&&&&&&& //4行
&& b.InitFranction(1);&&&&&&&&&&&&&&&&&& //5行
&& c.InitFranction();&&&&&&&&&&&&&&&&&&& //6行
&& c= a.FranAdd(b);&&&&&&&&&&&&&&&&&&&&&& //7行
c.franoutput();&&&&&& //8行
&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //9行
第7行改正为___ c=a.FranAdd(b)______________________。
第8行改正为___ c.FranOutput()_______________________。
&&& 4. 假定要求下面程序的输出结果为&23/20&,其主函数中第6,9,10行有错误,请给予改正。
&&&&&&& #include&iostream.h&
&&&&&&& class Franction {& //定义分数类
&&&&&&&&& //定义分子
&&&&&&&&& //定义分母
&&&&&&&&& public:
&&&&&&&&& //把*this化简为最简分数,具体定义在另外文件中实现
&&&void FranSimp();&
&&&&&&&&& //返回两个分数*this和x之和,具体定义在另外文件中实现
&&&Franction FranAdd(const Franction& x);
&&&&&&&&& //置分数的分子和分母分别0和1
&&&&&&&& void InitFranction() {nume=0; deno=1;}
&&&&&&&&& //置分数的分子和分母分别n和d
&&&&&&&& void InitFranction(int n, int d) {nume=n; deno=d;}
&&&&&& //输出一个分数
void FranOutput() {cout&&nume&&'/'&&deno&&}
&&&&&&& };
void main()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
&& Franction *a=new F&&&&&&&&&& //3行
&& Franction *b=new F&&&&&&&&&& //4行
&& a-&InitFranction(6,15);&&&&&&&&&&&&&& //5行
& b-&InitFranction(3,4);&&&&&&&&&&&&&&&& //6行
&& F&&&&&&&&&&&&&&&&&&&&&&&&& //7行
&& c.InitFranction();&&&&&&&&&&&&&&&&&&& //8行
c=a-&FranAdd(*b);&&&&&&&&&&&&&&&&&&&&&& //9行
&c.FranOutput();&&&&&&&&&& //10行
&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //11行
错误行的行号为______、________和________。
分别改正为__ b-&InitFranction(3,4)__________________、_ c=a-&FranAdd(*b)_______________和__ c.FranOutput()_________________。
&&& 5. 下面是一个类的定义,存在着3处语法错误,请指出错误行的行号并改正。
class CE {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&& private:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
&&&& int a,b;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //3行
&&&& int getmin() {return (a&b? a:b);}&&&&&& //4行
&&&& public&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //5行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //6行
&&&& void SetValue(int x1,int x2, int x3) {&& //7行
&&&&&&&&&&& a=x1; b=x2; c=x3;&&&&&&&&&&&&&&&&&& //8行
&&&& };&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //9行
&&&& int GetMin();&&&&&&&&&&&&&&&&&&&&&&&&&& //10行
};&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //11行
int GetMin() {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //12行
&int d=getmin();&&&&&&&&&&&&&&&&&&&&&&&&&&&& //13行
&return (d&c? d:c);&&&&&&&&&&&&&&&&&&&&&&&&& //14行
}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //16行
错误行的行号为____5__、____9____和___12_____。
分别改正为____& public:________________、__}______________和____ int CE::GetMin() {_______________。
&&& 6. 下面程序段第4-10行中存在着三行语法错误,请指出错误行的行号并改正。
& class A {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&& int a,b;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //3行
&& public&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //4行
&&&& A():c(0);a(0);b(0) {}&&&&&&&&&&&&&&&&&&&&&&& //5行
&&&& A(int aa, int bb) c(aa+bb); {a= b=}&&& //6行
&& };&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //7行
&& A a,b(1,2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //8行
&& A *x=&a, &y=b;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //9行
&& A *z=new A, w[10];&&&&&&&&&&&&&&&&&&&&&&&&&&&& //10行
错误行的行号为_4_____、5________和__6______。
分别改正为_ public:________________、__ A():c(0),a(0),b(0) {}__________________和____ A(int aa, int bb): c(aa+bb) {a= b=}_______________________。
&&& 7. 下面程序段第4-9行中存在着三条语句错误,请指出错误语句的行号并说明原因。
& class A {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&& int a,b;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //3行
&& public:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //4行
&&&& A() {a=b=c=0;}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //5行
&&&& A(int aa, int bb):c(aa+bb) {a= b=}&&&& //6行
&& };&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //7行
&& A a,b(1,2,3);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //8行
&& A x(2,3), y(4);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //9行
错误行的行号为__5____、_8_______和__9______。
错误原因分别为___在函数体给常量c赋值________________、__定义b多一个参数
________________和___定义y少一个参数_______________。
&&& 8. 下面程序段第10-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。
& class A {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //1行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //2行&
& public:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //3行
&&&& A(int aa=0):a(aa){}&&&&&&&&&&&&&&&&&& //4行
& };&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //5行
& class B {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //6行
&&&& int a,b;&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //7行
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //8行
&&&& A&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //9行
&& public:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //10行
&&&& B():c(0) {a=b=0;}&&&&&&&&&&&&&&&&&&&& //11行
&&&& B(int aa, int bb):d(aa+bb) {&&&&&&&&& //12行
&&&&&&& a= b= c=aa-&&&&&&&&&&&&&& //13行
&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //14行
&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //15行
&& B a,b(1,2);&&&&&&&&&&&&&&&&&&&&&&&&&&&& //16行
&& B x=a,y(b),z(1,2,3),;&&&&&&&&&&&&&&&&&& //17行&&
错误行的行号为__13____、__15______和_17_______。
错误原因分别为__在函数体给常量c赋值___________________、__缺少分号__________________和____定义z多一个参数_______________。
&&& 1. 按照函数原型语句&void p(int n);&编写一个递归函数显示出如下图形,此图形是n=5的情况。
答案:void p(int n)
&if(n!=0) {
&&for(int i=0; i&n; i++) cout&&n;
&&& 2. 按照函数原型语句&void p(int n);&编写一个递归函数显示出如下图形,此图形是n=5的情况。
答案:void p(int n)
&if(n!=0) {
&&for(int i=0; i&n; i++) cout&&n;
&&& 3. 根据下面类中Count函数成员的原型和注释写出它的类外定义。
class AA {
&void InitAA(int aa[], int nn, int ms) {
&&if(nn&ms) {cout&&&Error!&&& exit(1);}
&&a=new int[MS];
&&for(int i=0; i&n; i++) a[i]=aa[i];
&int Count(int x);& //从数组a的前n个元素中统计出其
&&&&&&&&&&&&&&&&&&&&&& //值等于x的个数并返回。
};答案int AA::Count(int x)
&int i,c=0;
&for(i=0; i&n;i++)
&&if(a[i]==x) c++;
&&& 4. 根据下面类中Search函数成员的原型和注释写出它的类外定义。
class AA {
&void InitAA(int aa[], int nn, int ms) {
&&if(nn&ms) {cout&&&Error!&&& exit(1);}
&&a=new int[MS];
&&for(int i=0; i&n; i++) a[i]=aa[i];
&&& int Search(int x); //从数组a的前n个元素中顺序查找值为x的第一个元素,
&&&&&&&&&&&&&&&&&&& //若查找成功则返回元素的下标,否则返回-1。
答案:int AA::Search(int x)
&for(i=0; i&n;i++)
&&if(a[i]==x)
&return -1;
&&& 5. 根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。
class AA {
&void InitAA(int aa[], int nn, int ms) {
&&if(nn&ms) {cout&&&Error!&&& exit(1);}
&&a=new int[MS];
&&for(int i=0; i&n; i++) a[i]=aa[i];
int MaxMin(int& x, int& y); //从数组a的前n个元素中求出
&&&&&&&& //最大值和最小值,并分别由引用参数x和y带回,
&&&&&&&& //同时若n大于0则返回1,否则返回0。
答案:int AA::MaxMin(int& x, int& y)
&mx=my=a[0];
&for(int i=1; i&n; i++) {
&&&&&&& if(a[i]&mx) mx=a[i];
&&if(a[i]&my) my=a[i];
&if(n&0) return 1; else return 0;
&&& 6. 根据下面类中Compare 函数成员的原型和注释写出它的类外定义。
class AA {
&void InitAA(int aa[], int nn, int ms) {
&&if(nn&ms) {cout&&&Error!&&& exit(1);}
&&a=new int[MS];
&&for(int i=0; i&n; i++) a[i]=aa[i];
int Compare(AA b); //比较*this与b的大小,若两者中
&&&&&&& //的n值相同,并且数组中前n个元素值对应
&&&&&&& //相同,则认为两者相等返回1,否则返回0。
答案:int AA::Compare(AA b)
&if(n!=b.n) return 0;
&for(int i=0; i&n; i++)
&&if(a[i]!=b.a[i]) return 0;
&&& return 1;
&&& 7. 根据下面类中CompareBig 函数成员的原型和注释写出它的类外定义。
class AA {
&void InitAA(int aa[], int nn, int ms) {
&&if(nn&ms) {cout&&&Error!&&& exit(1);}
&&a=new int[MS];
&&for(int i=0; i&n; i++) a[i]=aa[i];
int CompareBig(AA b);& //比较*this与b的大小,从前向后按两数组
&&&&&&&&&& //中的对应元素比较,若*this中元素值大则返回1,若b中
&&&&&&&&&& //元素值大则返回-1,若相等则继续比较下一个元素,直到
&&&&&&&&&& //一个数组中无元素比较,此时若两者的n值相同则返回0,
&&&&&&&&&& //否则若*this中的n值大则返回1,若b中的n值大则返回-1。
答案:int AA::CompareBig(AA b)
&if(n&b.n) k=b.n; else k=n;
&for(int i=0; i&k; i++)
&&if(a[i]&b.a[i]) return 1;
&&else if(a[i]&b.a[i]) return -1;
&&& if(k==n && k==b.n) return 0;
&else if(k&n) return 1;
&else return -1;
C++语言程序设计练习参考解答
一、单项选择题
1. A&&& 2. B&&& 3. B&&& 4. C&&& 5. D&&& 6. B&&& 7. A&&& 8. D&&& 9. B&&& 10. C
11. D&& 12. A&& 13. A&& 14. B&& 15. D&& 16. B&& 17. A&& 18. C&& 19. A&& 20. B
21. D&& 22. C&& 23. A&& 24. C&& 25. B&& 26. A&& 27. C&& 28. C&& 29. D&& 30. B
31. D&& 32. C&& 33. A&& 34. B&& 35. A&& 36. C&& 37. C&& 38. B&& 39. A&& 40. C
41. B&& 42. A&& 43. D&& 44. D&& 45. B&& 46. A&& 47. C&& 48. D&& 49. B&& 50. C
1. 4*i&&&&&&&&&& 2. *(a+i)&&&&&&&&& 3. a+i*sizeof(a[i])&&&& 4. 第一个& 修改
5. b[7]& b[2]&&& 6. int *p=&x;&&&&& 7. *p&&&&&&&&&&&&&&&&&& 8. int[n]& int *
9. c[3][0]& c[3][2]&&&&&&&&&&&&&&&& 10. int(*)[6]
11. *(a[i]+j) 或*(*(a+i)+j)或*(a+i)[j]&&&&& 12. int &y=x;
13. x&&&&&&&&&&& 14. 相等 x&&&&&&&& 15. *p&&&&&&&&&&&&&&&&& 16. p[0]& *p
17. &a&&&&&&&&&& 18. char(*)[n]&&&& 19. delete p&&&&&&&&&&& 20. delete []p
21. 0 (或&\0&) 22. double *pv=&v; 23. H&&&&&&&&&&&&&&&&&& 24. ple
25. pc=(char *) 26. int (*p)[100]=b;&& 27. (*p).name&&&& 28. fp-&score
29. int &ra=a;&& 30. 6&&&&&&&&&&&&& 31. 10&&&&&&&&&&&&&&&&& 32. 17
33. 对象&&&&&&&& 34. 实例&&&&&&&&&& 35. 封装&&&&&&&&&&&&&&& 36. 继承
37. 聚合&&&&&&&& 38. 抽象& 封装体&& 39. 继承&&&&&&&&&&&&&&& 40. 多继承(或多重继承)
41. 单继承&&&&&& 42. 编译& 运行&&&& 43. 重载& 虚函数&&&&&&& 44. 设计& 实现
45. 问题域& 应用 46. 函数&&&&&&&&&& 47. private(或私有)&& 48. public(或公有)
49.private&&&&&& 50. public(或公有) 51. private&&&&&&&&&&&& 52. 内联
53. 类名&&&&&&&& 54. :: (或双冒号)& 55. inline&&&&&&&&&&&&& 56. 作用域
57. AA* AA::abc()& 58. 不在&&&&&&&& 59. const&&&&&&&&&&&&&& 60. const
61. this&&&&&&&&&&&&&&&&&&&&&&&&&&& 62. int *p=a;& (或int *p=&a[0];)
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面
1. (1) int& ARRAY::&&&&&&&&&& (2) n&=s&&&&&&&&&&&&& (3) v[n] (或*(v+n))
2. (1) ARRAY::&&&&&&&&&&&&&&& (2) new int[n]&&&&&&& (3) v[i]=a[i]
3. (1) int& ARRAY::&&&&&&&&&& (2) n&1 || n&s&&&&&&& (3) v[n-1] (或*(v+n-1))
4. (1) AA::MaxA()&&&&&&&&&&&& (2) x=a[i]&&&&&&&&&&& (3) return x
5. (1) i&n-1 (或i&=n-2)&&&&&& (2) {x=a[j]; k=j;}&&& (3) a[i]=x
6. (1) AA::InsertA()&&&&&&&&& (2) a[j+1]=a[j]&&&&&& (3) break
7. (1) x.SetA(a,6)&&&&&&&&&&& (2) x.MaxA()&&&&&&&&& (3) x.PrintA()
8. (1) AA x&&&&&&&&&&&&&&&&&& (2) m=x.MaxA()&&&&&&& (3) x.SortA()
9. (1) top==ARRAY_SIZE-1&&&&& (2) top++(或++top)& (3) newElem
10.(1) int Stack::Pop()&&&&&& (2) elem[top--]&&&&&& (3) Pop()
四、写出程序运行结果
1.&&&& 2 1 5 2
2.&&&& worker cadre
3. 5 8 11 14
4. +-*/ abcd 1234
&& month:5
6. abcdef 30
&& shenyafen 95
7. abcdef 30
&& abcdefxyz 50
10. a: 7/12
&&& b: -3/8
&&& c: 5/24
&&& d: 19/24
11. a: 6/15&&
&&& c: 7/10
&&& d: 11/10
五、程序改错,指出错误的程序行并改正
&& NODE *p=new NODE;& p1-&next=p;
&& p=new NODE;& p-&next=
3. c=a.FranAdd(b); c.FranOutput()
4. b-&InitFranction(3,4); c=a-&FranAdd(*b); c.FranOutput()
5. 5& 9& 12
&& public:& }& int CE::GetMin() {
6. 4& 5& 6
&& public:
&& A():c(0),a(0),b(0) {}
&& A(int aa, int bb): c(aa+bb) {a= b=}
7. 5& 8& 9
&& 在函数体给常量c赋值
&& 定义b多一个参数
&& 定义y少一个参数
8. 13& 15& 17
&& 在函数体给常量c赋值& 缺少分号& 定义z多一个参数
void p(int n)
&if(n!=0) {
&&for(int i=0; i&n; i++) cout&&n;
void p(int n)
&if(n!=0) {
&&for(int i=0; i&n; i++) cout&&n;
int AA::Count(int x)
&int i,c=0;
&for(i=0; i&n;i++)
&&if(a[i]==x) c++;
int AA::Search(int x)
&for(i=0; i&n;i++)
&&if(a[i]==x)
&return -1;
int AA::MaxMin(int& x, int& y)
&mx=my=a[0];
&for(int i=1; i&n; i++) {
&&&&&&& if(a[i]&mx) mx=a[i];
&&if(a[i]&my) my=a[i];
&if(n&0) return 1; else return 0;
int AA::Compare(AA b)
&if(n!=b.n) return 0;
&for(int i=0; i&n; i++)
&&if(a[i]!=b.a[i]) return 0;
&&& return 1;
int AA::CompareBig(AA b)
&if(n&b.n) k=b.n; else k=n;
&for(int i=0; i&k; i++)
&&if(a[i]&b.a[i]) return 1;
&&else if(a[i]&b.a[i]) return -1;
&&& if(k==n && k==b.n) return 0;
&else if(k&n) return 1;
&else return -1;
下页更精彩:
点击排行榜
〖〗链接地址:
C++语言程序设计试题及答案_计算机二级由网友原创或转发,若C++语言程序设计试题及答案_计算机二级侵犯到您的权益,请及时通知我们(QQ:),谢谢!
微信查看最新信息微信扫一扫或用微信搜索微信号:hbrc-com
安卓手机客户端更省流量手机扫描下载或者直接
猜你还喜欢的文章
热点文章排行榜
• 版权所有 Copyright 2011 All rights reserved.

我要回帖

更多关于 微信发不出图片什么情况 的文章

 

随机推荐