C++语言程序设计-期末考试试题及答案_第1页
C++语言程序设计-期末考试试题及答案_第2页
C++语言程序设计-期末考试试题及答案_第3页
C++语言程序设计-期末考试试题及答案_第4页
C++语言程序设计-期末考试试题及答案_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++语言程序设计

期末考试试题及答案

姓名学号班号

题二(1)二(2)总

一、填空

1.在类中必须声明成员函数的原型,成员函数

的实现部分可以写在类外。

2.如果需要在被调函数运行期间,改变主调函数中实

参变量的值,则函数的形参应该是引用类型

或指针类型。

3.抽象类只能作为基类使用,而不能声明它

的对象。

4.进行函数重载时,被重载的同名函数如果都没有用

const修饰,则它们的形参个数或类型必

须不同。

5.通过一个」对象只能调用它的常成员函数,不

能调用其他成员函数。

6.函数的递归调用是指函数直接或间接地调用

自身。

7.拷贝构造函数的形参必须是本类对象的引

用O

二、阅读下列程序,写出其运行时的输出结果

如果程序运行时会出现错误,请简要描述错误原

因。

1.请在以下两题中任选一题,该题得分即为本小题得

分。如两题都答则取两题得分之平均值为本小题得分。

(1)程序:

#includeclassBase

<iostream.h>{private:

#include<string.h>charmsg[30];

protected:public:

intn;Derivedl(intm=1):

public:Base(HB

Base(charase",m-1)

s[],intm=0):n(m){n=m;}

voidoutput(void)

{strcpy(msg,s);{cout«n«endl;

)Base::output();

voidoutput(void))

);

{cout«n«endl<<classDerived2:public

msg«endl;Derivedl

)(

);private:

classDerivedl:publicintn;

Basepublic:

(Derived2(intm=2):

private:Derived

intn;

{n=m;}

voidoutput(void)BaseB("Base

{cout«n«endl;Class",1);

Derived2D;

Derived1::output();B.output();

)D.output();

);)

intmain()

运行结果:

1

BaseClass

2

1

0

Base

(2)程序:

#include<iostream.h>{public:

classSampvoidSetij(inta,int

b){i=a,j=b;}p=newSamp[5];

~Samp()if(!p)

({cout«"Allocation

cout«"Destroying.."<error\n";

<i«endl;return1;

))

intGetMuti(){returnfor(intj=0;j<5;j++)

巧;}pOl.SetijO.j);

protected:for(intk=0;k<5;k++)

inti;

intj;cout«"Muti["«k<<"]

);is:"

«p[k].Get

Muti()«endl;

intmain()delete[]p;

(return0;

Samp*p;)

运行结果:

Muti[0]is:O

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)程序:

#includeVector(int

<iostream.h>s=100);

include<stdlib.h>int&Elem(int

classVectorndx);

(void

public:Display(void);

voidSet(void);)

-Vector(void);(

protected:cout«"errorin

intsize;indexn«endl;

int*buffer;exit⑴;

);)

returnbuffer[ndx];

Vector::Vector(ints))

(

buffer=newvoid

int[size=s];Vector::Display(void)

)(

for(intj=0;j<size;

j++)

int&Vector::Elem(intcout«Elem(j)«en

ndx)dl;

()

if(ndx<O||ndx>=size

voidVector::Set(void))

(

for(intj=0;j<size;intmain()

j++)(

Elem(j)=j+1;Vectora(10);

)Vectorb(a);

a.Set();

Vector::-Vector(void)b.Display();

(

delete[]buffer;)

运行结果:

1

2

3

4

5

6

7

8

9

10

最后出现错误信息,原因是:声明对象b是进行的

是浅拷贝,b与a共用同一个buffer,程序结束前

调用析构函数时对同一内存区进行了两次释放。

(2)程序:

#include<iostream.h>age)

classCAT{*itsAge=age;}

(protected:

public:int*itsAge;

CAT(););

CAT(const&CAT);

〜CAT();CAT::CAT()

intGetAge(){return(

*itsAge;}itsAge=newint;

voidSetAge(int*itsAge=5;

)CATb(a);

cout«"a's

CAT::〜CAT()age:"«a.GetAge()«end

(I;

deleteitsAge;cout«"b's

itsAge=NULL;age:"«b.GetAge()«end

)I;

a.SetAge(7);

intmain()cout«na's

(age:"«a.GetAge()«end

CATa;I;

cout«"a'scout«nb's

age:"«a.GetAge()«endage:"«b.GetAge()«end

I;I;

a.SetAge(6);)

运行结果:

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<iostream.h>

#include<stdlib.h>

//类定义部分

template<classT>

classNode

(

private:

Node<T>*next;〃指向后继节点的指针

public:

Tdata;〃数据域

Node(constT&item,Node<T>*ptrnext

=NULL);//构造函数

voidlnsertAfter(Node<T>*p);〃在本节点

之后插入一个同类节点p

Node<T>*DeleteAfter(void);〃删除本节

点的后继节点,返回其地址

Node<T>*NextNode(void)const;//获取

后继节点的地址

);

template<classT>

classLinkedList

(

private:

Node<T>*front,*rear;//表头和表尾指针

Node<T>*prevPtr,*currPtr;〃记录表当前

遍历位置的指针,由插入和删除操作更新

intsize;//表中的元素个数

intposition;//当前元素在表中的位置序号。

由函数Reset使用

Node<T>*GetNode(constT&

item,Node<T>*ptrNext=NULL);

//

生成新节点,数据域为item,指针域为ptrNext

voidFreeNode(Node<T>*p);//释放节点

voidCopyList(constLinkedList<T>&L);//

将链表L拷贝到当前表

//(假设

当前表为空)。被拷贝构造函数、operator二调用

public:

LinkedList(void);//构造函数

LinkedList(constLinkedList<T>&L);〃拷

贝构造函数

-LinkedList(void);//析构函数

LinkedList<T>&operator=(const

LinkedList<T>&L);〃重载赋值运算符

intListSize(void)const;〃返回链表中元

素个数(size)

intListEmpty(void)const;//size为0时返

回TRUE,否则返回FALSE

voidReset(intpos=0);〃将指针currPtr移

动到序号为pos的节点,

〃prevPtr"相

应移动,pos用on记录当前节点的序号

voidNext(void);〃使prevPtr和currPtr移

动到下一个节点

intEndOfList(void)const;//currPtr等于

NULL时返回TRUE,否则返回FALSE

intCurrentPosition(void)const;〃返回数

据成员position

voidlnsertFront(constT&item);〃在表头

插入一个数据域为item的节点

voidlnsertRear(constT&item);〃在表尾

添加一个数据域为item的节点

voidlnsertAt(constT&item);〃在当前节

点之前插入一个数据域为item的节点

voidlnsertAfter(constT&item);〃在当前

节点之后插入一个数据域为item的节点

TDeleteFront(void);//删除头节点,释放节

点空间,更新prevPtr、currPtr和size

voidDeleteAt(void);//删除当前节点,释放节

点空间,更新prevPtr、currPtr和size

T&Data(void);//返回对当前节点成员data

的引用

voidClearList(void);//清空链表:释放所有

节点的内存空间。

);

〃类实现部分略……

template<classT>

voidMergeList(LinkedList<T>*la,LinkedList<T>*

lb,LinkedList<T>*Ic)

(

〃合并链表la和lb,构成新链表lco

//函数结束后,程序的数据所占内存空间总数不因

此函数的运行而增加。

while(!la->ListEmpty()&&!lb->ListEmpty())

(

if(la->Data()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论