




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
- C+期末考试题(一)期末考试题(一)c float x; x=(b-a)/(F-A); printf(“%dn“,(int)(3.14*x); 22 下面程序的运行结果是 2 5 8 11 14。 #include “iostream.h“ void main( ) int i=1; while (i class A public: A()cout int a =1,3,5,7,9; int *p =a,a+1,a+2,a+3,a+4; void main( ) printf(“%dt%dt%dn“,a4,*(a+2),*p1); printf(“%dt%dt%dn“,*(p+1)+a2,*(p+4)-*(p+0),*(a+3)%a4); 9 5 3 8 4 7 二、 问答题(每小题 5 分,共 20 分) 1 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能 会产生什么问题? 当对象含有指针数据成员, 并用它初始化同类型的另一个对象时, 缺省的拷贝构造函数只 能将该对象的数据成员复制给另一个对象, 而不能将该对象中指针所指向的内存单元也复制 过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。 2 简述成员函数、全局函数和友元函数的差别。 成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公 有、保护和私有数据成员) ,可以调用该类的其它成员函数(公有、保护和私有成员函数) , 可以调用全局函数。 如果友元函数是另一个类的公有成员函数, 则该类的成员函数也只能通 过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成 员函数或全局函数) 可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员 函数。 不是在类中定义的成员函数都是全局函数。 如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个 类中用 friend 关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。 3 简述结构化的程序设计、面向对象的程序设计的基本思想。 结构化的程序设计将数据和对数据的操作分离, 程序是由一个个的函数组成的, 面向对象 的程序设计将数据和操作封装在一起, 程序是由一个个对象组成的, 对象之间通过接口进行 通信,它能够较好地支持程序代码的复用。 4 结构 struct 和类 class 有什么异同? struct 和 class 都可以定义类,但是缺省访问权限说明时,struct 的成员是公有的,而 class 的成员是私有的。在 C+中,struct 可被 class 代替。 三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题 4 分,共 8 分) (1)程序功能是倒序输出各给定的字符串。 #include void main() char str5 =“First“,“Second“,“Third“,“Forth“,“Fifth“; char *cp =str4,str3,str2,str1,str0; int i; while(i void main() int max,a,i; scanf(“%d%d“,max,a); double xmax; for (i=0;i“ “scanf(“%d%d“,max,a);“应为“scanf(“%d%d“,“ “double xmax;“改为: “double *x=new doublemax;“ “delete x;“ 四、 (8 分)下列 shape 类是一个表示形状的抽象类,area( )为求图形面积的函数,total( ) 则是一个通用的用以求不同形状的图形面积总和的函数。请从 shape 类派生三角形类 (triangle)、矩形类(rectangle) ,并给出具体的求面积函数。 class shape public: virtual float area( )=0; ; float total(shape *s ,int n) float sum=0.0; for(int i=0;iarea( ); return sum; class Triangle:public Shape public: Triangle(double h,double w)H=h;W=w; double Area() constreturn H*W*0.5; private: double H,W; ; class Rectangle:public Shape public: Rectangle(double h,double w)H=h;W=w; double Area()constreturn H*W; private: double H,W; ; 五、 (6 分)完成顺序查找函数 f_seq( )。其过程是:从表头开始,根据给定的模式,逐项与 表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整 个表仍未找到所需对象,则查找失败 #include void f_seq(char *list,char *object,int len) /list 指针数组,指向字符串 /object 模式串 /len 表的长度 char *p; int strcmp(char *s,char *t); p=list; while (pnext=NULL ) return head; p=head-next;head-next=NULL; while(p!=NULL 或 p ) temp1=head; head=p; temp2=p; p=p-next; temp2-next=temp1;或 head-next=temp1; /Match while statenment return head; /返回逆置后的链表的头结点 - C+期末考试题(二)期末考试题(二)0|a void main( ) char a=0,b=9; float x; x=(b-a)/(F-B); printf(“%dn“,(int)(3.14*x); 22 以下程序的输出结果是*#*#*#$。 #include void main() int i; for (i=0;i #define N 100 class CStack public: CStack() top=0;coutpush (10); ptr-push(50); cout pop( ) class B public: B()cout int a =2,5,6,8,10; int *p =a,a+1,a+2,a+3,a+4; void main( ) printf(“%dt%dt%dn“,a4,*(a+2),*p1); printf(“%dt%dt%dn“,*(p+1)+a2,*(p+4)-*(p+0),*(a+3)%a4); 10 6 5 11 4 8 二、 问答题(每小题 5 分,共 20 分) 1 在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符? 拷贝构造函数是用一个对象初始化另一个对象时调用, 定义了拷贝构造函数通常涉及到对象 内有指针成员, 需要定义拷贝构造函数复制指针所指向的内存单元。 对象赋值也有同样的问 题,如果要将对象指针所指向的内存单元也赋给另一个对象,就必须重载赋值运算符。 2 简述局部作用域、全局作用域和类作用域的异同。 局部作用域只在局部块内有效, 如在一个函数内或在一个复合语句内, 它的生存期也在该块 内;全局作用域对整个应用程序都有效,它的生存期与应用程序一样长;类作用域在类内, 类的成员函数可以访问类的所有成员,而在类外,只能访问类的共有成员,类成员定义的次 序与其作用的范围没有关系。 3 虚函数是否一定要有 virtual 关键字?什么叫纯虚函数和抽象类?多态调用需要满足怎 样的条件? 不一定,派生类覆盖基类的成员函数时,没有 virtual 关键字,也是虚函数;纯虚函数没有 实现,它供派生类覆盖,纯虚函数的一般定义形式为: virtual 返回类型 函数名(参数表) = 0; 至少含有一个纯虚函数的类称为抽象类,抽象类不能定义对象,只能作为基类; 多态调用需要满足的条件: 被调用的成员函数是虚函数 用指针或引用调用虚函数 4 数组和链表是两种重要的线性数据结构,使用链表有什么优点? 数组需要一个大的、连续的存储单元,而链表是由一个个结点的小存储单元组成的。 链表便于数据的插入和删除。在数组中,要插入一个元素,需要将后面的元素往后移, 要删除一个元素要将后面的元素往前移,效率很低,链表可以克服这个缺点。 三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题 4 分,共 8 分) (1)程序功能是将某年某月的几号转换成这一年的第多少天。 #include struct date int y; int m; int d; int daytab2 =0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31; void main( ) int n; struct date d; int days (struct date *pd); printf(“Input:Year=? Mouth=? Day=? n“); scanf(“%d%d%d“,y,m,d); n=days( printf(“N=%d daysn“,n); int days (struct date *pd) int i,day,leap; day=pd.d; leap=pd.y%4=0 for(i=1;im;+i) day+=daytableapi; return(day); (1) “struct date int y; int m; int d; “应为“struct date int y; int m; int d;“ (2) “int daytab2 =0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,30,31,30,31;“应为 “int daytab213=0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,30,31,30,31;“ (3) “scanf(“%d%d%d“,y,m,d);“应为“scanf(“%d%d%d“,“ (4) “day=pd.d;“应为“day=pd-d;“ (5) “leap=pd.y%4=0“应为 “leap=pd-y%4=0“ (2)程序功能是打印 Object 类型变量的分量 a。 #include struct Objectint a;int b; void main() Object Object cout a = a; o-b = b; return o; (1)“Object“应为“Object“ (2)“Object“应为“Object“ (4)“return o;“应为“return *o;“ 四、 (8 分)下列 shape 类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则 是一个通用的用以求不同形状的图形面积总和的函数。 请从shape类派生梯形类 (trapezoid) 、 圆形类(circle) ,并给出具体的求面积函数 class shape public: virtual float area( )=0 ; float total(shape *s ,int n) float sum=0.0; for(int i=0;iarea( ); return sum; class shape public: virtual float area( )=0 ; float total(shape *s ,int n) float sum=0.0; for(int i=0;iarea( ); return sum; class Circle:public Shape public: Circle(double r)radius=r; double Area() constreturn 3.1416*radius*radius; private: double radius; ; class Trapezoid:public Shape public: Trapezoid(double top,double bottom,double high) T=top;B=bottom;H=high; double Area() constreturn (T+B)*H*0.5; private: double T,B,H; ; 五、 (6 分)函数 binary()实现折半查找,即查寻给定的单词 word 是否在关键字表 tab 中(关键字按字典顺序排列) ,折半查找每次把 word 与 tab 表中相应部分的位于中间位置的 关键字进行比较,最终结果:或者与某个关键字相同,或者与所有关键字都不相同。 #include struct keychar *keyword; int count; struct key *binary(char *word,struct key tab,int n) /word: a searching word /tab: keyword table /n: the sum of keywords int cond; struct key *low=tab; struct key *high= struct key *mid; while(lowkeyword)0) low=mid+1 ; else return mid; return(NULL); 六、 (8 分)下面程序实现汉诺塔游戏。规则是:三个立柱(分别为 A、B、C) ,开始 A 上串 有 n 个(用户输入值)大小不等的圆盘,大的在下,小的在上。要求借助于 B 把它们从 A 移到 C。每次只能移一个盘,而且三个柱上的盘总是大的在下,小的在上 #include int i=0; void main( ) int n; void movetower(int m,char from, char to,char usg); for (;) printf(“input the number of disks of hanoi tower:“); scanf(“%d“, if (n=0) break 或 return ; printf(“nn“); printf(“The moving step is as below:n“); movetower(n,A,C,B); printf(“tTotal:%dn“,i); void movetower (int m,char from, char to,char usg) void movedisk(char source,char destination); if (m!=1 或 m1 ) movetower(m-1,from,usg,to); movedisk(from,to) ; movetower(m-1, usg,to,from ); else movedisk(from,to); void movedisk(char source,char destination) i+; printf(“%c-%cn“,source,destination); - C+期末考试题(三)期末考试题(三) class B public: B() B(int i)b=i; virtual void virfun() coutvirfun(); void main() D *pd=new D; fun(pd); D:virfun() called. 四、 (9 分)下面的程序可以统计命令行第一个参数中出现的字母个数,请填充下面空白, 完成程序。 #include #include void 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 是否是字母 char * argv1 *str+ 五、 (8 分) 定义一个字符栈类 Stack(包括类的实现)。数据成员包括一个存放字符的数组 stck 和一个栈指针 tos。栈数组的尺寸由常量 SIZE 确定。栈的基本操作为 Push()和 Pop () 。 const int SIZE=27; cla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球气候变化与环境政策的考核试题及答案
- 2025年法务工作实务考试题及答案
- 2025年产业与经济关系研究相关知识考试试题及答案
- 2024年度浙江省护师类之主管护师综合练习试卷A卷附答案
- 2024年度浙江省护师类之主管护师通关提分题库及完整答案
- 2024年度浙江省二级造价工程师之建设工程造价管理基础知识通关提分题库及完整答案
- 2024年度浙江省二级造价工程师之建设工程造价管理基础知识全真模拟考试试卷A卷含答案
- 2024年度浙江省二级造价工程师之土建建设工程计量与计价实务综合练习试卷B卷附答案
- 2024年度浙江省二级造价工程师之土建建设工程计量与计价实务能力提升试卷A卷附答案
- 胃镜前后健康教育
- 公安行业大数据
- 医疗设备管理委员会工作制度及职责
- 高职单招数学集合专项练习题
- 二零二五年度仓储物流劳务派遣合同
- 道闸技术方案
- 基于遗传算法优化的BP神经网络在切削力预测上的应用
- 外研版(2024)七年级下册课文挖空(全册)(无答案)
- 人工智能导论第二章答案
- 2025年上半年内蒙古兴安盟招募“三支一扶”社区民生工作志愿服务高校毕业生报到及易考易错模拟试题(共500题)试卷后附参考答案
- 2025年河北交通投资集团公司招聘笔试题库含答案解析
- 机场行业安全生产培训
评论
0/150
提交评论