勘誤
本書雖力求完美,但筆者學識與經驗仍有不足,如有謬誤之處尚祈見諒並請不吝指正。以下是目前已知的錯誤更正:
請注意! 原本在書中以小三角形表示程式執行結果中的空白,在此堪誤中將以^符號代替!
第二章(光碟片中的)補充程式練習題,第12題有誤
第3-41頁,程式練習題第11題,執行結果第一行中的「integer_ _ _ _ _ _ _ _ 」,應在integer與冒號間增加一個空白鍵為「integer:^_ _ _ _ _ _ _ _ 」。請參考下圖:
第4-23頁,程式練習題第9題,在執行結果中的「166.942902」應改為「166.942900」。
第5-5頁,第14-15行,原「若數值為浮點數時,此欄位後面若無指定小數點後的位數時,此欄位則用以定義小數點後的位數,不足處補0。」,應修正為「若數值為浮點數時,此欄位則是定義包含小數點在內的數值位數。」。
第5-7頁,倒數第7 - 8行,原「若B 的位數不足以顯示完整的小數位數,則會被加以忽略」,應修正為「若B 的位數不足以顯示完整的小數位數,則會被四捨五入到B的位數」。
第5-10頁,倒數第2行,原「最長欄位寬度(maximum field width)為選擇性的,指定所取回的資料最大的字元數」,應修正為「最長欄位寬度(maximum field width)為選擇性的,指定最多可取回的資料字元數」。
第5-14頁,第2行,原「為了便於討論,我們使用分別...」,應修正為「為了便於討論,我們分別...」。
第5-14頁,倒數第3行,原「改成「^%d%d」、「%d^%d」、「%d%d ^」,其結果仍相同。」,應修正為「改成「^%d%d」、「%d^%d」,其結果仍相同。」。
第5-16頁,第7行,程式執行結果中的句號應出現在enter符號前。
第5-24頁,最後一行的程式執行輸出結果「 Output:[3.141593e+]00 」,應修正為「 Output:[3.141593e+00] 」。
第5-25頁,在程式練習題第4題的執行結果第二行中的integer與數值間應增加一個冒號,也就是原「 Please^input^an^integer^4543232456443323 」,應修正為「 Please^input^an^integer:^4543232456443323 」。
第5-26頁,在程式練習題第8題的執行結果中的「 digitis」,應修正為「digits 」。
第6-24頁,Example 6-11程式必須使用支援常數運算式做為case標籤的編譯器才能正確執行,例如Mac OS上的clang。
第6-32頁,第12行用以執行兩個程式的指令「 Vcode | Discount」,應修正為「./Vcode | ./Discount 」。
第6-37頁,圖6-6應更正如下:
第6-39頁,程式練習題第5題的執行結果中的「Grade」與左括號間,應增加一個空白,請參考下圖:。
第6-40頁,在程式練習題第6題的執行結果中的「month:」後方應增加一個空白。此外,第二次執行的輸入也缺少了方框。請參考下圖:
第6-42頁,程式練習題第10題,其執行結果的提示字串應為「Please^input^the^three^sides^of^a^triangle:^」。請參考下圖:
第6章,程式練習題第17題(光碟補充程式練習-7頁)的執行結果中的「(S)ingle or (R)eturn ticket?」,應修正為「(S)ingle^or^(R)eturn^ticket?^」。請參考下圖:
第6章,程式練習題第11題(光碟補充程式練習-3至4頁)題目的執行結果中的英文部份錯誤,請參考下圖修正:
第6章,程式練習題第18題(光碟補充程式練習-7頁)題目的第10-11行的「但輸入超出以上範圍時,必須顯示「Error!」。」,應修正為「但輸入超出以上範圍時,請參考以下的執行結果顯示錯誤訊息。」。
第6章,程式練習題第19題(光碟補充程式練習-8頁)題目的第13-14行的「請設計一個程式 BestDeal.c,用以幫使用者找出最划算的方案(若有兩個以上方 案相同划算時,請以免費上網流量多的優先)。」,請刪除括號內的文字修正為「請設計一個程式 BestDeal.c,用以幫使用者找出最划算的方案(若有兩個以上方 案相同划算時,請以免費上網流量多的優先)。」。
第6章,程式練習題第19題(光碟補充程式練習-8頁)的執行結果修正如下:
第7-52頁,程式練習題第3題,執行結果中的提示字串「Please^input^a^numbers:」,應修正為「Please^input^a^number:」,請參考下圖:
第7-53頁,程式練習題第4題,執行結果中的提示字串「Please^input^a^numbers:」,應修正為「Please^input^a^number:」,請參考下圖:
第7章,程式練習題第14題(光碟補充程式練習-10頁),在其執行結果中,最後兩次執行輸入的121與232的執行結果已超出unsigned long int的數值範圍,因此其結果並不正確。事實上,此題可正確處理的輸入為小於等於93個月的情況,請教師批改此題時不要測試超過93個月的數值。但必須注意執行結果中月數必須使用序數方式呈現,例如輸入分別為21、32與43個月時,其輸出應為「21st」、「32nd」與「43rd」。請參考下圖:
第7章,程式練習題第15題(光碟補充程式練習-11頁),在其執行結果中輸入5及18的輸出結果應修正如下圖:
第7章,程式練習題第16題(光碟補充程式練習-11頁),其第1行末的「若輸入的值小於等於0」,應修正為「若輸入的值小於0」。為清楚說明起見,我們將題目及執行結果修正如下圖:
第7章,補充習題選擇題第1題(光碟補充練習-22頁),其選項D原「取得使用者所輸入的大於等於0的整數」,應修正為「取得使用者所輸入的1個大於等於1的整數」。
第8-26頁,第9行,編譯器警告訊息中的「begining」,應修正為「beginning」。
第8-43頁,第5行,記憶體位址「0x0x7ffeee4549b4」,應修正為「0x7ffeee4549b4」。
第8-53頁,8-4-2節,聚集運算的英譯誤值為「arggregation」,應修正為「aggregation」。第7章,程式練習題第16題(光碟補充程式練習-11頁),其第1行末的「若輸入的值小於等於0」,應修正為「若輸入的值小於0」。為清楚說明起見,我們將題目及執行結果修正如下圖:
第8-91頁,程式練習題第5題,其執行結果有誤更正如下圖:
第8-91頁,程式練習題第6題,題目敘述中的「該程式需找出使用者輸入十個整數的最大值與最小值後輸出」,應修正為「該程式需找出使用者所輸入的整數裡的最大值與最小值後輸出」。
第8章,補充習題選擇題第2題(光碟補充習題-26頁),其選項E的「以上皆屬於」,應修正為「以上皆正確」。
第8章,補充習題選擇題第10題(光碟補充習題-27頁),其選項A的「idata[i++];」,應修正為「data[i++];」。
第8章,程式練習題第12題(光碟補充程式練習-14頁~15頁),在其程式的執行結果倒數第3行末的的「7」,應修正為「6」,請參考下圖:
第8章,程式練習題第13題,在(光碟補充程式練習-16頁)的題目敘述中,原「中獎號碼的8碼完全一致則可得獎金20 萬元」,應修正為「中獎號碼的8碼完全一致則可得獎金200 萬元」。
第8章,補充習題選擇題第17題,在(光碟補充習題-29頁)的題目敘述中,原題目敘述裡的「int dat[2][3]」陣列宣告,應修正為「int data[2][3]」。
第8章,補充習題選擇題第20題(光碟補充習題-30頁)的原選項C「data[max]=data[i];」,應修正為「data[i]=max;」。
第9-8頁,9-3節,第5行,原「Example 2-1」,應修正為「Example 1-1」。
第9-9頁,第2行,原「緊接著使用一組大括號 ( )」,應修正為「緊接著使用一組小括號 ( )」。
第9-35頁,倒數第11行,原「使用分號結尾」,應修正為「使用冒號結尾」。
第9-42頁,圖9-3中標示為14之處,原「money<=0」,應修正為「money<=100」。
第9-72頁,在程式練習題第7題執行結果的倒數第2行裡的「F_0」,應修正為「F_10」,請參考下圖:
第10-3頁,表10-1中標示為14之處,原變數x的記憶體位址「0x7 m m 34 m f00」,應修正為「0x7ffff34ffff00」。
第10章,補充習題簡答題第9及10題的題目範圍應屬第13章。
第10章,補充習題選擇題第6、8、9及10題的題目範圍應屬第13章。
第10章,程式練習題第1、3、4及6題的題目範圍應屬第13章。
第10章,程式練習題第8題,在題目所提供Main.c裡的第7行程式碼「printf("Please input two numbers: ");」,其結尾處的 : 及" 間的空白字元應加以刪除變為「printf("Please input two numbers:");」,請參考下圖:
第10章,補充習題選擇題第2題,在(光碟補充習題-34頁)的選項B的「sizeof(*int)」與D的「size(*double)」,應修正為「sizeof(int *)」與D的「size(double *)」。
程式練習題11-3 空白問題
第11-10頁,倒數第5行,原「當A>B時」,應修正為「當A<B時」。
第11-13頁,倒數第7行,原「前n個字元」,應修正為「前n-1個字元」。
第11-16頁,第19行,原「前n個字元」,應修正為「前n-1個字元」。
第11-17頁,原「11-4-2 節」,應修正為「11-4-3節」。
第11-19頁,原「11-4-3 節」,應修正為「11-4-4節」。
第11-22頁,原「11-6 字串與函式呼叫」,應修正為「11-6 字串處理函式」。
第11-37頁,showStrings()的程式碼結尾處多了一個右大括號。
第11-38頁,第2行,原「各往前複制其內容」,應修正為「各往前複製其內容」。
第11-38頁,倒數第4行,原「3+5=0.60」,應修正為「3/5=0.6」。
第11-41頁,程式練習題第2題,在執行結果中的「2017」,應修正為「2021」,請參考下圖:
第12-2頁,第6行,原「包含產名」,應修正為「包含產品」。
第12-10頁,第10行,原「在以其做為」,應修正為「再以其作為」。
第12-33頁,中間的getAProductInfo()函式的程式碼中的第7行,原「scanf(" %d", &p.ID);」,應修正為「scanf(" %d", &p.productID);」。
第12-35頁,下方的showAProductInfo(Product p)函式的程式碼中的第3行,原「printf("ID:%d", p.ID);」,應修正為「printf("ID:%d", p.productID);」。
第12-37頁,上方的searchProduct(Product products[], int count, int id)函式的程式碼中的第7行,原「if(products[i].ID==id)」,應修正為「if(products[i].productID==id)」。
前述三項修正都是程式演練 21相關的程式碼,因此我們也將隨附於光碟中的程式演練21的程式碼加以修正,讀者可至「下載」取得修改後的原始程式碼。
第13-15頁,第8行,原「(pointer to array)」之意,,」,應修正為「(pointer to array)」之意,」。
第13-16頁,第7行,原「間接存取的方是」,應修正為「間接存取的方式」。
第13-22頁,第2行,原「四個方向的簡查」,應修正為「四個方向的檢查」。
第13-27頁,第7行,原「所使用的大為為」,應修正為「所使用的大小為」。
第14-5頁,第7行,原「synamic memory allocation」,應修正為「dynamic memory allocation」。
第16-3頁,第10行,在「具意義的常數(manifest constant)」後,多了一個右引號( 」),應加以刪除。
索引-1,「arggregation」,應修正為「aggregation」。
補充
為提供讀者更新、更正確與更完整的學習內容,儘管本書已付梓出版,但仍有相關資訊補充如下:
第5-9頁,5-2節第6行,原「空白(space)、tab 與 enter 三者都屬於此種泛空白字元,在格式字串中的一個或一個以上連續泛空白字元,會用以對應在輸入資料中的一個或一個以上的泛空白字元。」,增加補充說明「若要在格式字串中使用enter,必須使用反斜線(\)代替」,例如以下的程式碼使用一個反斜線來代表enter,用以將在兩個%d加以分隔:
scanf("%d\
%d", &x, &y);
在本書第三章所介紹的資料型態當中並不包含「布林型態(Boolean)」,但自c99開始已增加stdbool.h標頭檔來支援名為 bool的新型態,其數值可為true或false。
在本書第十章的程式範例中,若將指標設定為NULL(或0)時,以%p格式指定子加以輸出時,其結果為0x0。此處要提醒讀者,在不同系統上其輸出或有差異,例如在Linux系統上的輸出將會是(nil)。
更多...