C練習(xí)題及解答_第1頁
C練習(xí)題及解答_第2頁
C練習(xí)題及解答_第3頁
C練習(xí)題及解答_第4頁
C練習(xí)題及解答_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

練習(xí)題(一)

一、編程題。根據(jù)程序要求,寫出函數(shù)的完整定義。

1.寫一個(gè)函數(shù),找出給定字符串中大寫字母字符(即'A'-Z這26個(gè)字母)的個(gè)數(shù)(如

字符串"ChinaComputerWrold”中大寫字母字符的個(gè)數(shù)為3個(gè))。

函數(shù)的原型:intCalcCapital(char*str);

函數(shù)參數(shù):str為所要處理的字符串;

函數(shù)返回值:所給字符串中數(shù)字字符的個(gè)數(shù)

2.寫一個(gè)函數(shù),用遞歸函數(shù)完成以下運(yùn)算:

sum(n)=1-1/2+1/3-1/4+...-(1/n)*(-1)n(其中n>0)

函數(shù)原型:floatsum(intn);

函數(shù)參數(shù):n為正整數(shù)。

函數(shù)返回值:相應(yīng)于給定的n,右邊表達(dá)式運(yùn)算結(jié)果。

提示:你可以使用遞歸表達(dá)式:sum(n)=sum(n-1)-(1/n)*(-1)n

3.給定新數(shù)值,在一個(gè)按節(jié)點(diǎn)所存放數(shù)值從大到小排序的鏈表中,找適當(dāng)位置插一個(gè)

新節(jié)點(diǎn),仍保持有序的鏈表,寫一個(gè)函數(shù),完成此操作.

函數(shù)的原型:Node*lnsNode(Node*head,intnewValue);

其中,鏈表節(jié)點(diǎn)的定義如下:

structNodee{

intValue;〃存放數(shù)值

Node*next;〃指向鏈表中的下一個(gè)節(jié)點(diǎn)

);

函數(shù)參數(shù):函數(shù)的第一個(gè)參數(shù)head指向鏈表頭一節(jié)點(diǎn)的指針,如果鏈表為空,則head

的值為NULL。第二個(gè)參數(shù)newValue為所給定的插入新節(jié)點(diǎn)的新數(shù)值。

函數(shù)返回值:當(dāng)成功地插入新的節(jié)點(diǎn)時(shí),函數(shù)返回指向新鏈表頭一節(jié)點(diǎn)的指針,否則,

若不能申請到內(nèi)存空間,則返回NULL。

4.寫一個(gè)函數(shù),找出給定數(shù)組中具有最小值的元素。

函數(shù)的原型:

charMinCode(charcharAry[]);

函數(shù)參數(shù):charAry所要處理的字符數(shù)組名;

函數(shù)返回值:返回具有最小ASCII碼的字符。

二、理解問答題:

下面的文件stack.h是一個(gè)堆棧類模板Stack的完整實(shí)現(xiàn)。在這個(gè)文件中,首先定義

了一個(gè)堆棧元素類模板Stackitem,然后,在這個(gè)類的基礎(chǔ)上定義了堆棧類模板Stack。

在Stack中使用鏈表存放堆棧的各個(gè)元素,top指針指向鏈表的第一個(gè)節(jié)點(diǎn)元素,bottom

指針指向鏈表的最后一個(gè)節(jié)點(diǎn)元素,成員函數(shù)push。將個(gè)新節(jié)點(diǎn)元素加入(壓進(jìn))到堆

棧頂部,pop()從堆棧頂部刪除(彈出)一個(gè)節(jié)點(diǎn)元素。為方便起見,程序中加上了行號。

閱讀程序,根據(jù)程序后面的問題作出相應(yīng)解答。

1./*---------------------------------------------------------------……

2./*********************文件stack.h

***************/

3./*---------------------------------------------------------------------------

4.template

5.classStack;

6./*****************定義模板類Stackitem

***************/

7.template

8.classStackitem

9.(

10.public:

11.Stackltem(constType&elem):item(elem){}

12.~Stackltem(){}

13.private:

14.Typeitem;

15.Stackitem*nextitem;

16.friendclassStack;

17.);

18I*****************定義板/avStack*********************/

19.template

20.classStack

21.(

22.public:

23.Stack():top(NULL),_____(A){)

24.~Stack。;

25.Typepop();

26.voidpush(constType&);

27.boolis_empty()const{return(B);}

28.private:

29.Stackitem*top;

30.Stackitem*bottom;

31.};

32.〃模板類Stack的函數(shù)成員pop()的實(shí)現(xiàn)。

33.〃從堆棧頂彈出一個(gè)節(jié)點(diǎn),并返回該節(jié)點(diǎn)的值

34.template

35.TypeStack::pop()

36.{

37.Stackitem*ptop;〃指向頂部節(jié)點(diǎn)的臨時(shí)指針

38.TyperetVal;//返回值

39.(C);

40.retVal=top->item;

41.top=top->nextitem;

42.deleteptop;

43.returnretVal;

44.}

45.〃模板類Stack的函數(shù)成員push。的實(shí)現(xiàn)

46.template

47.voidStack::push(constType&newltem)

48.(

49.Stackitem*pNew=newStackltem(newltem)

50.(D);

51.if(bottom==NULL)bottom=top=pNew;

52.else_____(E)_________;

53.)

54.〃模板類Stack的析構(gòu)函數(shù)~Stack。的實(shí)現(xiàn)

55.template

56.Stack:Stack()

57.(

58.Stackitem*p=top,*q;

59.while(p!=NULL){

60.q=p->nextitem;

61.deletep;

62.p=q;

63.)

64.)

問題1:程序中有幾處填空,將它們完成。

(A)_____________________________________________________

(B)_____________________________________________________

(C)_____________________________________________________

(D)_____________________________________________________

(E)_____________________________________________________

問題2:程序第4,5行有什么作用?如果沒有這兩行語句,程序還正確嗎?

問題3:程序中多處出現(xiàn)const,請分別說明它們各自表示什么含義。

問題4:程序中模板類Stack的析構(gòu)函數(shù)主要做了什么事情?為什么要這么做?

問題5:下面的程序使用了stack.h文件中定義的類模板,請說明下列程序中定義堆棧

對象的語句(1?5)是否正確。

#include“stack.h"

voidmain()

Stackq1;//1

Stackq2;//2

Stackq3(10);//3

Stackq4[10];//4

Stack*q5=newStack;//5

deleteq5;

)

