下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C+ Primer(第4版)習(xí)題解答.txt51自信是永不枯竭的源泉,自信是奔騰不息的波濤,自信是急流奮進(jìn)的渠道,自信是真正的成功之母。書名: C+ Primer (第4版)習(xí)題解答作者:蔣愛軍李師賢梅曉勇來源:人民郵電出版社出版時(shí)間:2006 年 12 月ISBN:55108定價(jià): 45 元內(nèi)容介紹:C+ Primer (第4版)是C+大師Stanley B. Lippman豐富的實(shí)踐經(jīng)驗(yàn)和 C+而準(zhǔn)委員會原負(fù) 責(zé)人JosceLajoie對C+而準(zhǔn)深入理解的完美結(jié)合,更加入了 C+叱驅(qū)Barbara E. Moo在C+教學(xué)方面的真知灼見,C+ Primer( 4 版)習(xí)題解答2是初學(xué)者的最佳
2、 C+旨南,而且對于中高級程序員,也是不可或缺的參考書。本書正是這部 久負(fù)盛名的C+經(jīng)典教程的配套習(xí)題解答。書中提供了C+ Primer (第4版)中所有習(xí)題的參考答案。本書對使用C+ Primer (第4版)學(xué)習(xí)C+程序設(shè)計(jì)語言的讀者是非常理想的參考書。C+隹一門非常實(shí)用的程序設(shè)計(jì)語言,既支持過程式程序設(shè)計(jì),也支持面向?qū)ο?程序設(shè)計(jì),因而也是目前應(yīng)用極為廣泛的一門程序設(shè)計(jì)語言。在層出不窮的介紹 C+詡言的書籍中,C+ Primer是一本廣受歡迎的權(quán)威之作。強(qiáng)大的作者陣容、全面的內(nèi)容介紹、新穎的組織方式,使之深受C+短好者的青睞。本書編者在翻譯C+ Primer (第4版)的過程中也深深地感受
3、到了這一點(diǎn)。在學(xué)習(xí)一門程序設(shè)計(jì)語言的過程中,親自動手編寫代碼是一種極其有效的學(xué)習(xí)方式,可以對語言的理解和應(yīng)用達(dá)到事半功倍的效果,因此, C+ Primer (第4 版)中提供了許多習(xí)題,以幫助讀者加深對書中內(nèi)容的理解。本書試圖成為 C+ Primer (第4版)的配套書籍,根據(jù)C+ Primer (第4版)中所介紹的內(nèi)容提供配套習(xí)題的解答,書中所給出的“見 xx 節(jié)” ,均指參見C+Primer (第4版)的相應(yīng)章節(jié)。本書中給出的程序均已通過Microsoft Visual C+ .NET 2003 的編譯。源文件(實(shí)現(xiàn)文件)以.cpp 為擴(kuò)展名,頭文件為了與此對應(yīng)采用.hpp 為擴(kuò)展名(而沒
4、有采用編譯器的默認(rèn)擴(kuò)展名.h) 。為了節(jié)省篇幅,有些程序中將類的定義與使用類的主函數(shù)放在同一實(shí)現(xiàn)文件中。包含主函數(shù)的源文件根據(jù)習(xí)題編號命名。大多數(shù)模板的定義都沒有區(qū)分頭文件和實(shí)現(xiàn)文件(因?yàn)榫幷咚玫木幾g器支持模板的包含編譯模型)。另外,使用Visual C+ .NET 2003 編譯器的默認(rèn)設(shè)置會自動連接一些默認(rèn)庫,因此可能有某些所用到的庫函數(shù)或庫類型沒有顯式指明相應(yīng)的頭文件。使用其他編譯器的讀者需特別注意,必要時(shí)應(yīng)加上相應(yīng)的#include 指示。衷心希望本書能對使用 C+ Primer (第4版)學(xué)習(xí)C+斑言的讀者有所幫助。由于編者水平所限,書中不當(dāng)之處在所難免,懇請讀者批評指正。編者20
5、06 年 10月習(xí)題main查看所用的編譯器文檔,了解它所用的文件命名規(guī)范。編譯并運(yùn)行本節(jié)的 程序。C+ Primer( 4 版)習(xí)題解答 3 【解答】一般而言,C+編譯器要求待編譯的程序保存在文件中。C+程序中一般涉及兩類文件:頭文件和源文件。大多數(shù)系統(tǒng)中,文件的名字由文件名和文件后綴(又稱擴(kuò)展名)組成。文件后綴通常表明文件的類型,如頭文件的后綴可以是.h或 .hpp 等;源文件的后綴可以是.cc 或 .cpp 等,具體的后綴與使用的編譯器有關(guān)。通??梢酝ㄟ^編譯器所提供的聯(lián)機(jī)幫助文檔了解其文件命名規(guī)范。習(xí)題修改程序使其返回-1 。返回值-1 通常作為程序運(yùn)行失敗的指示器。然而,系統(tǒng)不同,如何
6、(甚至是否)報(bào)告main 函數(shù)運(yùn)行失敗也不同。重新編譯并再次運(yùn)行程序,看看你的系統(tǒng)如何處理main 函數(shù)的運(yùn)行失敗指示器?!窘獯稹抗P者所使用的Windows 操作系統(tǒng)并不報(bào)告main 函數(shù)的運(yùn)行失敗,因此,程序返回 -1 或返回 0 在運(yùn)行效果上沒有什么區(qū)別。但是,如果在DOS 命令提示符方式下運(yùn)行程序,然后再鍵入echo %ERRORLEVEL%令,則系統(tǒng)會顯示返回值-1。習(xí)題編一個(gè)程序,在標(biāo)準(zhǔn)輸出上打印“Hello, World ”?!窘獯稹?includeint main() std:cout Hello, World std:endl;return 0; 習(xí)題我們的程序利用內(nèi)置的加法操
7、作符“+”來產(chǎn)生兩個(gè)數(shù)的和。編寫程序,使用乘法操作符“* ”產(chǎn)生兩個(gè)數(shù)的積?!窘獯稹?include C+ Primer( 4 版)習(xí)題解答 4int main() std:cout Enter two numbers: v1 v2;std:cout The product of v1 and v2 is v1 * v2 std:endl;return 0;習(xí)題我們的程序使用了一條較長的輸出語句。重寫程序,使用單獨(dú)的語句打印每一 個(gè)操作數(shù)。【解答】#include int main() std:cout Enter two numbers: v1 v2;std:cout The sum of
8、;std:cout v1;std:cout and ;std:cout v2;std:cout is ;C+ Primer( 4 版)習(xí)題解答 5std:cout v1 + v2 ;std:cout std:endl;return 0; 習(xí)題解釋下面的程序段:std:cout The sum of v1; and v2; is v1 + v2 std:endl;這段代碼合法嗎如果合法,為什么如果不合法,又為什么【解答】 這段代碼不合法。注意,第1、 2、 4 行的末尾有分號,表示這段代碼包含三條語句,即第1 、 2 行各為一個(gè)語句,第3、 4 行構(gòu)成一個(gè)語句。“ ”為二元操作符,在第2、 3
9、兩條語句中,第一個(gè)“”缺少左操作數(shù),因此不合法。在第2、 3 行的開頭加上“std:cout ”,即可更正。習(xí)題 編譯有不正確嵌套注釋的程序。【解答】由注釋對嵌套導(dǎo)致的編譯器錯(cuò)誤信息通常令人迷惑。例如,在筆者所用的編譯器中編譯節(jié)中給出的帶有不正確嵌套注釋的程序:#include /* comment pairs /* */ cannot nest.* cannot nest is considered source code,* as is the rest of the program*/int main() return 0; 編譯器會給出如下錯(cuò)誤信息:error C2143: synta
10、x error : missing ; before error C2501: include : missing storage-class or type specifierswarning C4138: */ found outside of comment (第 6 行)error C2143: syntax error : missing ; before (第 8 行)error C2447: : missing function header (old-style formal list) (第8 行) 習(xí)題指出下列輸出語句哪些(如果有)是合法的。std:cout /*;std:
11、cout */;std:cout /* */ */;預(yù)測結(jié)果,然后編譯包含上述三條語句的程序,檢查你的答案。糾正所遇到的 錯(cuò)誤。【解答】 第一條和第二條語句合法。C+ Primer( 4 版)習(xí)題解答7第三條語句中操作符之后至第二個(gè)雙引號之前的部分被注釋掉了,導(dǎo)致操作符的右操作數(shù)不是一個(gè)完整的字符串,所以不合法。在分號之前加上一個(gè)雙引號即可更正。習(xí)題下列循環(huán)做什么sum 的最終值是多少int sum = 0;for (int i = -100; i = 100; +i)sum += i;【解答】該循環(huán)求-100100 之間所有整數(shù)的和(包括-100 和100) 。sum 的最終值是0。習(xí)題用
12、for 循環(huán)編程,求從50100 的所有自然數(shù)的和。然后用while 循環(huán)重寫該程序?!窘獯稹?用 for 循環(huán)編寫的程序如下:#include int main() int sum = 0;for (int i = 50; i = 100; +i) sum += i;std:cout Sum of 50 to 100 inclusive is sum std:endl;return 0;C+ Primer( 4 版)習(xí)題解答8用 while 循環(huán)編寫的程序如下:#include int main()int sum = 0, int i = 50;while (i = 100) sum +=
13、i;+i;std:cout Sum of 50 to 100 inclusive is sum std:endl;return 0;習(xí)題用while 循環(huán)編程,輸出100 遞減的自然數(shù)。然后用for 循環(huán)重寫該程序?!窘獯稹坑脀hile 循環(huán)編寫的程序如下:#include int main()int i = 10;while (i = 0) std:cout i ;C+ Primer( 4 版)習(xí)題解答9 -i;return 0;用 for 循環(huán)編寫的程序如下:#include int main()for (int i = 10; i = 0; -i)std:cout i ;return 0
14、;對比前面兩個(gè)習(xí)題中所寫的循環(huán)。兩種形式各有何優(yōu)缺點(diǎn)【解答】在 for 循環(huán)中,循環(huán)控制變量的初始化和修改都放在語句頭部分,形式較簡潔,且特別適用于循環(huán)次數(shù)已知的情況。在while 循環(huán)中,循環(huán)控制變量的初始化一般放在while 語句之前,循環(huán)控制變量的修改一般放在循環(huán)體中,形式上不如 for 語句簡潔,但它比較適用于循環(huán)次數(shù)不易預(yù)知的情況(用某一條件控制循環(huán)) 。兩種形式各有優(yōu)點(diǎn),但它們在功能上是等價(jià)的,可以相互轉(zhuǎn)換。習(xí)題編譯器不同,理解其診斷內(nèi)容的難易程度也不同。編寫一些程序,包含本小節(jié)“再談編譯”部分討論的那些常見錯(cuò)誤。研究編譯器產(chǎn)生的信息,這樣你在編譯更復(fù)雜的程序遇到這些信息時(shí)不會陌生
15、?!窘獯稹緾+ Primer( 4 版)習(xí)題解答10對于程序中出現(xiàn)的錯(cuò)誤,編譯器通常會給出簡略的提示信息,包括錯(cuò)誤出現(xiàn)的文件及代碼行、錯(cuò)誤代碼、錯(cuò)誤性質(zhì)的描述。如果要獲得關(guān)于該錯(cuò)誤的詳細(xì)信息,一般可以根據(jù)編譯器給出的錯(cuò)誤代碼在其聯(lián)機(jī)幫助文檔中查找。習(xí)題如果輸入值相等,本節(jié)展示的程序?qū)a(chǎn)生什么問題【解答】sum 的值即為輸入值。因?yàn)檩斎氲膙1 和 v2 值相等(假設(shè)為x) ,所以 lower 和upper 相等,均為x。 for 循環(huán)中的循環(huán)變量val 初始化為lower ,從而 val=upper為真,循環(huán)體執(zhí)行一次,sum的值為val (即輸入值x);然后val加1, val的值就大于upp
16、er,循環(huán)執(zhí)行結(jié)束。習(xí)題用兩個(gè)相等的值作為輸入編譯并運(yùn)行本節(jié)中的程序。將實(shí)際輸出與你在習(xí)題中所做的預(yù)測相比較,解釋實(shí)際結(jié)果和你預(yù)計(jì)的結(jié)果間的不相符之處?!窘獯稹窟\(yùn)行 節(jié)中給出的程序,輸入兩個(gè)相等的值(例如3,3) ,則程序輸出為:Sum of 3 to 3 inclusive is 3與習(xí)題 中給出的預(yù)測一致。習(xí)題編寫程序,輸出用戶輸入的兩個(gè)數(shù)中的較大者?!窘獯稹?include int main()std:cout Enter two numbers: v1 v2; std:endl;return 0;習(xí)題編寫程序,讀入幾個(gè)具有相同ISBN 的交易,輸出所有讀入交易的和?!窘獯稹?inclu
17、de #include int main()Sales_item total, trans; std:endl;return -1;(d) -10e-2【解答】(a) int 型(b) unsigned int 型(c) double 型(d) double 型習(xí)題下列哪些(如果有)是非法的(a) Who goes with F145rgus012(b) (c) two Lsome(d) 1024f (e)(f) multiple line comment【解答】(c) 非法。因?yàn)樽址置嬷蹬c寬字符串字面值的連接是未定義的。(d) 非法。因?yàn)檎麛?shù)1024 后面不能帶后綴f。(e) 非法。因?yàn)?/p>
18、浮點(diǎn)字面值不能帶后綴U。(f) 非法。因?yàn)榉謨尚袝鴮懙淖址置嬷当仨氃诘谝恍械哪┪布由戏葱本€。習(xí)題使用轉(zhuǎn)義字符編寫一段程序,輸出2M ,然后換行。修改程序,輸出2,跟著一個(gè)制表符,然后是 M,最后是換行符?!窘獯稹枯敵?2M 、然后換行的程序段: .return 0;【解答】global_str 和 local_str 的初始值均為空字符串,global_int 的初始值為0,local_int 沒有初始值。習(xí)題解釋下列例子中name 的意義:extern std:string name;std:string name(exercise );extern std:string name(ex
19、ercise );【解答】第一條語句是一個(gè)聲明,說明std:string 變量 name 在程序的其他地方定義。第二條語句是一個(gè)定義,定義了 std:string變量name,并將name初始化為 exercise 。第三條語句也是一個(gè)定義,定義了 std:string變量name,并將name初始化為 exercise ,但這個(gè)語句只能出現(xiàn)在函數(shù)外部(即,name 是一個(gè)全局變量)。習(xí)題 下列程序中j 的值是多少int i = 42; int main() int i = 100; int j = i; . 【解答】j的值是100。j的賦值所使用到的i應(yīng)該是main函數(shù)中定義的局部變量i,因
20、為局部變量的定義會屏蔽全局變量的定義。習(xí)題 下列程序段將會輸出什么int i = 100, sum = 0;for (int i = 0; i != 10; +i)sum += i;std:cout i sum std:endl;【解答】 輸出為: 100 45for語句中定義的變量i,其作用域僅限于for語句內(nèi)部。輸出的i值是for語句之前所定義的變量i 的值。習(xí)題下列程序合法嗎int sum = 0;for (int i = 0; i != 10; +i) sum += i;std:cout Sum from 0 to i is sum std:endl;【解答】不合法。因?yàn)樽兞縤 具有語
21、句作用域,只能在for 語句中使用,輸出語句中使用 i 屬非法。習(xí)題下列程序段雖然合法,但是風(fēng)格很糟糕。有什么問題呢怎樣改善for (int i = 0; i 100; +i).對象上的操作private:std:string country_number;std:string city_number;std:string phone_number;(b) 地址class Address public:對象上的操作private:std:string country;std:string city;std:string street;std:string number;(c) 員工或公司cla
22、ss Employee public:.對象上的操作private:std:string ID;std:string name;char sex;Address addr;Tel_number tel;class Company public:.對象上的操作private:std:string name;Address addr;Tel_number tel;(d) 某大學(xué)的學(xué)生class Student public:.對象上的操作private:std:string ID;std:string name;char sex;std:string dept; ET 2003 )中,在Proje
23、ct 菜單中選擇Properties 菜單項(xiàng),在ConfigurationProperties f C/C+i GeneralfWarning Level 中可以選擇警告級別。習(xí)題用適當(dāng)?shù)膗sing聲明,而不用std:前綴,訪問標(biāo)準(zhǔn)庫中的名字,重新編寫 節(jié)的程序,計(jì)算一給定數(shù)的給定次冪的結(jié)果?!窘獯稹?include using std:cin;using std:cout;int main() s2)cout s1 is bigger than s2 endl;elsecout s2 is bigger than s1 endl;return 0;測試兩個(gè)string 對象的長度是否相等的程
24、序:#include #include using namespace std;int main()string s1, s2; len2)cout s1 is longer than s2 endl;elsecout s2 is longer than s1 endl;return 0;習(xí)題編一個(gè)程序,從標(biāo)準(zhǔn)輸入讀取多個(gè)string 對象,把它們連接起來存放到一個(gè)更大的 string 對象中,并輸出連接后的string 對象。接著,改寫程序,將連接后相鄰 string 對象以空格隔開?!窘獯稹?include #include using namespace std;int main()st
25、ring result_str, str;ET 2003)的實(shí)現(xiàn)中,該 程序段并不出現(xiàn)編譯錯(cuò)誤。習(xí)題編一個(gè)程序,從string 對象中去掉標(biāo)點(diǎn)符號。要求輸入到程序的字符串必須含有標(biāo)點(diǎn)符號,輸出結(jié)果則是去掉標(biāo)點(diǎn)符號后的string 對象?!窘獯稹?include #include #include using namespace std; int main()string s, result_str;bool has_punct = false;ize();+index)if (islower(svecixindex) ize();+index)if (islower(*iter)index)
26、endl;return 0;cout Array1 is equal to array2. endl;return 0;判斷兩個(gè)vector 是否相等,可用如下程序: endl;else if () = 0) endl;else endl;C+ Primer( 4 版)習(xí)題解答 68 elsecout Vector1 is not equal to vector2. endl; return 0; 習(xí)題 編寫程序定義一個(gè)有10 個(gè) int 型元素的數(shù)組,并以元素在數(shù)組中的位置作為各元素的初值?!窘獯稹?;size_t len = strlen(cp1) + strlen(cp2);char *
27、result_str = new charlen+1;strcpy(result_str, cp1);strcat(result_str, cp2);delete result_str;return 0;相應(yīng)的連接兩個(gè)string 類型字符串的程序如下:;string result_str;result_str = str1;result_str += str2;C+ Primer( 4 版)習(xí)題解答 82return 0; 習(xí)題編寫程序從標(biāo)準(zhǔn)輸入設(shè)備讀入字符串,并把該串存放在字符數(shù)組中。描述你的程序如何處理可變長的輸入。提供比你分配的數(shù)組長度長的字符串?dāng)?shù)據(jù)測試你 的程序?!窘獯稹縤ze()+
28、1;_str();ize()+1;_str();.if ( i = 42 ) .【解答】前者發(fā)生語法錯(cuò)誤,因?yàn)槠錀l件表達(dá)式42=i 是一個(gè)賦值表達(dá)式,賦值操作符的左操作數(shù)必須為一個(gè)左值,而字面值42 不能作為左值使用。后者代碼合法,但其條件表達(dá)式i=42 是一個(gè)永真式(即其邏輯值在任何情況下都為true) ,因?yàn)樵撡x值表達(dá)式的值為賦值操作完成后的i 值 ( 42) , 而 42 為非零值,解釋為邏輯值true。習(xí)題下列賦值操作是不合法的,為什么怎樣改正double dval; int ival; int *pi;dval = ival = pi = 0;【解答】該賦值語句不合法,因?yàn)樵撜Z句首先
29、將0值賦給pi,然后將pi的值賦給ival,再將ival的值賦給 dval。 pi、 ival 和 dval 的類型各不相同,因此要完成賦值必須進(jìn)行隱式類型轉(zhuǎn)換,但系統(tǒng)無法將int 型指針 pi 的值隱式轉(zhuǎn)換為ival 所需的 int 型值。可改正如下:double dval; int ival; int *pi;dval = ival = 0;pi = 0;習(xí)題雖然下列表達(dá)式都是合法的,但并不是程序員期望的操作,為什么怎樣修改這些表達(dá)式以使其能反映程序員的意圖(a) if ( ptr = retrieve_pointer() != 0 )(b) if ( ival = 1024 ) (c)
30、ival += ival + 1;【解答】 對于表達(dá)式(a),程序員的意圖應(yīng)該是將retrieve_pointer()的值賦給ptr,然后判斷ptrC+ Primer( 4 版)習(xí)題解答 95的值是否為0 , 但因?yàn)椴僮鞣?” 的優(yōu)先級比“!=” 低, 所以該表達(dá)式實(shí)際上是將retrieve_pointer()是否為0的判斷結(jié)果true或false賦給ptr,因此不是程序員期望的操作。 對于表達(dá)式(b),程序員的意圖應(yīng)該是判斷ival的值是否與1024相等,但誤用了賦值操作符。 對于表達(dá)式(c),程序員的意圖應(yīng)該是使ival的值增加1,但誤用了操作符“ +=”。各表達(dá)式可修改如下:(a) i
31、f ( (ptr = retrieve_pointer() != 0 ) (b) if ( ival = 1024 )(c) ival += 1; 或 ival+; 或 +ival;習(xí)題 解釋前自增操作和后自增操作的差別。【解答】前自增操作和后自增操作都使其操作數(shù)加1 ,二者的差別在于:前自增操作將修改后操作數(shù)的值作為表達(dá)式的結(jié)果值;而后自增操作將操作數(shù)原來的、未修改的值作為表達(dá)式的結(jié)果 值。習(xí)題你認(rèn)為為什么C+不叫作+C 【解答】C+ 之名是 Rick Mascitti 在 1983 年夏天定名的(參見 The C+ ProgrammingLanguage(Special Edition)
32、節(jié)) , C 說明它本質(zhì)上是從C 語言演化而來的,“ +”是C 語言的自增操作符。C+語言是C語言的超集,是在 C語言基礎(chǔ)上進(jìn)行的擴(kuò)展(引入了 new、 delete 等 C 語言中沒有的操作符,增加了對面向?qū)ο蟪绦蛟O(shè)計(jì)的直接支持,等等),是先有C 語言,再進(jìn)行+。根據(jù)自增操作符前、后置形式的差別(參見習(xí)題的解答) , C+表示對 C 語言進(jìn)行擴(kuò)展之后,還可以使用C 語言的內(nèi)容;而寫成+C 則表示無法再使用C的原始值了,也就是說C+不能向下兼容C 了,這與實(shí)際情況不符。習(xí)題 如果輸出vector 內(nèi)容的 while 循環(huán)使用前自增操作符,那會怎么樣【解答】 將導(dǎo)致錯(cuò)誤的結(jié)果:ivec 的第一個(gè)
33、元素沒有輸出,并企圖對一個(gè)多余的元素進(jìn)行解引用。C+ Primer( 4 版)習(xí)題解答 96 習(xí)題 編寫程序定義一個(gè)vector 對象,其每個(gè)元素都是指向string 類型的指針,讀取該 vector 對象,輸出每個(gè)string 的內(nèi)容及其相應(yīng)的長度?!窘獯稹?ize() next (b) ch = buf bp+ != n 【解答】 添加圓括號說明其計(jì)算順序如下:(a) (! ptr) = (ptr-next)(b) (ch = (buf (bp+) ) != n)C+ Primer( 4 版)習(xí)題解答 102 習(xí)題 習(xí)題 中的表達(dá)式的計(jì)算次序與你的意圖不同,給它們加上圓括號使其以你 所希望
34、的操作次序求解。【解答】 添加圓括號獲得與上題不同的操作次序如下: (a) ! (ptr = ptr-next) (b) (ch = buf bp+ ) != n 習(xí)題由于操作符優(yōu)先級的問題,下列表達(dá)式編譯失敗。請參照表5-4 解釋原因,應(yīng)該如何改正string s = word;/ add an s to the end, if the word doesnt already end in s string pl = s + s() - 1 = s : s ;【解答】由表 5-4 可知,在語句string pl = s + s() - 1 = s : s ;中,賦值、加法、條件操作符三者的操
35、作次序?yàn)椋合葓?zhí)行“+”操作,再用表達(dá)式 s + s() - 1的結(jié)果參與條件操作,最后將條件操作的結(jié)果賦給pl。但表達(dá)式s + s() - 1的結(jié)果是一個(gè)string對象,不能與字符s進(jìn)行 相等比較,所以編譯失敗。改正為:string pl = s + (s() - 1 = s : s) ; 。習(xí)題除了邏輯與和邏輯或外,C+段有明確定義二元操作符的求解次序,編譯器可自 由地提供最佳的實(shí)現(xiàn)方式。只能在“實(shí)現(xiàn)效率”和程序語言使用中“潛在的缺 陷”之間尋求平衡。你認(rèn)為這可以接受嗎說出你的理由?!窘獯稹?這可以接受。因?yàn)?,操作?shù)的求解次序通常對結(jié)果沒什么影響。只有當(dāng)二元操作符的兩個(gè)操 作數(shù)涉及同一對象
36、,并改變該對象的值時(shí),操作數(shù)的求解次序才會影響計(jì)算結(jié)C+ Primer( 4 版)習(xí)題解答 103 果;后一種情況只會在部分(甚至是少數(shù))程序中出現(xiàn)。在實(shí)際使用中,這種 “潛在的缺陷”可以通過程序員的努力得到彌補(bǔ),但“實(shí)現(xiàn)效率”的提高卻能 使所有使用該編譯器的程序受益,因此利大于弊。 習(xí)題 假設(shè) ptr 指向類類型對象,該類擁有一個(gè)名為ival 的 int 型數(shù)據(jù)成員,vec 是保存 int 型元素的vector 對象,而ival、 jval 和 kval 都是 int 型變量。請解釋下列表達(dá)式的行為,并指出哪些(如果有的話)可能是不正確的,為什么 如何改正(a) ptr-ival != 0
37、(b) ival != jval kval (c) ptr != 0 & *ptr+ (d) ival+ & ival (e) vecival+ = vecival 【解答】 表達(dá)式的行為如下:(a) 判斷 ptr 所指向的對象的ival 成員是否不等于0。(b)判斷ival是否不等于“jval是否小于kval”的判斷結(jié)果,即判斷 ival是 否不等于true ( 1 )或 false( 0) 。(c) 判斷 ptr 是否不等于0。如果ptr 不等于 0,則求解&操作的右操作數(shù),即,ptr 加 1 ,且判斷ptr 原來所指向的對象是否為0。(d)判斷ival及ival+1是否為true (非0
38、值)(注意,如果ival為false, 則無需繼續(xù)判斷ival+1 ) 。(e) 判斷 vecival 是否小于或等于vecival+1 。其中,(d)和(e)可能不正確,因?yàn)槎僮鞣膬蓚€(gè)操作數(shù)涉及同一對象,并 改變該對象的值??筛恼缦拢?d) ival & ival + 1(e) vecival = vecival + 1 習(xí)題下列語句哪些(如果有的話)是非法的或錯(cuò)誤的C+ Primer( 4 版)習(xí)題解答104(a) vector svec(10);(b) vector *pvec1 = new vector(10);(c) vector *pvec2 = new vector10;(d) vector *pv1 = &svec;(e) vector *pv2 = pvec1;(f) delete svec;(g) delete pvec1;(h) delete pvec2;(i) delete pv1;(j) delete pv2;【解答】錯(cuò)誤的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濟(jì)南市(2024年-2025年小學(xué)五年級語文)人教版期末考試(上學(xué)期)試卷及答案
- 軍工設(shè)備校驗(yàn)與校正辦法
- 云南省思茅市(2024年-2025年小學(xué)五年級語文)人教版小升初模擬(上學(xué)期)試卷及答案
- 面向2024:《拿來主義》教學(xué)課件的創(chuàng)意設(shè)計(jì)與應(yīng)用
- 2024版人力資源教案:引領(lǐng)未來管理
- 2024海濱小城交通發(fā)展現(xiàn)狀
- 2024年新課標(biāo)下的《青玉案·元夕》教學(xué)策略與教案設(shè)計(jì)
- 2024年ERP沙盤教案:助力企業(yè)戰(zhàn)略決策
- 2023企業(yè)勞動規(guī)章制度(10篇)
- 《大小多少》的實(shí)踐與探索
- 六年級上冊數(shù)學(xué)課件-6.2 百分?jǐn)?shù)的認(rèn)識丨蘇教版 (共24張PPT)
- 【精品主題班會】高三家長會(共30張PPT)
- 四年級上冊書法課件- 10蘭葉撇 |通用版 (共10張PPT)
- 消防水池 (有限空間)作業(yè)安全告知牌及警示標(biāo)志
- 大學(xué)政府采購項(xiàng)目驗(yàn)收報(bào)告(貨物服務(wù)類)
- 港口碼頭常用安全安全警示標(biāo)志
- 熱質(zhì)交換原理與設(shè)備復(fù)習(xí)題(題庫)(考試參考)
- 海上風(fēng)電施工船舶安全管理辦法
- 公安警察工作總結(jié)匯報(bào)PPT模板
- 《砼路面施工方案》word版
- 文書檔案歸檔及整理規(guī)范PPT幻燈片課件
評論
0/150
提交評論