《C++ Primer》5th 課後練習 第四章 表達式 1~10

練習4.1 表達式 5 + 10 * 20 / 2 的求值結果是多少?

105

練習4.2 根據4.12節中的表,在下述表達式的合理位置添加括號,使得添加括號後運算對象的組合順序與添加括號前一致。

/*- (a)*/ *vec.begin()
/*- (b)*/ *vec.begin() + 1
*(vec.begin())
(*(vec.begin()))+1

練習4.3 C++語言沒有明確規定大多數二元運算符的求值順序,給編譯器優化留下了餘地。這種策略實際上是在代碼生成效率和程序潛在缺陷之間進行了權衡,你認爲這可以接受嗎?請說出你的理由。

我認爲可以接受,提高效率的代價是對程序員提出更高要求。

練習4.4 在下面的表達式中添加括號,說明其求值過程及最終結果。編寫程序編譯該(不加括號的)表達式並輸出結果驗證之前的推斷。

12 / 3 * 4 + 5 * 15 + 24 % 4 / 2 = 91

(((12/3) * 4) + (5*15)) + ((24%4) / 2) = 91

練習4.5 寫出下列表達式的求值結果。

-30 * 3 + 21 / 5  // -90+4 = -86
-30 + 3 * 21 / 5  // -30+63/5 = -30+12 = -18
30 / 3 * 21 % 5   // 10*21%5 = 210%5 = 0
-30 / 3 * 21 % 4  // -10*21%4 = -210%4 = -2

練習4.6 寫出一條表達式用於確定一個整數是奇數還是偶數。

if(x|1) cout << "even"<<endl; else cout << "odd" << endl;

練習4.7 溢出是何含義?寫出三條將導致溢出的表達式。

當計算的結果超出該類型所能表示的範圍時就會產生溢出。

short svalue = 32767; ++svalue; // -32768
unsigned uivalue = 0; --uivalue;  // 4294967295
unsigned short usvalue = 65535; ++usvalue;  // 0

練習4.8 說明在邏輯與、邏輯或及相等性運算符中運算對象的求值順序。

先確定第一個取值,再考慮是否求第二個。

練習4.9 解釋在下面的if語句中條件部分的判斷過程。

const char *cp = "Hello World";
if (cp && *cp)

先判斷cp是否爲空指針,cp不是空指針,前面一部份爲真,再判斷後面*cp是否是空字符串,不是,後面爲真,整體爲真。

練習4.10 爲while 循環寫一個條件,使其從標準輸入中讀取整數,遇到 42 時停止。

while(cin >> n && n != 42);
發佈了290 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章