C Primer第五版 4 7節練習

2021-07-05 07:03:52 字數 1675 閱讀 8923

練習4.21:編寫一段程式,使用條件運算子從vector 中找到哪些元素的值是奇數,然後將這些奇數值翻倍。

練習4.22:本節的示例程式將成績劃分成high pass,pass 和fail三種,擴充套件改程式使其進一步將60分到75分之間的成績設定為low pass。要求程式包含兩個版本:乙個版本只使用條件運算子;另外乙個版本使用1個或多個if語句。哪個版本的程式更容易理解呢?為什麼

練習4.23: 因為運算子的優先順序問題,下面這條表示式無法通過編譯。根據4.12節中的表(第147頁)指出它的問題在**?應該如何修改?

string s = 「word」;

string p1 = s + s[s.size()-1] == 『s』 ? 「」:」s」;

練習4.24:本節示例程式將成績劃分成high pass,pass 和fail三種,它的依據是條件運算子滿足右結合率。假如條件運算子滿足的是左結合律,求值過程將是怎樣的?

答 練習4.21程式見雲盤

練習4.22程式見雲盤,if語句的版本更好理解,分支清晰,可讀性更強。

練習4.3 + 高於 == 高於 ?:高於 =

因此程式相當於 p1 = [(s + s[s.size()-1]==』s』)] ?」」 : 「s」

改正:p1 = s +[(s.[s.size()-1]==』s』 )? 「 」:」s」]

練習 4.24

答:網路參***:題目沒看懂(grade<60)?」fail」:(grade>90)?」high pass」:」pass」;

2015/5/29 備註:上面是網上參***

string finalgrade = (grade > 90) ? 」high pass」 : (grade > 60) ? 「pass」 : 「fail」

條件運算子滿足右結合律,因此加括號後等價於

string finalgrade = (grade > 90) ? 「high pass」 : ((grade)>60 ? 「pass」 : 「fail」)

以整體的觀念去看條件運算子 ,假如條件運算子滿足左結合律

加括號後 相當於 string finalgrade = ((grade > 90) ? 「high pass」: (grade >60) ) ? 「pass」 : 「fail」

網上的參***直接篡改了表示式的位置,肯定是錯的,滿足左還是右結合律,去加括號,但條件運算子本身的定義是不變的。個人見解,不排除也許是我的觀點是錯的。

練習4.21

#include 

#include

using

namespace

std;

int main()

cout

<< endl;

return

0;}

練習4.22-1

#include 

#include

using

namespace

std;

int main()

return

0;}

練習4.22-2

#include 

using

namespace

std;

int main()

return

0;}

C Primer第五版 2 4 3節練習

練習2.30 對於下面的這些語句,請說明物件被宣告成了頂層const還是底層const?const int v2 0 v2的值不能被改變,所以這是乙個頂層const int v1 v2 int p1 v1,r1 v1 const int p2 v2 p2存放的是v2的位址,不能間接改變v2的值,但p...

C Primer第五版 2 5 3節練習

練習 2.36 關於下面的 請指出乙個變數的型別以及程式結束時它們各自的值。include int main 練習 2.37 賦值是會產生引用的一類典型表示式,引用的型別就是左值的型別。也就是說,如果i是int,則表示式 i x的型別是int 根據這一特點,請指出下面的 中每乙個變數的型別和值。in...

C Primer第五版 3 2 2節練習

練習3.2 編寫一段程式從標準輸入中一次讀入一整行,然後修改該程式使其一次讀入乙個詞。練習3.3 請說明string類的輸入運算子和getline函式分別是如何處理空白字元的。練習 3.4 編寫一段程式讀入兩個字串,比較其是否相等並輸出結果。如果不相等,輸出較大的那個字串。改寫上述程式,比較輸入的兩...