电大C语言程序设计期末考试试题及答案参考.docx
- 文档编号:28682882
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:17
- 大小:64.34KB
电大C语言程序设计期末考试试题及答案参考.docx
《电大C语言程序设计期末考试试题及答案参考.docx》由会员分享,可在线阅读,更多相关《电大C语言程序设计期末考试试题及答案参考.docx(17页珍藏版)》请在冰豆网上搜索。
电大C语言程序设计期末考试试题及答案参考
C++语言程序设计
期末考试试题及答案
姓名____________学号____________班号___________
题号
一
二
(1)
二
(2)
三
总分
成绩
一、填空
1.在类中必须声明成员函数的原型,成员函数的实现部分可以写在类外。
2.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是引用类型或指针类型。
3.抽象类只能作为基类使用,而不能声明它的对象。
4.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参个数或类型必须不同。
5.通过一个常对象只能调用它的常成员函数,不能调用其他成员函数。
6.函数的递归调用是指函数直接或间接地调用自身。
7.拷贝构造函数的形参必须是本类对象的引用。
二、阅读下列程序,写出其运行时的输出结果
如果程序运行时会出现错误,请简要描述错误原因。
1.请在以下两题中任选一题,该题得分即为本小题得分。
如两题都答,则取两题得分之平均值为本小题得分。
(1)程序:
#include
#include
classBase
{private:
charmsg[30];
protected:
intn;
public:
Base(chars[],intm=0):
n(m)
{strcpy(msg,s);
}
voidoutput(void)
{cout< } }; classDerived1: publicBase { private: intn; public: Derived1(intm=1): Base("Base",m-1) {n=m;} voidoutput(void) {cout< Base: : output(); } }; classDerived2: publicDerived1 { private: intn; public: Derived2(intm=2): Derived1(m-1) {n=m;} voidoutput(void) {cout< Derived1: : output(); } }; intmain() { BaseB("BaseClass",1); Derived2D; B.output(); D.output(); } 运行结果: 1 BaseClass 2 1 0 Base (2)程序: #include classSamp {public: voidSetij(inta,intb){i=a,j=b;} ~Samp() {cout<<"Destroying.."< } intGetMuti(){returni*j;} protected: inti; intj; }; intmain() { Samp*p; p=newSamp[5]; if(! p) {cout<<"Allocationerror\n"; return1; } for(intj=0;j<5;j++) p[j].Setij(j,j); for(intk=0;k<5;k++) cout<<"Muti["< " < delete[]p; return0; } 运行结果: Muti[0]is: 0 Muti[1]is: 1 Muti[2]is: 4 Muti[3]is: 9 Muti[4]is: 16 Destroying..4 Destroying..3 Destroying..2 Destroying..1 Destroying..0 2.请在以下两题中任选一题,该题得分即为本小题得分。 如两题都答,则取两题得分之平均值为本小题得分。 (1)程序: #include #include classVector { public: Vector(ints=100); int&Elem(intndx); voidDisplay(void); voidSet(void); ~Vector(void); protected: intsize; int*buffer; }; Vector: : Vector(ints) { buffer=newint[size=s]; } int&Vector: : Elem(intndx) { if(ndx<0||ndx>=size) { cout<<"errorinindex"< exit (1); } returnbuffer[ndx]; } voidVector: : Display(void) { for(intj=0;j cout< } voidVector: : Set(void) { for(intj=0;j Elem(j)=j+1; } Vector: : ~Vector(void) { delete[]buffer; } intmain() { Vectora(10); Vectorb(a); a.Set(); b.Display(); } 运行结果: 1 2 3 4 5 6 7 8 9 10 最后出现错误信息,原因是: 声明对象b是进行的是浅拷贝,b与a共用同一个buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。 (2)程序: #include classCAT { public: CAT(); CAT(const&CAT); ~CAT(); intGetAge(){return*itsAge;} voidSetAge(intage) {*itsAge=age;} protected: int*itsAge; }; CAT: : CAT() { itsAge=newint; *itsAge=5; } CAT: : ~CAT() { deleteitsAge; itsAge=NULL; } intmain() { CATa; cout<<"a'sage: "< a.SetAge(6); CATb(a); cout<<"a'sage: "< cout<<"b'sage: "< a.SetAge(7); cout<<"a'sage: "< cout<<"b'sage: "< } 运行结果: a'sage: 5 a'sage: 6 b'sage: 6 a'sage: 7 b'sage: 7 最后出现错误信息,原因是: 声明对象b是进行的是浅拷贝,b与a共用同一个buffer,程序结束前调用析构函数时对同一内存区进行了两次释放。 三、阅读下列程序及说明和注释信息,在方框中填写适当的程序段,使程序完成指定的功能 程序功能说明: 从键盘读入两个分别按由小到大次序排列的整数序列,每个序列10个整数,整数间以空白符分隔。 用这两个序列分别构造两个单链表,每个链表有10个结点,结点的数据分别按由小到大次序排列。 然后将两个链表合成为一个新的链表,新链表的结点数据仍然按由小到大次序排列。 最后按次序输出合并后新链表各结点的数据。 程序运行结果如下,带下划线部分表示输入内容,其余是输出内容: 135791113151719 2468101214161820 1234567891011121314151617181920 #include #include //类定义部分 template classNode { private: Node public: Tdata;//数据域 Node(constT&item,Node voidInsertAfter(Node Node Node }; template classLinkedList { private: Node Node intsize;//表中的元素个数 intposition;//当前元素在表中的位置序号。 由函数Reset使用 Node //生成新节点,数据域为item,指针域为ptrNext voidFreeNode(Node voidCopyList(constLinkedList //(假设当前表为空)。 被拷贝构造函数、operator=调用 public: LinkedList(void);//构造函数 LinkedList(constLinkedList ~LinkedList(void);//析构函数 LinkedList intListSize(void)const;//返回链表中元素个数(size) intListEmpty(void)const;//size为0时返回TRUE,否则返回FALSE voidReset(intpos=0);//将指针currPtr移动到序号为pos的节点, //prevPtr相应移动,position记录当前节点的序号 voidNext(void);//使prevPtr和currPtr移动到下一个节点 intEndOfList(void)const;//currPtr等于NULL时返回TRUE,否则返回FALSE intCurrentPosition(void)const;//返回数据成员position voidInsertFront(constT&item);//在表头插入一个数据域为item的节点 voidInsertRear(constT&item);//在表尾添加一个数据域为item的节点 voidInsertAt(constT&item);//在当前节点之前插入一个数据域为item的节点 voidInsertAfter(constT&item);//在当前节点之后插入一个数据域为item的节点 TDeleteFront(void);//删除头节点,释放节点空间,更新prevPtr、currPtr和size voidDeleteAt(void);//删除当前节点,释放节点空间,更新prevPtr、currPtr和size T&Data(void);//返回对当前节点成员data的引用 voidClearList(void);//清空链表: 释放所有节点的内存空间。 }; //类实现部分略...... template voidMergeList(LinkedList { //合并链表la和lb,构成新链表lc。 //函数结束后,程序的数据所占内存空间总数不因此函数的运行而增加。 while(! la->ListEmpty()&&! lb->ListEmpty()) { if(la->Data()<=lb->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(); } } intmain() { LinkedList intitem,i; //读如数据建立链表la for(i=0;i<10;i++) { cin>>item; la.InsertRear(item); } la.Reset(); //读如数据建立链表lb for(i=0;i<10;i++) { cin>>item; lb.InsertRear(item); } lb.Reset(); MergeList(&la,&lb,&lc);//合并链表 lc.Reset(); //输出各节点数据,直到链表尾 while(! lc.EndOfList()) { cout< lc.Next();//使currPtr指向下一个节点 } cout< }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电大 语言程序设计 期末考试 试题 答案 参考