練習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 編寫一段程式讀入兩個字串,比較其是否相等並輸出結果。如果不相等,輸出較大的那個字串。改寫上述程式,比較輸入的兩...