2023年电大《C++语言程序设计》期末考试试卷最新版及超详细解析超详细解析答案.pdf

上传人:H****o 文档编号:91194071 上传时间:2023-05-22 格式:PDF 页数:4 大小:169.50KB
返回 下载 相关 举报
2023年电大《C++语言程序设计》期末考试试卷最新版及超详细解析超详细解析答案.pdf_第1页
第1页 / 共4页
2023年电大《C++语言程序设计》期末考试试卷最新版及超详细解析超详细解析答案.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《2023年电大《C++语言程序设计》期末考试试卷最新版及超详细解析超详细解析答案.pdf》由会员分享,可在线阅读,更多相关《2023年电大《C++语言程序设计》期末考试试卷最新版及超详细解析超详细解析答案.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 1 C+语言程序设计 期末考试试题及答案 一、填空 1在类中必须声明成员函数的 原型 ,成员函数的 实现 部分可以写在类外。2如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 引用 类型或 指针 类型。3 抽象 类只能作为基类使用,而不能声明它的对象。4进行函数重载时,被重载的同名函数如果都没有用 const 修饰,则它们的形参 个数 或 类型 必须不同。5 通过一个 常 对象只能调用它的常成员函数,不能调用其他成员函数。6 函数的递归调用是指函数直接或间接地调用 自身 。7拷贝构造函数的形参必须是 本类对象的引用 。二、阅读下列程序,写出其运行时的输出结果 如果程

2、序运行时会出现错误,请简要描述错误原因。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 Base private:int n;public:Derived1(int m=1):Base(Base,m-1)n=m

3、;void output(void)coutnendl;Base:output();class Derived2:public Derived1 private: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();运行结果:1 Base Class 2 1 0 Base (2)程序:#include class Samp public:

4、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:0 Muti1 is:1 Muti2

5、is:4 Muti3 is:9 Muti4 is:16 Destroying.4 Destroying.3 Destroying.2 Destroying.1 Destroying.0 2请在以下两题中任选一题,该题得分即为本小题得分。如两题都答,则取两题得分之平均值为 2 本小题得分。(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;

6、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);Vec

7、tor b(a);a.Set();b.Display();运行结果:1 2 3 4 5 6 7 8 9 10 最后出现错误信息,原因是:声明对象 b 是进行的是浅拷贝,b 与 a 共用同一个 buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。(2)程序:#include class 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

8、;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:5 as age:6 bs age:6 as age:7 bs age:7 最后出现错误信息,原因是:声明对象 b 是进行的是浅拷贝,b 与 a

9、共用同一个 buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。三、阅读下列程序及说明和注释-3-信息,在方框中填写适当的程序段,使程序完成指定的功能 程序功能说明:从键盘读入两个分别按由小到大次序排列的整数序列,每个序列 10 个整数,整数间以空白符分隔。用这两个序列分别构造两个单链表,每个链表有 10 个结点,结点的数据分别按由小到大次序排列。然后将两个链表合成为一个新的链表,新链表的结点数据仍然按由小到大次序排列。最后按次序输出合并后新链表各结点的数据。程序运行结果如下,带下划线部分表示输入内容,其余是输出内容:1 3 5 7 9 11 13 15 17 19 2 4 6

10、8 10 12 14 16 18 20 1 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*NextNo

11、de(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 Cop

12、yList(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,否则返回

13、 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 InsertR

14、ear(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 的引用

15、 void ClearList(void);/清空链表:释放所有节点的内存空间。;-4-/类实现部分略.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-Dele

16、teAt();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;/读如数据建立链表la for(i=0;i item;la.InsertRear(item);la.Reset();/读如数据建立链表lb for(i=0;i item;lb.InsertRear(item);lb.Reset();MergeList(&la,&lb,&lc);/合并链表 lc.Reset();/输出各节点数据,直到链表尾 while(!lc.EndOfList()cout lc.Data();lc.Next();/使currPtr指向下一个节点 cout endl;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