答:

語句號

1

2

3

4

5

對/錯

一,編程題答案

1.程序?yàn)椋?/p>

intCalcCapital(char*str)

(

if(str==NULL)return0;〃判斷字符指針是否為空

intnum_of_Capital=0;〃記錄大寫字母字符個(gè)數(shù)的變量,初值為0

for(inti=0;str[i]!=0x0;i++)

if(str[i]<='A'&&str[i]>='Z')num_of_Capital++;〃若是大寫字母,則總

數(shù)加1

returnnum_of_Capital;〃返回大寫字母字符數(shù)

)

2.程序?yàn)椋?/p>

floatsum(intn)

(

if(n==1)return1;

elsereturnsum(n-1)-(1.0/n)*(-1)n;

)

3.程序?yàn)椋?/p>

Node*insNode(Node*head,intnewValue)

(

Node*newNode=newNode;〃申請新的節(jié)點(diǎn)空間

if(newNode==NULL)returnNULL;//

newNode->data=newValue;//填充新節(jié)點(diǎn)的內(nèi)容

newNode->next=NULL;

Node*pre,*cur;

Pre=head:

if(head==NULL)head=newNode;〃插入至ij空鏈表的表頭

else

if(newValue>=head->Value){

newNode->next=head;

head=newNode;〃插入到鏈表的表頭

)

else{〃在鏈表尋找插入點(diǎn)

Node*cur,*pre=head;

while(pre->next!=NULL){

cur=pre->next;

if(newValue>=cur->Value)break;

elsepre=cur;

)

if(pre->next!=NULL)newNode->next=cur;〃若非末尾,則有下一節(jié)點(diǎn)

pre->next=newNode;〃將新節(jié)點(diǎn)插入

returnhead;

4.程序可以有多種寫法,下面是其中一種

charMinCode(charcharAry[],intlen=10)

(

charmixCode=0x0;

for(inti=0;i

(

if(charAry[i]<mixCode)

mixCode=str[i];

)

returnmixCode;

)

二、理解問答題:

問題1,答:

(A)bottom(NULL)

(B)top==NULL;

(C)ptop=top;

(D)pNew->nextitem=top;

(E)top=pNew;

問題2,答:不正確。因?yàn)轭怱tackitem模板類的定義中用到了模板類Stack,Stack

還沒有定義,所以,必須先聲明Stack是一個(gè)模板類,否則,編譯程序就不知道標(biāo)識符Stack

代表什么樣的含義,無法進(jìn)行編譯。

問題3,答:第11、26和47行的const修飾的都是函數(shù)的參數(shù),表示在這個(gè)函數(shù)體

中不能改它所修飾的參數(shù)的值。第27行的const修飾的是模板類Stack的成員函數(shù)

is_empty(),它表示在函數(shù)is_empty()的函數(shù)體中不能改變?nèi)魏螖?shù)據(jù)成員的值。

