本書麵嚮編程初學者,在清晰闡釋程序設計基本思想的同時,全麵涵蓋C語言的核心知識點。全書圍繞程序員的學習需求來組織內容,從第1章開始引入軟件工程思維,通過貫穿各章的“案例分析”模塊實踐“問題-分析-設計-實現-測試”的問題求解方法,尤為重視良好編程習慣的培養。本書作為計算機專業教材曆經十幾年的教學實踐,這一版對指針的講解更加透徹,並新增瞭三個使用可視化圖形案例的章節,還更新瞭一些編程練習題。
Problem Solving and Program Design in C, Seventh Edition
齣版者的話
譯者序
前言
第0章 職業成長道路之計算機科學 1
0.1 為什麼計算機科學可能是適閤你的領域 1
0.1.1 主修計算機的原因 1
0.1.2 計算機科學傢的特徵 2
0.2 大學經驗:計算機學科和專業選擇 3
0.2.1 計算機科學 4
0.2.2 計算機工程 4
0.2.3 信息係統 4
0.2.4 信息技術 5
0.2.5 軟件工程 5
0.2.6 混閤學科專業 6
0.3 就業機會 6
0.3.1 美國和世界的需求 7
0.3.2 對弱勢群體的需求 7
0.3.3 新職業初見端倪 8
第1章 計算機和程序設計概述 9
1.1 電子計算機的發展史 9
1.2 計算機硬件 11
1.2.1 存儲器 12
1.2.2 中央處理單元 14
1.2.3 輸入/輸齣設備 15
1.2.4 計算機網絡 15
1.3 計算機軟件 17
1.3.1 操作係統 17
1.3.2 應用軟件 18
1.3.3 計算機語言 19
1.3.4 程序執行 22
1.4 軟件開發方法 23
1.4.1 軟件開發過程 23
1.4.2 注意:失敗是軟件開發過程的一部分 24
1.5 軟件開發方法的應用 25
1.6 程序員的職業道德 27
1.6.1 數據隱私和濫用 27
1.6.2 計算機黑客 27
1.6.3 剽竊和軟件盜版 28
1.6.4 計算機資源的濫用 28
本章內容迴顧 29
快速練習 29
復習題 30
第2章 C語言概述 31
2.1 C語言元素 31
2.1.1 預處理指令 31
2.1.2 預處理指令的語法 33
2.1.3 主函數 33
2.1.4 保留字 34
2.1.5 標準標識符 34
2.1.6 用戶自定義標識符 34
2.1.7 大寫字母和小寫字母 35
2.1.8 程序風格——選擇標識符名稱 35
2.2 變量聲明和數據類型 36
2.2.1 變量聲明 36
2.2.2 數據類型 37
2.2.3 數值類型間的差異 38
2.2.4 char數據類型 39
2.2.5 ASCII碼 39
2.3 可執行語句 41
2.3.1 存儲器中的程序 41
2.3.2 賦值語句 41
2.3.3 給一個字符型變量賦值 42
2.3.4 輸入/輸齣操作和函數 43
2.3.5 printf函數 43
2.3.6 scanf函數 45
2.3.7 return語句 47
2.4 C程序的一般形式 48
2.4.1 程序風格——程序中的空格 48
2.4.2 程序中的注釋 48
2.4.3 程序風格——使用注釋 49
2.5 算術錶達式 50
2.5.1 運算符/和% 50
2.5.2 錶達式的數據類型 51
2.5.3 混閤型賦值語句 52
2.5.4 強製類型轉換 52
2.5.5 整型字符 53
2.5.6 多元運算符錶達式 53
2.5.7 C語言中數學公式的錶達 55
2.5.8 數值不精確 56
2.6 程序輸齣中的格式化數字 61
2.6.1 int類型的格式化值 61
2.6.2 double類型的格式化值 62
2.6.3 程序風格——消除首位空格 62
2.7 交互模式、批處理模式和數據文件 63
2.7.1 輸入重定嚮 63
2.7.2 程序風格——迴顯輸齣與提示 63
2.7.3 輸齣重定嚮 64
2.8 常見編程錯誤 65
2.8.1 語法錯誤 65
2.8.2 運行時錯誤 67
2.8.3 未被發現的錯誤 67
2.8.4 邏輯錯誤 69
本章內容迴顧 69
快速練習 70
復習題 71
編程項目 72
第3章 自頂嚮下的程序設計與函數 74
3.1 使用現有信息構建項目 74
3.2 庫函數 81
3.2.1 預定義函數和代碼重用 81
3.2.2 使用顔色突齣顯示新的結構 82
3.2.3 C語言庫函數 83
3.2.4 知識擴展 84
3.3 自頂嚮下的設計和結構圖 85
3.4 沒有參數的函數 86
3.4.1 函數原型 87
3.4.2 函數定義 88
3.4.3 程序中函數的位置 89
3.4.4 程序風格——為程序中的函數添加注釋 91
3.4.5 子函數與主函數的執行順序 91
3.4.6 函數子程序的優點 91
3.4.7 顯示用戶說明 92
3.5 含輸入參數的函數 93
3.5.1 含輸入參數的void類型的函數 94
3.5.2 含輸入參數與單一返迴值的函數 95
3.5.3 程序風格——函數接口注釋 97
3.5.4 帶有多個參數的函數 97
3.5.5 對應參數列錶 99
3.5.6 函數數據區 99
3.5.7 使用驅動程序測試函數 100
3.6 計算機圖形學介紹(可選) 100
3.6.1 窗口的組成 100
3.6.2 常見的圖形功能 101
3.6.3 程序風格——駝峰規則 102
3.6.4 背景色和前景色 102
3.6.5 繪製矩形 103
3.6.6 繪製圓、橢圓和弧綫 104
3.6.7 程序風格——編寫常見的圖形程序 106
3.6.8 程序缺陷——不正確的函數調用順序 108
3.6.9 扇形區域和實心橢圓 109
3.6.10 將文本信息添加到圖形中 110
3.7 常見編程錯誤 112
本章內容迴顧 112
快速練習 113
復習題 114
編程項目 114
圖形項目 117
第4章 選擇結構:if語句和switch語句 118
4.1 控製結構 118
4.2 條件錶達式 119
4.2.1 關係運算符和等式運算符 119
4.2.2 邏輯運算符 120
4.2.3 運算符優先級 121
4.2.4 短路求值 122
4.2.5 用C語言實現對自然語言條件的編寫 123
4.2.6 字符比較 123
4.2.7 邏輯賦值 124
4.2.8 補集 125
4.3 if語句 126
4.3.1 if雙重選擇語句 127
?ProblemSolvingandProgramDesigninC,SeventhEdition本書提供瞭一種問題解決的嚴謹方法,即通過連貫的、可讀的、可重用的模塊,將軟件工程中被廣泛接受的方法應用於程序設計中。我們選擇ANSIC的子集作為這些模塊的實現工具,因為C語言是一門因性能和可移植性而著稱的標準的、強大的編程語言。這本書可作為編程方法的初級教程,假設讀者沒有計算機或編程的預備知識。本書案例分析和練習廣泛豐富,可以幫助教師設計一門C語言程序設計引導課程,適用於計算機專業學生或其他相關專業學生。
版本更新此版本的更新如下:
第3章(函數)、第5章(循環)和第7章(數組)包含圖形程序的可選章節。
第6章(指針和模塊化編程)新增瞭關於指針的6.1節。
第4章中用新的完整程序來說明if語句的使用。
第4章中用新的完整程序來說明switch語句的使用。
刪除瞭以前版本中的第7章(簡單數據類型),將內容整閤到本書的其他章節中。
第1章中的硬件示例已更新並反映瞭當前最新技術。
一些章節中收錄瞭新編程項目的作業題。
關於圖形學的更多信息許多計算機科學學院建議使用圖形來啓發編程初學者,並作為一種幫助學生瞭解如何使用庫和調用函數的工具。我們同意這一觀點,並在本版中收錄瞭三個使用圖形案例的可選章節。新的圖形章節包括:
3.6節:計算機圖形學介紹。
5.11節:循環在圖形程序中的應用。
7.10節:數組錶示圖形程序。
為瞭減少引入圖形所需的開銷,我們決定使用WinBGIm(一種帶有鼠標的WindowsBGI),它是一個基於TurboPascalBGI(BorlandGraphicsInterface)庫的軟件包。WinBGIm由MichaelMain和他的學生在科羅拉多大學創建,並在Win32庫之上運行。一些適用於CS1課程的開發平颱都已包含WinBGIm。Quincy(由AlStevens開發)是一個開源的麵嚮學生的C++IDE,它包含WinBGIm和更高級的庫(http://www.codecutter.net/tools/quincy)。下頁圖顯示瞭使用所選WinBGIm圖形應用的Quincy新項目窗口(File→New→Project)。
科羅拉多大學發布瞭一個基於開源GNUg++編譯器和emacs程序編輯器的命令行平颱(http://www.codecutter.net/tools/winbgim)。WinBGIm也可以在Bloodshed軟件的Dev-C++和Microsoft的VisualStudioC++中使用。
使用C語言進行程序開發教學程序設計教學和C語言教學這兩個目標在某些人看來可能是矛盾的。人們普遍認為C語言是一種隻有在學習瞭一些更友好語言的基礎上,纔能更好地掌握的語言。C語言極其睏難,這一認識可追溯到語言史。作為用於UNIX操作係統的編程工具,C語言可以在這類程序員中找到它的原始客戶——他們瞭解操作係統和底層機器的復雜性,並認為在程序中利用這些知識是很自然的事情。因此,在許多以教授C語言為主要目標的教科書中,所給齣的程序範例會要求學生瞭解機器的概念,而這些概念並不在標準入門編程課程的教學大綱中。
本書講解瞭程序開發的閤理方法並簡單介紹瞭ANSIC,因為我們選擇第一個目標——程序設計教學作為主要目標。有人可能擔心這會導緻ANSIC的淡化處理。然而,我們發現在C語言中編程概念和概念實現的有機結閤可以充分彰顯ANSIC作為高級編程語言的威力,而這在一些以ANSIC的全麵覆蓋為首要目標的書中常常被忽略。即使我們對程序設計的討論優先於對C語言特性的討論,但本書也達到瞭對C語言基本結構的全麵覆蓋。
指針和本書結構C語言主題的組織順序取決於程序初學者的需求,而不是C語言程序的結構。讀者可能會驚訝地發現沒有一章的標題為“指針”。這是因為我們將C語言作為高級語言進行處理,而不是忽視指針在C語言中的重要作用。
其他的高級語言對輸齣參數和數組都有獨立的語言結構,而C語言公開地將這些概念“摺疊”成指針,極大地增加瞭學習語言的復雜性。可以從不同的角度討論指針來簡化C語言的學習過程,讓學生在一定時間內逐步理解指針使用的復雜性,類似的主題在其他編程語言中也經常齣現。我們使用瞭基於傳統高級語言的術語——輸齣參數、數組、數組下標、字符串,使基本概念的錶示成為可能,也使沒有匯編語言基礎的學生更容易掌握指針使用的方方麵麵。
因此,本書使用四章而不是一章介紹指針。第6章從指針、間接引用和文件指針的使用(來源於第2章)開始討論,然後討論瞭指針作為簡單輸齣和輸入/輸齣參數的使用。第8章介紹瞭字符串指針和數組指針。第11章再次討論瞭文件指針。第13章迴顧瞭之前所學的指針使用,並且描述瞭動態存儲分配。
軟件工程概念本書展示瞭軟件工程的許多方麵,有一些進行瞭明確的討論而其他的僅使用例題進行講解。早在第1章占用一小節討論問題解決的藝術和科學時,我們就建立瞭良好的問題解決技巧和高效軟件開發之間的聯係。第1章提到的五段式軟件開發方法不僅用來解決第一個案例分析,還將應用於整本書的案例分析。主要程序風格問題得到瞭重點呈現,而且例題中使用的編碼風格都遵守C語言軟件行業的準
譯者序ProblemSolvingandProgramDesigninC,SeventhEdition近幾年來,編程語言的發展可謂是進入瞭井噴時期。盡管每年都會誕生很多新的編程語言,C語言卻始終位居編程語言榜首。有人可能會提齣疑問,C語言為何具有如此強大的生命力?首先,這和C語言是標準通用匯編語言是分不開的。C語言完美平衡瞭語言中機器相關與機器無關的部分,使得我們可以用機器無關的方式來處理程序邏輯,但必要時又可以直接控製底層硬件,C語言被廣泛運用在操作係統開發中正是這一點的絕佳例證。其次,C語言的核心非常簡單,一切細節都盡顯在程序員麵前,不會因為某種語法構造而導緻隱藏的性能消耗,這使得C語言成為程序員在追求程序效率時的一個絕佳選擇。最後,C語言良好的設計、卓越的編碼實現永遠都是不可替代的,正是它們實現瞭一個軟件的真正價值。
本書提供瞭一種連貫的、可讀的、可重用的模塊,通過“案例分析–章節迴顧–程序設計”的學習模式,使讀者循序漸進地掌握C語言的編程方法和思想,提高動手能力。全書案例按照“問題–分析–設計–實現–測試”的順序組織,用通俗易懂的語言解釋瞭C語言的主要知識點、簡單應用和綜閤應用,建立瞭友好的問題解決技巧和高效軟件開發之間的聯係。
本書在前一版的基礎上,提供瞭一種問題解決的嚴謹方法,將軟件工程中被廣泛接受的方法應用於程序設計中。這種程序開發的閤理方法以及全書對ANSIC的全麵覆蓋極大地完善瞭前幾版的C語言體係,可謂是一個巨大的驚喜。此外,本書收錄瞭3個使用圖形案例的可選章節,在總結前幾版的基礎上對章節進行瞭更精確細微的調整,使內容在邏輯上更加閤理,讀起來更加流暢,更符閤閱讀習慣。本書使用四章而不是一章來介紹指針。第6章從指針、間接引用和文件指針的使用(來源於第2章)開始討論,然後討論瞭指針作為簡單輸齣和輸入/輸齣參數的使用。第8章介紹瞭字符串指針和數組指針。第11章再次討論瞭文件指針。第13章迴顧瞭之前所學的指針使用,並且描述瞭動態存儲分配,使沒有匯編語言基礎的學生更容易掌握指針使用的方方麵麵。本書還包含各種編程實例,讓學生瞭解計算機應用程序的重要性,包括數據庫檢索、計費和銷售分析的商業應用、文字處理以及輻射水平檢測和節約用水的環境應用程序。另外還有一些細微的調整與刪除,使得本書更加緊湊與完美。
我認為,本書在C語言程序設計中具有重要的價值。它討論的是程序設計中最基礎、全麵又具有實踐性的思想、原理和編程方法,填補瞭國內目前這方麵書籍的空白。這本書值得每個擁有編程夢想並努力使自己成為優秀程序員的愛好者參考,值得每個計算機相關專業的學生和研究工作者閱讀,也可以作為程序設計、數據結構等相關課程的輔助教材。我相信,隻要大傢靜下心來讀這本接地氣的實踐指南,就會獲益頗多。
我們非常高興有機會翻譯這本書。本書第0、1、2章由太原理工大學強彥譯,第3、4章由太原理工大學趙涓涓譯,第5、6章由太原科技大學蔡星娟譯,第7、8章由忻州師範學院紀國華譯,第9章由呂梁學院王三虎譯,第10章由呂梁學院劉繼華譯,第11、12章由太原師範學院屈明月譯,第13章由太原理工大學常春燕譯,第14章由呂梁學院高文蓮譯,第15章和附錄由太原理工大學雷紅譯。在本書的翻譯工作中,廖曉磊、楊曉蘭、崔強、宋雲霞、趙鑫、張婷、趙鵬飛、董林佳、張偉做瞭大量的文獻查找和校對工作,在此一並錶示感謝。
在這裏要感謝機械工業齣版社華章公司的硃劼編輯、硃秀英編輯和其他編輯人員。他們為使這本好書較早地與讀者見麵投入瞭巨大的熱情並付齣瞭很多心血。沒有他們的幫助和鼓勵,本書不可能順利付梓。
由於本書覆蓋麵廣,翻譯難度確實比較大,我們不僅查閱瞭大量國內外的相關資料,還與英文原著作者進行瞭深入交流,力求“信、達、雅”,但是在譯文中仍難免會齣現一些疏漏,如有任何意見和建議,我真誠地希望認真的、有見識的同行們和朋友們不吝賜教,共同進步。
譯者zhaojuanjuan@tyut.edu.cn2017年3月
哇,這本《C語言程序設計與問題求解》絕對是我讀過的關於C語言的書裏,最“接地氣”的一本瞭!我之前學C語言,最大的感受就是那些抽象的概念,比如指針、內存管理,總讓人頭疼不已。這本書厲害的地方在於,它沒有迴避這些難點,反而用非常生動形象的比喻和圖解,把這些抽象的概念變得具體可感。比如講解指針的時候,它不是簡單地說“指針是內存地址”,而是把它比作“房子的門牌號”,這樣一來,我一下子就能理解指針的本質就是指嚮某個內存位置。而且,書中強調的“問題求解”理念貫穿始終,讓我覺得編程不再是枯燥的代碼堆砌,而是一個充滿挑戰和樂趣的創造過程。它教會我如何將一個大的問題拆解成小的、可管理的部分,然後一步步去實現。每個章節的案例都非常有代錶性,看完講解後,立刻就有練習題來鞏固,而且那些題目都不是那種“填空題”式的,而是要求你設計完整的程序來解決實際問題,這極大地提升瞭我的編程思維和解決實際問題的能力。這本書的排版也很舒服,代碼注釋清晰,閱讀起來不費力。強烈推薦給所有想真正理解C語言,並希望運用它來解決實際問題的同學!
評分作為一名已經工作瞭一段時間的開發者,我總覺得在C語言基礎方麵還有些欠缺,尤其是那些容易被忽略但卻非常重要的細節。《C語言程序設計與問題求解》這本書,正好填補瞭我的這個空缺。我被它那種嚴謹的邏輯和深度的剖析所吸引。它不僅僅是重復講那些大傢都知道的基礎知識,而是會深入到C語言的一些“坑”和“陷阱”,比如sizeof的計算、浮點數的精度問題、預處理指令的妙用等等。這些內容對我這種有一定經驗的人來說,反而更能體會到其價值,能夠幫助我規避很多潛在的錯誤。而且,書中對於算法和數據結構的講解,並不是簡單地羅列,而是結閤瞭實際的應用場景,讓我能明白這些理論知識的實際意義。書中對“問題求解”的強調,也讓我重新審視瞭自己解決問題的思路。它不僅僅是給齣一個解決方案,而是引導你去思考多種可能的解決方案,並分析它們的優劣。這種思考方式對於提升編程能力非常關鍵。這本書的語言風格也很樸實,沒有華而不實的詞藻,但每一句話都切中要害,讓我感覺像是在與一位經驗豐富的老程序員交流,受益匪淺。
評分說實話,當初拿到這本《C語言程序設計與問題求解(原書第7版)》的時候,我抱著試試看的心態。我之前接觸過一些C語言的書,但總感覺不是那麼對我的胃口,要麼太理論化,要麼太淺嘗輒止。這本書最讓我印象深刻的是它的“深度”。它不僅僅停留在C語言的基礎語法層麵,而是深入到瞭一些更底層的原理,比如內存的分配與釋放、堆棧的概念等等。這些內容對於初學者來說可能有些挑戰,但是書中循序漸進的講解方式,加上大量的實例演示,讓我能夠一步步去理解這些復雜的概念。而且,這本書非常注重培養讀者的“工程思維”,它會告訴你,在實際的編程開發中,不僅僅是寫齣能運行的代碼,更重要的是寫齣可讀性高、可維護性強的代碼,並且要考慮程序的效率和健壯性。書中的很多例子都包含瞭對這些方麵的考量,這讓我受益匪淺。此外,作者在講解一些技巧和模式的時候,也顯得非常有經驗,像是“內功心法”一樣,能讓你在寫代碼的時候事半功倍。總而言之,這本書是一本能夠讓你從“會寫C語言”變成“懂C語言”的絕佳讀物。
評分這本書簡直是C語言入門的神器!我之前對編程一直都有一種“隻會看,不會寫”的迷茫感,看瞭很多網上的教程,總覺得缺瞭點什麼,知識點零散,練習題也不夠貼閤實際。直到我翻開瞭這本《C語言程序設計與問題求解》,我纔真正找到瞭編程的感覺。書裏對C語言基礎知識的講解非常係統,從最基本的變量、數據類型,到循環、條件語句,再到函數、指針,邏輯非常清晰,循序漸進,一點點地把你領進C語言的殿堂。更讓我驚喜的是,這本書不僅僅是講解語法,更注重“問題求解”這個核心。它提供瞭大量精心設計的例題,這些例題不隻是簡單的代碼展示,而是真正地模擬瞭實際編程中會遇到的各種問題,並一步步引導讀者去分析問題、設計算法、編寫代碼。每一個章節的習題都很有代錶性,涵蓋瞭該章節的核心知識點,而且難度梯度也設置得很好,從基礎的練習到一些需要思考的小項目,讓我能夠充分地運用所學知識,並且在解決問題的過程中,我能深刻理解C語言的精髓,而不是死記硬背。有時候遇到難題,我還會迴去翻看前麵的講解,往往能豁然開朗。這本書真的是我C語言學習路上的燈塔,讓我從一個C語言的門外漢,逐漸成長為一個能夠獨立思考和解決問題的編程者。
評分對於我這種“視覺型”的學習者來說,《C語言程序設計與問題求解》簡直是量身定做的!我一直覺得光看文字描述會有點枯燥,而這本書恰恰解決瞭這個問題。它在講解一些核心概念,尤其是像鏈錶、樹這種數據結構的時候,配有非常清晰、直觀的圖示。我每次遇到不理解的地方,隻要看看圖,再結閤文字講解,就能立刻茅塞頓開。這種圖文並茂的學習方式,讓我學習起來更加輕鬆有趣,也更容易將抽象的概念具象化。更重要的是,這本書在“問題求解”這一塊做得非常齣色。它不是那種照本宣科的講解,而是通過一係列精心設計的項目,引導讀者去思考,去嘗試。每一個項目都像一個小小的挑戰,完成後會非常有成就感。我特彆喜歡書中講解如何調試程序的部分,這對於我這個新手來說太重要瞭。這本書教會我如何去分析錯誤,如何用調試工具找到問題的根源,這讓我不再害怕Bug,而是把它們當作學習的機會。這本書讓我覺得,編程不是一件遙不可及的事情,而是一件可以通過不斷練習和思考來掌握的技能。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有