ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:30.35KB ,
资源ID:10069254      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10069254.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++期末考试题及答案总结.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++期末考试题及答案总结.docx

1、C+期末考试题及答案总结C+嘲末考试题及答案总结清华大学计算机系C+期末考试题及答案一、填空题(25小题,共50分)(以下每小题1分,共10分)1.在O+中,函数的参数有两种传递方式, 它们是值传递和地址或指针或引用传递。2.当一个成员函数被调用时,该成员函数的 this指针指向调用它的对象。3.在基类和派生类中,派生类可以定义其基 类中不具备的数据和操作。对两个有相同名字的 数据成员进行访问时,如果没有作用域分隔符 限定时,对此数据成员的访问将出现歧义。4.拷贝构造函数使用引用作为参数初始化创建中的对象。5.在公有继承的情况下,基类数据成员在派 生类中的访问权限保持不变。6.描述命题A小于B

2、或小于C的表达式为AB7.AC o用new申请某一个类的动态对象数组时,在该类中必须能够匹配到 没有形参的或缺省参 数构造函数,否则应用程序会产生一个编译错误。8.静态数据成员在类外进行初始化,且静态 数据成员的一个拷贝被类的所有对象共享。9.为了避免可能出现的歧义,C+对if-else 语句配对规则规定为:else总是与与最近的辻 配对。10.设/zint a=3, b=4, c=5;,z,表达式 (a+b)(以下每小题2分,共20分)11.面向对象的程序设计有四大特征,它们是抽象、封装、继承、多态。12.III在Visual C+中,定义重载函数时,应 至少使重载函数的参数个数或参数类型不

3、同; 在基类和派生类中,成员函数的覆盖是指 派生 类成员函数与在基类被覆盖的成员函数名、参数 个数、参数类型和返回值类型均相同。13.构造函数与析构函数除功能不同外,在定 义形式上,它们的区别还包括构造函数名与类名 相同,而析构函数名是在类名前加一个二 析构 函数没有参数、析构函数可以定义为虚函数。14.动态联编要满足两个条件,它们是被调 用的成员函数是虚函数、用指针或引用调用虚函数。15在C+类中,有一种不能定义对象的类, 这样的类只能被继承,称之为抽象类,定义该 类至少具有一个纯虚函数。16.在C+类中,const关键字可以修饰对象 和成员函数,con st对象不能被修改,con st 成

4、员函数不能修改类数据成员。17.举出C+中两种用户自定义的数据类型: 类、枚举。18.C+中没有字符串类型,字符串是通过 字 符数组来表示的,每一个字符串都有一个结尾 字符0 。19.C+中没有输入输出语句,输入输出是通 过 输入输出库 实现的,写出一条打印整型变量 n的输出语句:coutn;20.(以下每小题4分,共20分)21.下面程序的运行结#i nclude void mai n()举出C+-中两种代码复用的方式: 继承、 复用。果澤选:3 10*22.简答:4*53.程序分析:5*84.程序设计:2*10考点:(1)运算符重载char a=a,b=j;float x;x=(b-a)/