問題4,答:析構(gòu)函數(shù)中主要是釋放存放的各個(gè)節(jié)點(diǎn)所占涌空間。因?yàn)镾tack對象在其

生存期間可能加入了很多節(jié)點(diǎn),從堆中申請了一些內(nèi)存空間。這些空間應(yīng)隨著對象的消亡而

釋放抻,所以,需要在析構(gòu)函數(shù)中釋放這些空間。

問題5,答:

語句號

2

3

4

5

對/錯

對.

一,[理解問答題]請回答下面有模板的定義問題:

1.下列模板的定義是否合法的?若為非法的,請簡單扼要說明理由。

(1)非法的,兩次聲明不一樣

(2)合法的

(3)非法的,兩個(gè)類型參數(shù)的名字不能相同

(4)非法的,參數(shù)U沒有類型說明

(5)合法的

2.關(guān)于類List的如下定義中有若干錯誤,請指出其所在行號并改正(但不求補(bǔ)充

實(shí)現(xiàn)成員函數(shù))。

1templateclassListitem;

2

3templateclassList

4{

5public:

6List():front(NULL),end(NULL){}〃有錯

7List(constList&);〃有錯

8-List();

9voidinsert(Listltem*ptr,elemTypevalue);〃有錯

10intremove(elemTypevalue);〃有錯

11intsize(){returnsize;}

12private:

13ListItern*front;〃有錯

14Listltem*end;〃有錯,以上錯均已改正

15);

二,[理解問答題]

問題1.答:程序的輸出結(jié)果為:

Sizeofval_array=10

Thevaluesofval_arraybeforecallinginv():

0123456789

Theresultofval_arrayaftercallinginv():

0-1-2-3-4-5-6-7-8-9

問題2.答:

題號

A

B

C

D

E

對/錯

問題3.答:該函數(shù)實(shí)現(xiàn)有以下錯誤:

(1)函數(shù)的參數(shù)x為const參數(shù),不能在函數(shù)體中被改變

(2)在函數(shù)中應(yīng)該創(chuàng)建一個(gè)臨時(shí)對象,這個(gè)對象的內(nèi)容由參數(shù)x的內(nèi)容運(yùn)算而

(3)函數(shù)返回的應(yīng)是臨時(shí)對象,而不是參數(shù)

正確的函數(shù)實(shí)現(xiàn)為:

templateval_aryinv(constval_ary&x)

(

INTARYret_array(x);〃利用拷貝構(gòu)造函數(shù)構(gòu)造臨時(shí)對象

for(inti=0;i<x.size();i++)ret_array*=-1;〃符號取反

returnret_array;//返回臨時(shí)對象

)

或者

templateval_aryinv(constval_ary&x)

(

INTARYret_array(x.size());〃構(gòu)造一個(gè)與x長度相同的對象

for(inti=0;i<x.size();i++)ret_array=x*(-1);〃符號取反

returnret_array;//返回臨時(shí)對象

)

問題4.答:重載了取數(shù)組下標(biāo)的運(yùn)算符'口'

三,[理解問答題]

