




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c+语言程序设计 期末考试试题及答案一、填空1在类中必须声明成员函数的 原型 ,成员函数的 实现 部分可以写在类外。2如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 引用 类型或 指针 类型。3 抽象 类只能作为基类使用,而不能声明它的对象。4进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参 个数 或 类型 必须不同。5通过一个 常 对象只能调用它的常成员函数,不能调用其他成员函数。6函数的递归调用是指函数直接或间接地调用 自身 。7拷贝构造函数的形参必须是 本类对象的引用 。二、阅读下列程序,写出其运行时的输出结果 如果程序运行时会出现错误,请简要描述错误原因。1请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。(1)程序:#include #include class base private: char msg30; protected: int n; public: base(char s,int m=0):n(m) strcpy(msg,s); void output(void) coutnendlmsgendl; ;class derived1:public baseprivate:int n;public:derived1(int m=1):base(base,m-1) n=m; void output(void) coutnendl; base:output();class derived2:public derived1private:int n;public:derived2(int m=2):derived1(m-1) n=m; void output(void) coutnendl; derived1:output();int main()base b(base class,1);derived2 d;b.output();d.output();运行结果:1base class210base(2)程序:#include class samppublic:void setij(int a,int b)i=a,j=b;samp()coutdestroying.iendl;int getmuti()return i*j; protected:int i;int j;int main()samp *p;p=new samp5;if(!p)coutallocation errorn;return 1;for(int j=0;j5;j+)pj.setij(j,j);for(int k=0;k5;k+)coutmutik is: pk.getmuti()endl;deletep;return 0;运行结果:muti0 is:0muti1 is:1muti2 is:4muti3 is:9muti4 is:16destroying.4destroying.3destroying.2destroying.1destroying.02请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为本小题得分。(1)程序:#include #include class vector public: vector(int s=100); int& elem(int ndx); void display(void); void set(void); vector(void); protected: int size; int *buffer;vector:vector(int s)buffer=new intsize=s;int& vector:elem(int ndx)if(ndx=size)couterror in indexendl;exit(1);return bufferndx;void vector:display(void)for(int j=0; jsize; j+)coutelem(j)endl;void vector:set(void)for(int j=0; jsize; j+)elem(j)=j+1;vector:vector(void)delete buffer;int main()vector a(10);vector b(a);a.set();b.display();运行结果:12345678910最后出现错误信息,原因是:声明对象b是进行的是浅拷贝,b与a共用同一个buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。(2)程序:#includeclass cat public: cat(); cat(const &cat); cat(); int getage() return *itsage; void setage( int age ) *itsage=age; protected: int * itsage;cat:cat()itsage=new int;*itsage=5;cat:cat()delete itsage;itsage=null;int main()cat a;coutas age:a.getage()endl;a.setage(6);cat b(a);coutas age:a.getage()endl;coutbs age:b.getage()endl;a.setage(7);coutas age:a.getage()endl;coutbs age:b.getage()endl;运行结果:as age:5as age:6bs age:6as age:7bs age:7最后出现错误信息,原因是:声明对象b是进行的是浅拷贝,b与a共用同一个buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。三、阅读下列程序及说明和注释信息,在方框中填写适当的程序段,使程序完成指定的功能 程序功能说明:从键盘读入两个分别按由小到大次序排列的整数序列,每个序列10个整数,整数间以空白符分隔。用这两个序列分别构造两个单链表,每个链表有10个结点,结点的数据分别按由小到大次序排列。然后将两个链表合成为一个新的链表,新链表的结点数据仍然按由小到大次序排列。最后按次序输出合并后新链表各结点的数据。 程序运行结果如下,带下划线部分表示输入内容,其余是输出内容:1 3 5 7 9 11 13 15 17 192 4 6 8 10 12 14 16 18 201 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20#include #include /类定义部分template class node private: node *next; /指向后继节点的指针 public: t data; /数据域 node (const t& item, node* ptrnext = null); / 构造函数 void insertafter(node *p); /在本节点之后插入一个同类节点p node *deleteafter(void); /删除本节点的后继节点,返回其地址 node *nextnode(void) const; / 获取后继节点的地址;template class linkedlist private: node *front, *rear; / 表头和表尾指针 node *prevptr, *currptr; /记录表当前遍历位置的指针,由插入和删除操作更新 int size; / 表中的元素个数 int position; / 当前元素在表中的位置序号。由函数reset使用 node *getnode(const t& item,node *ptrnext=null); / 生成新节点,数据域为item,指针域为ptrnext void freenode(node *p); /释放节点 void copylist(const linkedlist& l); / 将链表l 拷贝到当前表 /(假设当前表为空)。被拷贝构造函数、operator=调用 public: linkedlist(void); / 构造函数 linkedlist(const linkedlist& l); /拷贝构造函数 linkedlist(void); / 析构函数 linkedlist& operator= (const linkedlist& l);/重载赋值运算符 int listsize(void) const; /返回链表中元素个数(size) int listempty(void) const; /size为0时返回true,否则返回false void reset(int pos = 0); /将指针currptr移动到序号为pos的节点, /prevptr相应移动,position记录当前节点的序号 void next(void); /使prevptr和currptr移动到下一个节点 int endoflist(void) const; / currptr等于null时返回true, 否则返回false int currentposition(void) const; /返回数据成员position void insertfront(const t& item); /在表头插入一个数据域为item的节点 void insertrear(const t& item); /在表尾添加一个数据域为item的节点 void insertat(const t& item); /在当前节点之前插入一个数据域为item的节点 void insertafter(const t& item); /在当前节点之后插入一个数据域为item的节点 t deletefront(void); /删除头节点,释放节点空间,更新prevptr、currptr和size void deleteat(void); /删除当前节点,释放节点空间,更新prevptr、currptr和size t& data(void); / 返回对当前节点成员data的引用 void clearlist(void); / 清空链表:释放所有节点的内存空间。;/类实现部分略.template void mergelist(linkedlist* la, linkedlist* lb,linkedlist* lc)/合并链表la和lb,构成新链表lc。/函数结束后,程序的数据所占内存空间总数不因此函数的运行而增加。 while ( !la-listempty() &!lb-listempty() if (la-data()data() lc-insertrear(la-data(); la-deleteat(); else lc-insertrear(lb-data(); lb-deleteat(); while ( !la-listempty() ) lc-insertrear(la-data(); la-deleteat(); while ( !lb-listempty() ) lc-insertrear(lb-data(); lb-deleteat();int main() linkedlist la, lb, lc; int item, i;/读如数据建立链表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 追寻李白教学课件
- 家庭照护对农业生产力的影响与路径优化
- 创意戏剧与音乐结合下幼儿综合素养的培养
- 国殇的教学课件
- 湖泊沉积物保护-洞察及研究
- 水生动物行为生态学-洞察及研究
- 浙江工商大学杭州商学院《土壤肥料学通论实验》2023-2024学年第二学期期末试卷
- 电子科技大学中山学院《界面交互设计》2023-2024学年第二学期期末试卷
- 铁门关职业技术学院《工程力学A(1)》2023-2024学年第二学期期末试卷
- 山西农业大学《色彩鉴赏与创意(文史类)》2023-2024学年第二学期期末试卷
- 修理工安全试题及答案
- 地面地砖检修方案(3篇)
- 公司工会内控管理制度
- 水发能源考试题及答案
- 2025年一年级语文1-8单元期末考试复习基础知识点默写清单(有答案)
- 2025年重症医学科ICU护理质量控制计划
- 食堂燃气培训试题及答案
- 产业协同创新对制造业升级的促进机制研究
- 2025陕西中考:语文必考知识点
- 泥浆消纳协议书
- 2025-2030北京市大健康产业发展决策及未来经营模式战略规划研究报告
评论
0/150
提交评论