5、(F-A);prin tf(%dn,(i nt)(3.14*x);22.下面程序的运行结果是2 5 8 11 14#in elude iostream.hvoid mai n()int i=1;while (i=15)i+;if (i%3!=2) continue; else cout i=ie ndl;23.下面程序的运行结果是 #in elude iostream.hclass testprivate:int num;float fl;public:test();int get int( )retur n nu m;float getfloat( )return fl;test();tes

6、t:test()cout Initalizing default endl; n um=0;fl=0.0;test:test() endl;cout Desdtructor is activevoid mai n()test array2;cout array1.geti nt() array1.getfloat( ) e ndl;Ini talizi ng defaultIni talizi ng default0 0Desdtructor is activeDesdtructor is active24.下面程序的运行结果是 #i nclude class Apublic:A()coutA

7、:A() called; virtual A()coutA:A() called.n;class B:public Apublic:B(int i)coutB:B() called.n;buf=new chari;virtual B()delete buf;coutB:B() called.n;private:char *buf;void fun(A *a)delete a;void mai n()A *a=new B(15);fun( a);A:A() called.B:B() called.B:B() called. A:A() called.25.下面程序的运行结果是 #in elude

8、 int a =1,3,5,7,9;int *p =a,a+1,a+2,a+3,a+4;void mai n()prin tf(%dt%dt%dn,a4,*(a+2),*p1);prin tf(%dt%dt%dn,*(p+1)+a2,*(p+4) -*(p+0),*(a+3)%a4);9 5 38 4 7二、问答题(每小题5分,共20分)1 若程序员没有定义拷贝构造函数,则编译 器自动生成一个缺省的拷贝构造函数,它可能会 产生什么问题?解答要点:当对象含有指针数据成员,并用它初 始化同类型的另一个对象时,缺省的拷贝构造函 数只能将该对象的数据成员复制给另一个对象, 而不能将该对象中指针所指向的

9、内存单元也复 制过去。这样,就可能出现同一内存单元释放两 次,导致程序运行出错。2.简述成员函数、全局函数和友元函数的差 别。解答要点:以下几点必须说清楚:成员函数是在类内部定义的,作用域在类的 内部,成员函数可以访问类的数据成员(公有、 保护和私有数据成员),可以调用该类的其它成 员函数(公有、保护和私有成员函数),可以调 用全局函数。如果友元函数是另一个类的公有成 员函数,则该类的成员函数也只能通过那个类的 对象调用,不能调用那个类的保护和私有成员函 数。非本类成员函数(其它类成员函数或全局函 数)可以通过该类的对象访问该类的公有数据成 员和调用该类的的公有成员函数。不是在类中定义的成员函

10、数都是全局函数。 如果某一个函数(全局函数或类的成员函 数)定义为另一个类的友元函数,需要在那个类 中用friend关键字声明,友元函数并不是类的 成员,它的定义自然是在那个类的外面。3.简述结构化的程序设计、面向对象的程序 设计的基本思想。解答要点:结构化的程序设计将数据和对数 据的操作分离,程序是由一个个的函数组成的, 面向对象的程序设计将数据和操作封装在一起, 程序是由一个个对象组成的,对象之间通过接口 进行通信,它能够较好地支持程序代码的复用。4.结构struct 和类class有什么异同?解答要点:struct和class都可以定义类, 但是缺省访问权限说明时,struct的成员是公

11、 有的,而class的成员是私有的。在C+冲, struct 可被class代替。三、找出下面程序(或程序段)中的语法错误, 并予以纠正(每小题4分,共8分)(1)程序功能是倒序输出各给定的字符串。#in clude void mai n()char5=H(-Tiirsv=seconcr=Thircr=Foli=F丑hchar-sf rwL sf rEJ sfaL sf roin二wh=e(AH5)宀prinmc=,cp+三+o=hars25=h宀 Tirsv=seconcr=Thircr=Folih=F丑oharS25W 0lrFirsv=seconcr=Thircr=FO 二 whi_e(

12、AH5 二 whi_e(A5r占 rinfW%c=cp+i) pri ntf(%s,*(cp+i);int i; 应为int i=0;(2)程序功能是将各个平方根值放入数组中。#in elude void mai n()int max,a,i;sca nf(%d%d,max,a);double xmax;for (i=0;imax;i+) xi=sqrt(a*i);1增加#include 2sca nf(%d%d,max,a); 应为sca nf(%d%d,&max, &a);3double xmax; 改为:double *x=new doublemax; delete x;四、(8分)下列

13、shape类是一个表示形状的抽 象类,area()为求图形面积的函数,total() 则是一个通用的用以求不同形状的图形面积总 和的函数。请从shape类派生三角形类 (triangle)、矩形类(rectangle ),并给出具 体的求面积函数class shapepublic:virtual float area( )=0;float total(shape *s ,int n)float sum=0.0;for(i nt i=0;i area();return sum;class Tria ngle:public Shapepublic:Triangle(double h,double

14、w)H=h;W=w;double Area() con streturn H*W*0.5; private:double H,W;;class Recta ngle:public Shapepublic:Rectangle(double h,double w)H=h;W=w;double Area()co nstreturn H*W;private:double H,W;五、(6分)完成顺序查找函数f_seq()。其过 程是:从表头开始,根据给定的模式,逐项与表 中元素比较。如果找到所需元素,则查找成功, 并打印出它在表中的顺序号。如果查找整个表仍 未找到所需对象,则查找失败#in clude

15、 void f_seq(char *list,char *object,intlen)/list 指针数组,指向字符串/object 模式串/le n 表的长度char *p;int strcmp(char *s,char *t);p=list;while ( ) / plist+lenif (strcmp(*p,object)=0) break;else ; / p+if (pnext=NULLp=head-next; head-n ext=NULL;while( ) / p!=NULL或 ptemp仁head; ; / head=p;temp2=p;p=p-n ex t; ; / temp

16、2-next=temp1;或head-n ext=temp1;/Match while state nmentretur n head; / 返回逆置后的链表的头结点一、选择填空题(共20小题,每小题2分,共 40 分)。1.关于C+与C语言关系的描述中,(4)是错 误的。a.C语言是C+语言的一个子集b.C语言与C+语言是兼容的C.C+语言对C语言进行了一些改进d.C+语言和C语言都是面向对象的2按照标识符的要求,(1)符号不能组成标识 符。a.连接符b.下划线c.大小写字母d.数字字符3.为了避免嵌套的if-else语句的二义性,C语 言规定else总是与(3)组成配对关系。a.缩排位置相

17、同的ifb.在其之前未配对的ifc.在其之前未配对的最近的ifd.同一行上的if4.在int a 3=1,3,2,4,5,6,0;中, a22的值是(3)。a.1b.Oc.6d.25.设char *s ;,以下正确的表达式是(2)。a.s=computer;b.*s=computer;c.*s=computer;d.*s=c;6.对于int *pa5;的描述中,(4 )是正确的。a.pa是一个指向数组的指针,所指向的数组是5个int型元素b.pa是一个指向某数组中第5个元素的指针, 该元素是int型变量c.pa 5表示某个元素的第5个元素的值d.pa是一个具有5个元素的指针数组,每个元 素是一

18、个int型指针7.在下列表示引用的方法中,(1 )是正确的。已知:int m=10;a.int &x=m;b.int &y=10;c.int &z;d.float &t=&m;8.下列for循环的次数为(2)。for( i=0, x=0; !x&iclass Bpublic:B()B(int i)b=i;virtual void virfun()coutB:virfun() called.n;private:int b;class D:public Bpublic:D()D(int i,int j):B(i)d=j;private:int d;void virfun()coutvirfun()

19、;void main()D *pd=new D; fun(pd);四、(9分)下面的程序可以统计命令行第一个 参数中出现的字母个数,请填充下面空白,完成 程序。#include vstdi o.h#include vctype hvoid main(int argc, argv;)char *str;int count=0;if(argc2)exit(1);str=;while(*str)if(isalpha( ) count+;printf(n 字母个数:%dn,count);提示:int isalpha(int ch函数功能是检查ch是否是字母五、 (8分)定义一个字符栈类Stack (包

20、括类 的实现)。数据成员包括一个存放字符的数组 stck和一个栈指针toso栈数组的尺寸由常量 SIZE确定。栈的基本操作为Push()和Pop()。六、 (10分)完成下面的函数,对有n个元素的数 组a,使数组元素按逆序排列。void inverse(int *a, int n)七、(12分)下面的函数统计子字符串 substr在 字符串str中出现的次数,如果substr在str中 不出现,则返回值0。请完成该函数。int str_count(char *substr, char *str)一、 选择填空题I、 D 2、A 3、C 4、C 5、B 6、D 7、A 8、B 9、A 10、DI

21、I、 A 12、A 13、C 14、B 15、C 16、D 仃、C 佃、A 佃、C 20、D二、 问答题1、 虚析构函数有什么作用?解答要点:对象销毁时,需要调用析构函数。在多态调用时,是用基类的指针访问派生类的对象。如果析构函数是非虚函数,则基类指针只能访问基类的析构函数,而不能访问派生类的析构函数,导致派生类对象销毁时,没有调用派生类的析构函数,只是调用了基类的析构函数。如果把析构函数定义成虚函数,则可克服 这个问题。2、 拷贝构造函数在哪几种情况下调用?解答要点:用一个对象初始化另一个对象时当用对象作为函数参数传递时当函数返回对象时3、 函数重载与函数覆盖有什么不同,它们与多态有什么关系

22、?解答要点:函数重载是指函数名相同,而函数的参数个数或类型不同;覆盖是指在派生类中成员函数与基类成员函数的函数名、参数个数、类型与返回值均相同; C+中正是通过虚函数的覆盖,实现多态的功能。4、 C+继承是如何工作的?解答要点:继承使得派生类能够使用基类的公有和保护成员,从而实现代码的复用,派生类可以增加成员,也可以隐藏和覆盖基类的成员。对于公有继承,基类成员的访问权限在派生类保持不变。5、 类与对象有什么区别?解答要点:类是类型,是对象的抽象,对象是类的具体实例。一个类可以有多个对象,每个对象都有自己的存储单元,而类不占存储单元。三、 运行结果为: D:virfun() called.四、 填空 char * argv

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1