答:輸出結(jié)果為:

classCla_Base:Hello!

classCla_Sub:2000〃動態(tài)聯(lián)編和函數(shù)重載的結(jié)果應(yīng)訪問

Cla_Sub

DisplyinclassCla_Basewithoutparameter!

classCla_Sub:Hi!

DisplyinclassCla_Subwithoutparameter!

Thereare6objects//Sub1,Cla_Sub[5]共建6個(gè)對象

Thereare1objects//還有一個(gè)對象Sub1

(1)下列敘述中錯誤的是

A)二叉樹不是線性結(jié)構(gòu)

B)線性表是非線性結(jié)構(gòu)

C)線性鏈表是線性結(jié)構(gòu)

D)棧與隊(duì)列是線性結(jié)構(gòu)

(2)一棵二叉樹中所含最少的結(jié)點(diǎn)數(shù)是

A)0

B)1

C)2

D)3

(3)在最壞情況下,冒泡排序所需要的比較次數(shù)為

A)n/2

B)(n+1)/2

C)n(n-1)/2

D)n(n+1)/2

(4)數(shù)據(jù)結(jié)構(gòu)分為

A)表、隊(duì)列、堆棧和樹

B)邏輯結(jié)構(gòu)

C)存儲結(jié)構(gòu)

D)邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)

(5)在面向?qū)ο蠓椒ㄖ?,?shí)現(xiàn)信息隱蔽是通過對象的某一特性來實(shí)現(xiàn)的,這個(gè)特性是

A)封裝

B)類

C)對象

D)繼承

(1)在軟件生存周期中,能準(zhǔn)確地確定軟件系統(tǒng)必須做什么和必須具備哪些功能的階段是

A)概要設(shè)計(jì)

B)需求分析

C)可行性分析

D)詳細(xì)設(shè)計(jì)

(2)在數(shù)據(jù)流圖(DFD)中,帶有名字的箭頭表示

A)模塊之間的調(diào)用關(guān)系

B)程序的組成成份

C)數(shù)據(jù)的流向

D)控制程序的執(zhí)行順序

(3)下述關(guān)于數(shù)據(jù)庫系統(tǒng)的敘述中正確的是

A)數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的一致性是指數(shù)據(jù)類型一致

B)數(shù)據(jù)庫系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù)

C)數(shù)據(jù)庫系統(tǒng)減少了數(shù)據(jù)冗余

D)數(shù)據(jù)庫系統(tǒng)避免了一切冗余

(4)下列關(guān)于關(guān)系運(yùn)算的敘述中正確的是

A)投影、選擇、連接是從二維表的行的方向來進(jìn)行運(yùn)算

B)投影、選擇、連接是從二維表的列的方向來進(jìn)行運(yùn)算

C)并、交、差是從二維表的列的方向來進(jìn)行運(yùn)算

D)以上三種說法都不對

(5)數(shù)據(jù)的獨(dú)立性是數(shù)據(jù)庫技術(shù)的重要特點(diǎn)之一。所謂數(shù)據(jù)獨(dú)立性是指

A)數(shù)據(jù)與程序獨(dú)立存放

B)不同的數(shù)據(jù)被存放在不同的文件中

C)不同的數(shù)據(jù)只能被對應(yīng)的應(yīng)用程序所使用

D)以上三種說法都不對

(1)以下關(guān)于友元函數(shù)的敘述不正確的是

A)友元函數(shù)提供了類之間數(shù)據(jù)共享的一個(gè)途徑

B)一個(gè)友元函數(shù)可以訪問任何類的任何成員

C)友元函數(shù)破壞了數(shù)據(jù)的封裝

D)友元函數(shù)增加了程序設(shè)計(jì)的靈活性

(2)設(shè)有語句

intn,m:

chara[5],b;

cin2>>n>>a>>m>>b;

為了分別將I。和20分別賦給n和m,look賦給a,t賦給b,則正確的輸入為

A)10,,look,,20,t'

B)10"look"10

C)10look20t

D)10look20t

(3)對于以卜帶參數(shù)的main。函數(shù)的第二形參,void

溫馨提示

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

評論

0/150

提交評論