第九章練習

2021-08-20 22:10:28 字數 3263 閱讀 6783

一、填空題

(1)執行異常,可以     預料    ,但不能避免,它是由

系統執行環境      造成的。

(2)在小型程式開發中,一旦發生異常所採取的方法一般是       將程式立即中斷執行       。

(3)c++的異常處理機制使得異常的引發和處理      不必      在同一函式中。

(4)如果預料某段程式(成對某個函式的呼叫)有可能發生異常,就將它放在       try語句塊       中。

(5)如果某段程式中發現了自己不能處理的異常,就可以使用throw《表示式》拋擲這個異常,其中的《表示式》表示    異常型別     。

(6)如果異常型別宣告是乙個省略號(....),catch子句便處理    任何     型別的異常,這段處理程式必須是catch塊的最後一段處理程式。

(7)異常介面宣告也稱為      丟擲列表          ,已經成為函式介面的一部分。

(8)函式原型的丟擲列表是乙個空表,表示該函式     不丟擲   任何型別的異常。

(9)為了使用異常類,需要包含相應的標頭檔案。其中,異常基礎類exception定義於   中,bad_ alloc定義於     中,其他異常類定義於       中。

(10)在異常處理程式中發現異常,可以在    catch       語句中用throw語句丟擲。

二、選擇題(至少選乙個,可以多選)

(1)處理異常用到3個保留字,除了try外,還有(   a  c  )。

a. catch                     b. class                    c. throw                      d. return

(2) catch.-.)般放在其他catch子句的後面,該子句的作用是(  b  )。

a.拋擲異常                                               b.捕獲所有型別的異常

c.檢測並處理異常                                     d.有語法錯誤

(3)關於異常的描述中,錯誤的是(   d  )。

a.異常既可以被硬體引發,又可以被軟體引發

b.執行異常可以預料,但不能避免,它是由系統執行環境造成的

c.異常是指從發生問題的**區域傳遞到處理問題的**區域的乙個物件

d.在程式執行中,一旦發生異常,程式立即中斷執行

(4)下列說法中錯誤的是(   c d  )。

a.引發異常後,首先在引發異常的函式內部尋找異常處理過程

b.  丟擲異常是沒有任何危險的

c.「丟擲異常」和「捕捉異常」兩種操作最好放在同乙個函式中

d.異常處理過程在處理完異常後,可以通過帶有引數的throw繼續傳播異常

三、判斷題

(1) try與catch總是結合使用的。             (對)

(2)乙個異常可以是除類以外的任何型別。(錯)

(3)丟擲異常後一定要馬上終止程式。    (錯)

(4)異常介面定義的異常參數列為空,表示可以引發任何型別的異常。  (錯)

(5)c++標準庫中不需要異常類,因為c++標準庫中很少發生異常。(錯)

(6)異常處理程式捕獲到異常後,必須馬上處理。          (錯)

(7)乙個異常只能在catch語句中再用throw語句丟擲。   (錯)

(8)當catch子句的異常型別宣告引數被初始化後,將從對應的try塊開始到異常被拋那處之間構造(且尚未析構)的所有自動物件進行析構。(對)

四、簡答題

(1)什麼叫異常處理?

答:異常處理分離了接收和處理錯誤**。這個功能理清了程式設計者的思緒,也幫助**增強了可讀性,方便了維護者的閱讀和理解。

異常處理(又稱為錯誤處理

)功能提供了處理程式執行時出現的任何意外或異常情況的方法。異常處理使用

try、

catch

和 finally

關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。

異常處理,是

程式語言

或計算機硬體裡的一種機制,用於處理軟體或資訊系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。

通過異常處理,我們可以對使用者在程式中的非法輸入進行控制和提示,以防程式崩潰

(2)c++的異常處理機制有何優點?

答:異常處理是執行錯誤的良好方法。某個庫軟體或者你的**提供了乙個機制,能在出現異常情況時發出訊號,則稱為丟擲異常。在程式的另乙個地方,需要新增合適的**來處理異常情況,稱為處理異常。它使得在異常的引發和處理不必在同一函式中。異常處理的目的是在異常發生時,盡可能的減小破壞,周密的善後,而不影響其他部分程式的執行。

五、程式分析題(分析程式,寫出程式的輸出結果)

1. using namespace std;  

2. class nomilk  

3. ;  

11.   

12. int main()  

13.   

27. catch(nomilk e)  

28.   

31. cout<<"end of program."<

32. return 0;  

33. }  

34. nomilk::nomilk()  

35. {}  

36. nomilk::nomilk(int how_many):count(how_many)  

37. {}  

38. int nomilk::get_money()  

39.   

寫出當分別輸人 4    2  和  4    0 兩組數後的輸出結果。

六、程式設計題

從健盤上輸人x的值,並計算y =ln(2x+ 1)的值,要求用異常處理」負數求對數」的情況。 

1. #include 

2. #include 

3. using  namespace  std;  

4. class cln  

5. ;

1. int main()  

2.     

14.     catch(cln e)  

15.       

18.      cout<<"end of program."<

19.      return 0;  

20.  }  

21. cln::cln(double x): y(x)  

22. {}  

23. double cln::get_y()  

24.   

執行結果:

第九章 9 2 1節練習

練習 9.3 構成迭代器範圍的迭代器有何限制?解答 這裡首先要清楚什麼是迭代器範圍 引用 乙個迭代器範圍 iterator range 由一對迭代器表示,兩個迭代器分別指向同乙個容器中的元素或者是尾元素之後的位置 one past the last element 再去 限制 引用 對構成範圍迭代器...

第九章 9 2 7節練習

練習 9.15 編寫程式,判定兩個vector是否相等。解答 include include using namespace std int main vectoriv1 iv o.begin iv o.end vectoriv2 iv o.begin 1,iv o.end cout iv o iv...

第九章 9 3 6節練習

練習9.31 第316也中刪除偶數值的元素並複製技術值元素的程式不能用於list或forward list。為什麼?修改程式,使之也能用於這些型別。解答 首先,316頁中的程式主要做的是插入和刪除操作,這個操作對於鍊錶容器來說不影響其迭代器和指標。不過,插入和刪除操作會讓其他容器的迭代器指標失效。所...