4.1、105
4.2、(a).*vec.begin() == *(vec.begin()); (b) *vec.begin() + 1 == *(vec.begin()+1)
4.3、我覺得可以接受(個人看法並非標準答案,僅作參考);這種缺陷只會求值順序對表示式的最後結果有影響的時候出現,而如果求值順序如果對最後結果有影響
那麼避免這種缺陷本身就是程式設計人員的責任,編譯器採用何種策略都是沒有關係的
4.4、(((12/3)*4)+(5*15)) + ((24%4)/2) == 91;
//p4_4.cpp
#include
using namespace std;
int main()
4.5a -86; b -18; c 0 d -2
4.6、 bool is_even = (inum%2 == 0) ? true:false;
4.7、表示式求值後得到的結果超出對應型別所能儲存的最大值或最小值
4.8、邏輯與與邏輯或都是從左向右;與:當且僅當左面物件求值不能確定表示式的結果才對右邊的表示式進行求值
相等性運算子物件的求值順序是沒有規定的
4.9、先判斷cp是乙個非空指標再判斷指向的值分空
4.10 while(cin >> num != 42)
4.11 (a>b&&b>c&&c>d)
4.12 先比較j和k大小再用返回值與i比較是否相等
4.13
(a). d = 3.0; i = 3; (b).i = 3 , d = 3.5;
4.14
if( 42 = i) 報錯
if(i = 42) 永遠為真
4.15
pi 是指標: dval = ival = *pi = 0;
4.16
(a).賦值運算子優先順序較低 if((p = getptr()) != 0);
(b).檢驗是否相等應該是 == ; if(i == 1024);
4.17 前置遞增運算子反會運算物件本身;後置遞增運算子返回未遞增之前物件的副本
4.18 會漏掉第乙個輸出而且會解引用尾後位址。
4.19
a 指標不為空,並且指標所指向的物件值不為0
b ival不為0 ival自增1也不為0(ival 既不等於-1也不等於0)
c 結果是未定義的,因為物件求值順序是不確定的
vec[ival] <= vec[ival+1];
++ival;
4.20、
a)*iter++ 合法,先對iter自加1再對iter解引用
b)(*iter)++, 不合法,*iter是string型別,字串沒有自增運算
c)*iter.empty(),*iter是string型別,沒有empty()成員
d)iter->empty() 合法
e)++*iter,不合法,
f) iter++->empty() ,合法,先檢驗iter是否為空再自增1;
4.21
//p4_21.cpp -- 使用條件運算子
#include
#include
using namespace std;
int main()
;for (auto i = ivec.cbegin(); i != ivec.cend(); ++i)
cout << *i << " ";
cout << endl;
for (auto& c : ivec)
for (auto i = ivec.cbegin(); i != ivec.cend(); ++i)
cout << *i << " ";
cout << endl;
return 0;
}4.22
finalgrade = (grade > 90) ? "high pass" : (grade > 75) ? "pass": (grade > 60) ? " low pass": "fail";
if(grade>90)
finalgrade = "high pass"
else if(grade > 75)
finalgrade = "pass"
else if(grade > 60)
finalgrade = "low pass"
else
finalgrade = "fail";
4.25
先按位取反,再左移6位
4.26
位置不夠
4.27
3 7 true true
4.28
4.29
4.30
(sizeof x) + y; sizeof( p->mem[i]); (sizeof a) < b sizeof(f())
4.31
對本例來說,前置和後置都不影響的,得到的結果都是一樣的
vector::size_type cnt = ivec.size();
for(vector::size_type ix = 0;
ix != ivec.size(); ix++,cnt--)
ivec[ix] = cnt;
4.32
遍歷陣列
4.33
如果somevalue 為真則執行++x,++y;如果somevalue 為假執行--x,--y;
4.34
a. if(fval) fval轉換成bool值,非0為true;0 為false
b. dval = fval + ival; //ival轉化為float型別與fval相加結果轉換為double型別賦給dval;
c. dval + ival * cval //cval 提公升為int型別和ival相乘結果轉換為double 再與dval 相加
4.35
a.發生了:'a'提公升為int型別與3相加再轉化為char 型別賦值給cval
b 發生了: ival提公升為float 與1.0相乘,ui轉換為float型別再減去乘積
c 發生了: ui提公升為float 乘積轉換為double
d 發生了:ival提公升為float 與fval相加和再提公升為double 與dval相加結果再轉換為char 型別
4.36
i *=static_cast(d);
4.37
(a) pv = const_cast(ps);//
(b) i = static_cast(*pc)
(c) pv = static_cast(&d);
(d) pc = static_cast(pv)
4.38
將j/i的結果強制轉換成double 型別初始化slope;
第7章 課後習題
函式模板 另一種是 類模板 是定義模板的關鍵字。或者typename 開始。或者函式引數的型別 個數不相同所進行的類似 操作。普通傳值引數的型別轉換機制。和關聯容器 三 選擇題 至少選乙個,可以多選 五 程式設計題 include include using namespace std templa...
第9章 課後習題
二 選擇題 至少選乙個,可以多選 1 處理異常用到3個保留字,除了try外,還有 ac a.catch b.class c.throw d.return 2 catch.般放在其他catch子句的後面,該子句的作用是 b a.拋擲異常 b.捕獲所有型別的異常 c.檢測並處理異常 d.有語法錯誤 3 ...
重學C 之《C Premer》課後習題第4章
if p getptr 0 if i 1024 vector v str auto iter v str.begin iter 合法,返回iter的解引用,然後iter自加 iter 不合法,string沒有過載 運算子 iter empty 不合法,先運算iter empty 無法對bool值進行...