c練習題及答案_第1頁
c練習題及答案_第2頁
c練習題及答案_第3頁
c練習題及答案_第4頁
c練習題及答案_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、練習題(一)  一、編程題。根據程序要求,寫出函數的完整定義。   1寫一個函數,找出給定字符串中大寫字母字符(即A-Z這26個字母)的個數(如字符串”China Computer Wrold”中大寫字母字符的個數為3個)。函數的原型:int CalcCapital (char *str); 函數參數: str為所要處理的字符串;函數返回值:所給字符串中數字字符的個數2寫一個函數,用遞歸函數完成以下運算:sum(n) = 1 1/2 + 1/3 1/4 + -(1/n)*(-1)n (其中n>0) 函數原型:float sum(int n); 函數參數:n為正整數。

2、函數返回值:相應于給定的n,右邊表達式運算結果。提示:你可以使用遞歸表達式:sum(n) = sum(n-1) -(1/n)*(-1)n   3. 給定新數值,在一個按節(jié)點所存放數值從大到小排序的鏈表中,找適當位置插一個新節(jié)點,仍保持有序的鏈表,寫一個函數,完成此操作。 函數的原型:Node * InsNode(Node * head, int newValue); 其中,鏈表節(jié)點的定義如下: struct Nodee int Value; /存放數值 Node * next; /指向鏈表中的下一個節(jié)點 ; 函數參數:函數的第一個參數head指向鏈表頭一節(jié)點的指針,如果鏈表為空,則h

3、ead的值為NULL。第二個參數newValue為所給定的插入新節(jié)點的新數值。 函數返回值:當成功地插入新的節(jié)點時,函數返回指向新鏈表頭一節(jié)點的指針,否則,若不能申請到內存空間,則返回NULL。 4寫一個函數,找出給定數組中具有最小值的元素。 函數的原型: char MinCode(char charAry); 函數參數:charAry所要處理的字符數組名; 函數返回值:返回具有最小ASCII碼的字符。   二、理解問答題: 下面的文件stack.h是一個堆棧類模板Stack的完整實現。在這個文件中,首先定義了一個堆棧元素類模板StackItem,然后,在這個類的基礎上定義了堆棧類模

4、板Stack。在Stack中使用鏈表存放堆棧的各個元素,top指針指向鏈表的第一個節(jié)點元素,bottom指針指向鏈表的最后一個節(jié)點元素,成員函數push()將一個新節(jié)點元素加入(壓進)到堆棧頂部,pop()從堆棧頂部刪除(彈出)一個節(jié)點元素。為方便起見,程序中加上了行號。閱讀程序,根據程序后面的問題作出相應解答。  1.         /*- -*/2.         /* 文件stack.h */3. 

5、0;       /*- -*/4.         template <class Type>5.         class Stack;6.         /* 定義模板類StackItem */7.      

6、0;  template<class Type>8.         class StackItem9.         10.     public:11.     StackItem(const Type & elem):item(elem) 12.     StackItem() 1

7、3.     private:14.     Type item;15.     StackItem * nextItem;16.     friend class Stack<Type>17.     ;18.     /* 定義模板類Stack */19.     template <class

8、Type>20.     class Stack21.     22.     public:23.     Stack():top( NULL), _(A)_ 24.     Stack();25.     Type pop();26.     void push(const Type &);27.&#

9、160;    bool is_empty() const return _(B) _ ; 28.     private:29.     StackItem<Type> * top;30.     StackItem<Type> * bottom;31.     ;32.     /模板類Stack的函數成員pop()的實現。33. 

10、;    /從堆棧頂彈出一個節(jié)點,并返回該節(jié)點的值34.     template<class Type>35.     Type Stack<Type>:pop()36.     37.     StackItem<Type> *ptop; /指向頂部節(jié)點的臨時指針38.     Type retVal; /返回值39. 

11、;    _(C) _;40.     retVal = top->item;41.     top = top->nextItem;42.     delete ptop;43.     return retVal;44.     45.     /模板類Stack的函數成員push()的實現46. &#

12、160;   template<class Type>47.     void Stack<Type>:push(const Type & newItem)48.     49.     StackItem<Type> *pNew = new StackItem<Type>( newItem);50.     _(D)_;51.   

13、;  if (bottom = NULL) bottom = top = pNew;52.     else _(E)_;53.     54.     /模板類Stack的析構函數Stack()的實現55.     template<class Type>56.     Stack<Type>:Stack()57.    

14、 58.     StackItem<Type> *p = top, *q;59.     while(p != NULL) 60.     q = p->nextItem;61.     delete p;62.     p = q;63.     64.       問題1: 程序中有幾

15、處填空,將它們完成。 (A)_(B)_(C)_(D)_(E)_  問題2:程序第4,5行有什么作用?如果沒有這兩行語句,程序還正確嗎?問題3:程序中多處出現const,請分別說明它們各自表示什么含義。問題4:程序中模板類Stack的析構函數主要做了什么事情?為什么要這么做? 問題5:下面的程序使用了stack.h文件中定義的類模板,請說明下列程序中定義堆棧對象的語句(1-5)是否正確。 #include “stack.h”void main() Stack q1; /1Stack<float> q2; /2Stack<float> q3(10); /3Stac

16、k<float> q410; /4Stack<float> *q5 = new Stack<int> /5 /. delete q5;練習題(一)參考答案一,編程題答案 1.         程序為: int CalcCapital (char *str) if (str = NULL) return 0; /判斷字符指針是否為空  int num_of_Capital = 0; /記錄大寫字母字符個數的變量,初值為0  for(int i=0; stri !

17、= 0x0; i+) if (stri <= 'A' && stri >= 'Z') num_of_ Capital +; /若是大寫字母,則總數加1  return num_of_ Capital; /返回大寫字母字符數  2程序為: float sum(int n) if (n = 1) return 1; else return sum(n-1) -(1.0/n)*(-1)n;   3程序為: Node * insNode(Node * head, int newValue) Node * newN

18、ode = new Node; /申請新的節(jié)點空間 if (newNode = NULL)return NULL;/   newNode->data = newValue; /填充新節(jié)點的內容 newNode->next = NULL;   Node *pre, *cur; Pre = head;   if (head = NULL) head = newNode; /插入到空鏈表的表頭 else if(newValue>=head->Value) newNode->next=head; head = newNode; /插入到鏈表的

19、表頭 else /在鏈表尋找插入點 Node *cur,*pre = head; while(pre->next != NULL) cur = pre->next; if(newValue >= cur->Value) break; else pre = cur; if(pre->next!= NULL) newNode->next = cur;/若非末尾,則有下一節(jié)點 pre->next = newNode; /將新節(jié)點插入 return head;   4程序可以有多種寫法,下面是其中一種   char MinCode(char charAry,int len=10) char mixCode = 0x0; for(int i=0; i <len; i+) if (charAry i < mixCode) mixCode = stri; return mixCode;   二、理解問答題: 問題1,答:(A)       

溫馨提示

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

評論

0/150

提交評論