




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
練習(xí)題(一)
一、編程題。根據(jù)程序要求,寫出函數(shù)的完整定義。
1.寫一個函數(shù),找出給定字符串中大寫字母字符(即‘A'」Z'這26個字母)的個數(shù)(如
字符串"ChinaComputerWrold"中大寫字母字符的個數(shù)為3個)。
函數(shù)的原型:intCalcCapital(char*str);
函數(shù)參數(shù):str為所要處理的字符串;
函數(shù)返回值:所給字符串中數(shù)字字符的個數(shù)
2.寫一個函數(shù),用遞歸函數(shù)完成以下運算:
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,右邊表達式運算結(jié)果。
提示:你可以使用遞歸表達式:sum(n)=sum(n-1)-(1/n)*(-1)n
3.給定新數(shù)值,在一個按節(jié)點所存放數(shù)值從大到小排序的鏈表中,找適當(dāng)位置插一個
新節(jié)點,仍保持有序的鏈表,寫一個函數(shù),完成此操作。
函數(shù)的原型:Node*InsNode(Node*head,intnewValue);
其中,鏈表節(jié)點的定義如下:
structNodee{
intValue;〃存放數(shù)值
Node*next;〃指向鏈表中的下一個節(jié)點
);
函數(shù)參數(shù):函數(shù)的第一個參數(shù)head指向鏈表頭-節(jié)點的指針,如果鏈表為空,則head
的值為NULL。第二個參數(shù)newValue為所給定的插入新節(jié)點的新數(shù)值。
函數(shù)返回值:當(dāng)成功地插入新的節(jié)點時,函數(shù)返回指向新鏈表頭-節(jié)點的指針,否則,
若不能申請到內(nèi)存空間,則返回NULL。
4.寫一個函數(shù),找出給定數(shù)組中具有最小值的元素。
函數(shù)的原型:
charMinCode(charcharAry[]);
函數(shù)參數(shù):charAry所要處理的字符數(shù)組名;
函數(shù)返回值:返回具有最小ASCII碼的字符。
二、理解問答題:
下面的文件stack.h是一個堆棧類模板Stack的完整實現(xiàn)。在這個文件中,首先定義
了一個堆棧元素類模板Stackitem,然后,在這個類的基礎(chǔ)上定義了堆棧類模板Stack。
在Stack中使用鏈表存放堆棧的各個元素,top指針指向鏈表的第一個節(jié)點元素,bottom
指針指向鏈表的最后一個節(jié)點元素,成員函數(shù)push()將一個新節(jié)點元素加入(壓進)到堆
棧頂部,pop()從堆棧頂部刪除(彈出)一個節(jié)點元素。為方便起見,程序中加上了行號。
閱讀程序,根據(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.~Stackitem(){}
13.private:
14.Typeitem;
15.Stackitem*nextitem;
16.friendclassStack;
17.};
18.1定義模板類Stack…j
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()的實現(xiàn)。
33.〃從堆棧頂彈出一個節(jié)點,并返回該節(jié)點的值
34.template
35.TypeStack::pop()
36.(
37.Stackitem*ptop;〃指向頂部節(jié)點的臨時指針
38.TyperetVai;//返回值
39._______(C);
40.retVal=top->item;
41.top=top->nextitem;
42.deleteptop;
43.returnretVai;
44.}
45.〃模板類Stack的函數(shù)成員push()的實現(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。的實現(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.程序為:
intCalcCapital(char*str)
(
if(str==NULL)return0;〃判斷字符指針是否為空
intnum_of_Capital=0;〃記錄大寫字母字符個數(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.程序為:
floatsum(intn)
(
if(n==1)return1;
elsereturnsum(n-1)-(1.0/n)*(-1)n;
)
3.程序為:
Node*insNode(Node*head,intnewValue)
(
Node*newNode=newNode;//申請新的節(jié)點空間
if(newNode==NULL)returnNULL;//
newNode->data=newValue;〃填充新節(jié)點的內(nèi)容
newNode->next=NULL;
Node*pre,*cur;
Pre=head;
if(head==NULL)head=newNode;//插入至U空鏈表的表頭
else
if(newValue>=head->Value){
newNode->next=head;
head=newNode;〃插入至I」鏈表的表頭
)
else{〃在鏈表尋找插入點
Node*cur,*pre=head;
while(pre->next!=NL)LL){
cur=pre->next;
if(newValue>=cur->Value)break;
elsepre=cur;
)
if(pre->next!=NULL)newNode->next=cur;〃若非末尾,則有下一節(jié)點
pre->next=newNode;〃將新節(jié)點插入
)
)
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,答:不正確。因為類Stackitem模板類的定義中用到了模板類Stack,Stack
還沒有定義,所以,必須先聲明Stack是一個模板類,否則,編譯程序就不知道標(biāo)識符Stack
代表什么樣的含義,無法進行編譯。
問題3,答:第11、26和47行的const修飾的都是函數(shù)的參數(shù),表示在這個函數(shù)體
中不能改它所修飾的參數(shù)的值。第27行的const修飾的是模板類Stack的成員函數(shù)
is_empty(),它表示在函數(shù)is_empty()的函數(shù)體中不能改變?nèi)魏螖?shù)據(jù)成員的值。
問題4,答:析構(gòu)函數(shù)中主要是釋放存放的各個節(jié)點所占涌空間。因為Stack對象在其
生存期間可能加入了很多節(jié)點,從堆中申請了一些內(nèi)存空間。這些空間應(yīng)隨著對象的消亡而
釋放掠,所以,需要在析構(gòu)函數(shù)中釋放這些空間。
問題5,答:
語句號
1
2
3
4
5
對/錯
錯
對
錯
錯
對
一,[理解問答題]請回答下面有模板的定義問題:
1.下列模板的定義是否合法的?若為非法的,請簡單扼要說明理由。
(1)非法的,兩次聲明不一樣
(2)合法的
(3)非法的,兩個類型參數(shù)的名字不能相同
(4)非法的,參數(shù)U沒有類型說明
(5)合法的
2.關(guān)于類List的如下定義中有若干錯誤,請指出其所在行號并改正(但不求補充
實現(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:
13Listitem*front;〃有錯
14Listitem*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ù)實現(xiàn)有以下錯誤:
(1)函數(shù)的參數(shù)x為const參數(shù),不能在函數(shù)體中被改變
(2)在函數(shù)中應(yīng)該創(chuàng)建一個臨時對象,這個對象的內(nèi)容由參數(shù)x的內(nèi)容運算而
來
(3)函數(shù)返回的應(yīng)是臨時對象,而不是參數(shù)
正確的函數(shù)實現(xiàn)為:
templateval_aryinv(constval_ary&x)
(
INTARYret_array(x);〃利用拷貝構(gòu)造函數(shù)構(gòu)造臨時對象
for(inti=0;i<x.size();i++)ret_array*=-1;〃符號取反
returnret_array;〃返回臨時對象
)
或者
templateval_aryinv(constval_ary&x)
(
INTARYret_array(x.size());〃構(gòu)造一個?與x長度相同的對象
for(inti=0;i<x.size();i++)ret_array=x*(-1);〃符號取反
returnret_array;〃返回臨時對象
)
問題4.答:重載了取數(shù)組下標(biāo)的運算符'口'
三,[理解問答題]
答:輸出結(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個對象
Thereare1objects//還有一個對象Sub1
(1)下列敘述中錯誤的是
A)二叉樹不是線性結(jié)構(gòu)
B)線性表是非線性結(jié)構(gòu)
C)線性鏈表是線性結(jié)構(gòu)
D)棧與隊列是線性結(jié)構(gòu)
(2)一棵二叉樹中所含最少的結(jié)點數(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)表、隊列、堆棧和樹
B)邏輯結(jié)構(gòu)
C)存儲結(jié)構(gòu)
D)邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)
(5)在面向?qū)ο蠓椒ㄖ校瑢崿F(xiàn)信息隱蔽是通過對象的某一特性來實現(xiàn)的,這個特性是
A)封裝
B)類
C)對象
D)繼承
(1)在軟件生存周期中,能準(zhǔn)確地確定軟件系統(tǒng)必須做什么和必須具備哪些功能的階段是
A)概要設(shè)計
B)需求分析
C)可行性分析
D)詳細設(shè)計
(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)系運算的敘述中正確的是
A)投影、選擇、連接是從二維表的行的方向來進行運算
B)投影、選擇、連接是從二維表的列的方向來進行運算
C)并、交、差是從二維表的列的方向來進行運算
D)以上三種說法都不對
(5)數(shù)據(jù)的獨立性是數(shù)據(jù)庫技術(shù)的重要特點之一。所謂數(shù)據(jù)獨立性是指
A)數(shù)據(jù)與程序獨立存放
B)不同的數(shù)據(jù)被存放在不同的文件中
C)不同的數(shù)據(jù)只能被對應(yīng)的應(yīng)用程序所使用
D)以上三種說法都不對
(1)以下關(guān)于友元函數(shù)的敘述不正確的是
A)友元函數(shù)提供了類之間數(shù)據(jù)共享的一個途徑
B)一個友元函數(shù)可以訪問任何類的任何成員
C)友元函數(shù)破壞了數(shù)據(jù)的封裝
D)友元函數(shù)增加了程序設(shè)計的靈活性
(2)設(shè)有語句
intn,m:
chara[5],b;
cin2>>n>>a>>m>>b;
為了分別將10和20分別賦給n和m,look賦給a,t賦給b,則正確的輸入為
A)10,,lookM20,t,
B)10Mlookn10
C)10look20t
D)10look20t
(3)對于以下帶參數(shù)的main()函數(shù)的第二形參,voidmain(in
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電行業(yè)智能家電產(chǎn)品設(shè)計與開發(fā)方案
- (高清版)DB62∕T 2184-2024 合作豬選育技術(shù)規(guī)程
- 外科疾病護理課件
- 2025年中國漁竿行業(yè)市場規(guī)模調(diào)研及投資前景研究分析報告
- 2025年中國養(yǎng)老生態(tài)園行業(yè)市場規(guī)模調(diào)研及投資前景研究分析報告
- 2025年中國消防水泵行業(yè)市場前景預(yù)測及投資價值評估分析報告
- CSCO惡性血液病診療指南(2025)解讀
- 徐州市中小學(xué)教學(xué)研究室高一物理向心加速度教案
- 2025年刮泥機項目規(guī)劃申請報告
- 2025年中小學(xué)教師編制考試教育政策法規(guī)模擬試題及答案(共三套)
- 2022年12月山東省普通高中學(xué)業(yè)水平合格性考試語文仿真模擬試卷C(答題卡)
- 塑膠原料來料檢驗指導(dǎo)書
- 人教版音樂三年級下冊知識總結(jié)
- 共點力平衡的應(yīng)用-完整版PPT
- 新版中日交流標(biāo)準(zhǔn)日本語初級下同步測試卷及答案(第30課)
- 建筑物的防雷及安全用電電子教案
- 中國近現(xiàn)代史社會實踐報告-2000字
- 系桿拱橋工程測量施工方案
- ISA-300+使用-300技術(shù)使用說明書
- 高層建筑“一棟一冊”消防安全檔案
- 柳洲學(xué)校學(xué)生儀容儀表日常檢查記錄表
評論
0/150
提交評論