《C++ Primer》學習筆記/習題答案 總目錄
——————————————————————————————————————————————————————
《C++ Primer》學習筆記(一):快速入門
???????? Cpp-Prime5 + Cpp-Primer-Plus6 源代碼和課後題
第1章 - 快速入門
查閱你使用的編譯器的文檔,确定它所使用的檔案名約定。編譯并運作第2頁的main程式。
解:

編譯器VS2013中運作程式結果如下:
源檔案編譯為可執行檔案。
在系統cmd指令行中運作可執行檔案。
改寫程式,讓它傳回-1。傳回值-1通常被當做程式錯誤的辨別。重新編譯并運作你的程式,觀察你的系統如何處理main傳回的錯誤辨別。
指令行中運作 <code>echo %ERRORLEVEL%</code>
編寫程式,在标準輸出上列印Hello, World。
我們的程式使用加法運算符<code>+</code>來将兩個數相加。編寫程式使用乘法運算符<code>*</code>,來列印兩個數的積。
我們将所有的輸出操作放在一條很長的語句中,重寫程式,将每個運算對象的列印操作放在一條獨立的語句中。
解釋下面程式片段是否合法。
如果程式是合法的,它的輸出是什麼?如果程式不合法,原因何在?應該如何修正?
程式不合法,有多餘的分号,修改如下:
或者在 << 之前缺少了輸出流,修改如下:
編譯一個包含不正确的嵌套注釋的程式,觀察編譯器傳回的錯誤資訊。
錯誤資訊:
指出下列哪些輸出語句是合法的(如果有的話):
預測編譯這些語句會産生什麼樣的結果,實際編譯這些語句來驗證你的答案(編寫一個小程式,每次将上述一條語句作為其主體),改正每個編譯錯誤。
第一條和第二條語句顯然是合法的;
在第三條語句中,第一個雙引号被注釋掉了,是以 << 運算符後真正被編譯的内容是 <code>" */</code>,編譯器認為這是一個不完整的字元串,是以會報告:<code>7 error:missing terminating " character</code>,即,缺少結束的雙引号。在分号前補一個雙引号,這條語句就變味正确的了;
第四條語句看起來很混亂,但它是正确的。第一個雙引号被注釋掉了,第四個雙引号也被注釋掉了,第二個雙引号和第三個雙引号之間的“ /* ”被認為是字元串的文字内容。但是這樣的程式風格顯然是不好的。
編寫程式,使用<code>while</code>循環将50到100整數相加。
除了<code>++</code>運算符将運算對象的值增加1之外,還有一個遞減運算符<code>--</code>實作将值減少1。編寫程式,使用遞減運算符在循環中按遞減順序列印出10到0之間的整數。
編寫程式,提示使用者輸入兩個整數,列印出這兩個整數所指定的範圍内的所有整數。
下面的for循環完成了什麼功能?sum的終值是多少?
此循環将 -100 加到 100(包括 -100 和100)的整數,sum 的終值是 0。
使用for循環重做1.4.1節中的所有練習(練習1.9到1.11)。
對比 for 循環和 while 循環,兩種形式的優缺點各是什麼?
在循環次數已知的情況下,for 循環的形式顯然更為簡潔。
而循環次數無法預知時,用 while 循環實作更适合。用特定條件控制循環是否執行,循環體中執行的語句可能導緻循環判定條件發生變化。
編寫程式,包含第14頁“再探編譯”中讨論的常見錯誤。熟悉編譯器生成的錯誤資訊。
對于複雜程式中的錯誤,編譯器給出的錯誤資訊很可能無法對應到真正的錯誤位置并給出準确的錯誤原因。這是很正常的,因為某些時候我們人類都無法準确判斷程式員到底犯了什麼錯誤,在目前人工智能技術發展水準下,要求編譯器有超越人類的智能是不現實的,而且,不同的編譯器對同一程式給出的錯誤資訊有可能是有很大差别的。一方面是因為如前所述,很多時候并不存在“唯一正确”的錯誤原因:另一方面,不同編譯器對同樣地錯誤原因也可能有自己不同的解釋方式。
編譯器可以檢查出的錯誤有:
文法錯誤
類型錯誤
聲明錯誤
編寫程式,從cin讀取一組數,輸出其和。
如果輸入的所有值都是相等的,本節的程式會輸出什麼?如果沒有重複值,輸出又會是怎樣的?
如果輸入的所有值都相等,則 while 循環中的 else 分支永遠不會執行,直到輸入結束,while 循環退出,循環後的輸出語句列印這唯一的一個值和它出現的次數。
若沒有重複值,則 while 循環中的 if 語句的真值分支永遠不會執行,每讀入一個值,都會進入 else 分支,列印它的值和出現次數1。輸入結束後,while 循環退出,循環後的輸出語句列印最後一個值和出現次數1。
編譯并運作本節的程式,給它輸入全都相等的值。再次運作程式,輸入沒有重複的值。
全部重複:
沒有重複:
注意:不要忘記了用 Ctrl + z 表示輸入結束。
修改你為1.4.1節練習1.11(第11頁)所編寫的程式(列印一個範圍内的數),使其能處理使用者輸入的第一個數比第二個數小的情況。
如果想要更多的資源,歡迎關注 @我是管小亮,文字強迫症MAX~
回複【福利】即可擷取我為你準備的大禮,包括C++,程式設計四大件,NLP,深度學習等等的資料。
想看更多文(段)章(子),歡迎關注微信公衆号「程式員管小亮」~