C++語言程序設計-期末考試試題及答案_第1頁
C++語言程序設計-期末考試試題及答案_第2頁
C++語言程序設計-期末考試試題及答案_第3頁
C++語言程序設計-期末考試試題及答案_第4頁
C++語言程序設計-期末考試試題及答案_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C++語言程序設計

期末考試試題及答案

姓名學號班號

題二(1)二(2)總

一、填空

1.在類中必須聲明成員函數(shù)的原型,成員函數(shù)

的實現(xiàn)部分可以寫在類外。

2.如果需要在被調函數(shù)運行期間,改變主調函數(shù)中實

參變量的值,則函數(shù)的形參應該是引用類型

或指針類型。

3.抽象類只能作為基類使用,而不能聲明它

的對象。

4.進行函數(shù)重載時,被重載的同名函數(shù)如果都沒有用

const修飾,則它們的形參個數(shù)或類型必

須不同。

5.通過一個」對象只能調用它的常成員函數(shù),不

能調用其他成員函數(shù)。

6.函數(shù)的遞歸調用是指函數(shù)直接或間接地調用

自身。

7.拷貝構造函數(shù)的形參必須是本類對象的引

用O

二、閱讀下列程序,寫出其運行時的輸出結果

如果程序運行時會出現(xiàn)錯誤,請簡要描述錯誤原

因。

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

最后出現(xiàn)錯誤信息,原因是:聲明對象b是進行的

是淺拷貝,b與a共用同一個buffer,程序結束前

調用析構函數(shù)時對同一內存區(qū)進行了兩次釋放。

(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

最后出現(xiàn)錯誤信息,原因是:聲明對象b是進行的

是淺拷貝,b與a共用同一個buffer,程序結束前

調用析構函數(shù)時對同一內存區(qū)進行了兩次釋放。

三、閱讀下列程序及說明和注釋信息,在方框中填寫適

當?shù)某绦蚨?,使程序完成指定的功?/p>

程序功能說明:從鍵盤讀入兩個分別按由小到大次

序排列的整數(shù)序列,每個序列10個整數(shù),整數(shù)間以空

白符分隔。用這兩個序列分別構造兩個單鏈表,每個鏈

表有10個結點,結點的數(shù)據(jù)分別按由小到大次序排列。

然后將兩個鏈表合成為一個新的鏈表,新鏈表的結點數(shù)

據(jù)仍然按由小到大次序排列。最后按次序輸出合并后新

鏈表各結點的數(shù)據(jù)。

程序運行結果如下,帶下劃線部分表示輸入內容,

其余是輸出內容:

135791113151719

2468101214161820

1234567891011121314151617181920

include<iostream.h>

#include<stdlib.h>

//類定義部分

template<classT>

classNode

(

private:

Node<T>*next;〃指向后繼節(jié)點的指針

public:

Tdata;〃數(shù)據(jù)域

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

=NULL);//構造函數(shù)

voidlnsertAfter(Node<T>*p);〃在本節(jié)點

之后插入一個同類節(jié)點p

Node<T>*DeleteAfter(void);〃刪除本節(jié)

點的后繼節(jié)點,返回其地址

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

后繼節(jié)點的地址

);

template<classT>

classLinkedList

(

private:

Node<T>*front,*rear;//表頭和表尾指針

Node<T>*prevPtr,*currPtr;〃記錄表當前

遍歷位置的指針,由插入和刪除操作更新

intsize;//表中的元素個數(shù)

intposition;//當前元素在表中的位置序號。

由函數(shù)Reset使用

Node<T>*GetNode(constT&

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

//

生成新節(jié)點,數(shù)據(jù)域為item,指針域為ptrNext

voidFreeNode(Node<T>*p);//釋放節(jié)點

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

將鏈表L拷貝到當前表

//(假設

當前表為空)。被拷貝構造函數(shù)、operator二調用

public:

LinkedList(void);//構造函數(shù)

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

貝構造函數(shù)

-LinkedList(void);//析構函數(shù)

LinkedList<T>&operator=(const

LinkedList<T>&L);〃重載賦值運算符

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

素個數(shù)(size)

intListEmpty(void)const;//size為0時返

回TRUE,否則返回FALSE

voidReset(intpos=0);〃將指針currPtr移

動到序號為pos的節(jié)點,

〃prevPtr"相

應移動,pos用on記錄當前節(jié)點的序號

voidNext(void);〃使prevPtr和currPtr移

動到下一個節(jié)點

intEndOfList(void)const;//currPtr等于

NULL時返回TRUE,否則返回FALSE

intCurrentPosition(void)const;〃返回數(shù)

據(jù)成員position

voidlnsertFront(constT&item);〃在表頭

插入一個數(shù)據(jù)域為item的節(jié)點

voidlnsertRear(constT&item);〃在表尾

添加一個數(shù)據(jù)域為item的節(jié)點

voidlnsertAt(constT&item);〃在當前節(jié)

點之前插入一個數(shù)據(jù)域為item的節(jié)點

voidlnsertAfter(constT&item);〃在當前

節(jié)點之后插入一個數(shù)據(jù)域為item的節(jié)點

TDeleteFront(void);//刪除頭節(jié)點,釋放節(jié)

點空間,更新prevPtr、currPtr和size

voidDeleteAt(void);//刪除當前節(jié)點,釋放節(jié)

點空間,更新prevPtr、currPtr和size

T&Data(void);//返回對當前節(jié)點成員data

的引用

voidClearList(void);//清空鏈表:釋放所有

節(jié)點的內存空間。

);

〃類實現(xiàn)部分略……

template<classT>

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

lb,LinkedList<T>*Ic)

(

〃合并鏈表la和lb,構成新鏈表lco

//函數(shù)結束后,程序的數(shù)據(jù)所占內存空間總數(shù)不因

此函數(shù)的運行而增加。

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

(

if(la->Data()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論