本書以算法設計為主、C語言為輔的方式編寫,詳細講述順序結構、分支結構、循環結構的算法設計方法、模塊化的設計及實現方法,以及涉及數組、結構體等數據結構的算法設計方法。
宋晏主編
楊國興朱紅副主編
清華大學出版社北京內 容 簡 介本書以算法設計為主、C語言為輔的方式編寫,詳細講述順序結構、分支結構、循環結構的算法設計方法、模塊化的設計及實現方法,以及涉及數組、結構體等數據結構的算法設計方法。本書突出算法,弱化語法,強調規范,重視實踐,培養編程能力;遵循易講、易懂、易學的原則進行編寫。教材配有大量算法設計的實例和實踐題目。
本書適合作為高等院校計算機和非計算機專業的編程初學者的教材,也可作為編程愛好者的入門參考書。本書封面貼有清華大學出版社防偽標簽,無標簽者不得銷售。
版權所有,侵權必究。侵權舉報電話: 0106278298913701121933圖書在版編目(CIP)數據計算機算法基礎/宋晏主編. —2版. —北京: 清華大學出版社, 2015
計算機系列教材
ISBN 9787302409250Ⅰ. ①計…Ⅱ. ①宋…Ⅲ. ①電子計算機-算法理論-高等學校-教材Ⅳ. ①TP301.6中國版本圖書館CIP數據核字(2015)第166133號責任編輯: 白立軍
封面設計: 常雪影
責任校對: 白蕾
責任印制: 李紅英
出版發行: 清華大學出版社
網址: http://www.tup.com.cn, http://www.wqbook.com
地址: 北京清華大學學研大廈A座郵編: 100084
社總機: 01062770175郵購: 01062786544
投稿與讀者服務: 01062776969, cservice@tup.tsinghua.edu.cn
質量反饋: 01062772015, zhiliang@tup.tsinghua.edu.cn
課件下載: http://www.tup.com.cn,01062795954
印刷者: 北京富博印刷有限公司
裝訂者: 北京市密云縣京文制本裝訂廠
經銷: 全國新華書店
開本: 185mm×260mm印張: 17.25插頁: 字數: 402千字
附光盤1張
版次: 2008年9月第1版2015年9月第2版印次: 2015年9月第1次印刷
印數: 1~2000
定價: 34.50元
產品編號: 06529001
主任: 周立柱
副主任: 王志英李曉明
編委委員: (按姓氏筆畫為序)
湯志忠孫吉貴楊波
岳麗華錢德沛謝長生
蔣宗禮廖明宏樊曉椏
責任編輯: 馬瑛珺
責任編委: 王志英
關于程序,著名計算機科學家沃思(N.Wirth)提出了一個經典公式: 程序=數據結構+算法。算法設計是程序設計的核心,也是程序設計的難點。
目前,算法設計的教學模式主要有兩種。
(1) 將算法設計融入到程序設計語言課程中介紹,算法設計只是作為程序設計的一項階段性工作。
(2) 將編程語言融入到算法設計中,突出算法設計教學的主體地位,將程序設計語言作為實現算法的工具。
多年的教學實踐證明,第二種模式能更好地突出算法設計教學的主體地位,使學生真正掌握算法設計的基本方法,并做到觸類旁通、一通百通。
本教材采用算法設計為主、C程序設計語言為輔的方式編寫,主要特色如下。
1. 突出算法,弱化語法,強調規范
本書各章均以算法設計主線展開,強調解決問題的方法、規律;重點講解C語言中重要的一般性的語法知識,回避C語言中過于技巧性、易混淆的、不符合規范的表達方式。
在算法設計和書寫程序上,強調規范化,每章都增加了“C編程規范”這部分內容,教材中所有程序的書寫也都遵照規范,從始至終強化規范化的處理方式,為編程學習者奠定良好的基礎。
2. 先易后難,將字符型數據的使用整合至第8章
由于人們從小就開始接觸數學,學習數學,所以對數值型數據的處理比較容易接受,相對來講,字符型數據學習起來難度較大。本書采取先易后難的原則,在第2~7章全部以數值型數據為例講解算法的設計和C語言的語法。在前面各章打下良好的基礎后,再集中學習字符型數據的處理方法,同時完整地建立字符型數據處理的知識體系。
3. 學為所用,將難度大的語法知識化整為零,利用索引表為讀者規整知識線索
本書各章的C語言語法知識,采取學為所用的原則,通過實例引入,摒棄了將語法知識一股腦、無理由地灌輸的方式,將其化整為零。例如,將C語言中指針的使用分散至各章: 在第6章函數部分引入指針的概念,介紹函數設計中參數的地址傳遞方式;在第7章數組部分引入數組的指針;在第8章字符和字符串部分引入字符串的指針和指針數組;在第9章結構體中引入結構體的指針。用這樣的方式循序漸進,將學習指針的難度分散,并且逐步強化。
為使讀者把分散在各章的知識串聯起來,教材提供了相關索引。
4. 學以致用,重視實踐,培養能力
學習程序設計語言,必須要有很強的上機編寫程序、調試程序的能力。本書在各章設計了與教學內容配套的、有針對性的實驗題目,并提供了詳盡的實踐指導。實驗中特別強調良好的輸入輸出設計和調試程序能力的培養。
本書適合于各高等院校計算機和非計算機專業的編程初學者使用。為了方便讀者的學習,本書配有所有例題、習題和實驗題的源程序。
本書由宋晏任主編并編寫了第5~7章及各章實驗;楊國興、朱紅任副主編,并一同編寫了第1~4章、第8章和第9章及附錄部分;參加本書大綱討論和部分編寫工作的還有嚴婷、鄒廣慧、呂東艷、王京京等。
由于編者的水平有限,書中難免有不當之處,熱切期望得到同行、專家和讀者的批評指正。
編者
2015年6月于北京
第1章計算機基礎知識/1
1.1認識計算機/1
1.1.1計算機硬件系統/1
1.1.2計算機軟件系統/2
1.1.3計算機工作過程/3
1.1.4計算機工作的特點/4
1.2計算機語言/5
1.3計算機程序/7
1.4課外閱讀/8第2章算法與C程序設計初步/10
2.1算法的含義/10
2.2算法的特性/13
2.3C語言編程要點/14
2.3.1C語言的特點/14
2.3.2C程序的組成/15
2.3.3變量/17
2.3.4賦值語句/21
2.3.5基本輸入輸出函數/21
2.4C程序示例/27
2.5擴展知識/28
2.5.1數據類型/28
2.5.2變量的初始化/30
2.5.3不同數據類型間的運算/30
2.5.4自增和自減運算符 /32
2.6C編程規范/33
2.6.1排版/33
2.6.2注釋/33
2.6.3標識符命名/34
2.6.4變量/34
2.7動態調試程序的方法/34
2.7.1設置斷點/35
2.7.2單步運行和觀測窗口/36
2.8課后練習/38
2.9實驗題目/38
2.9.1認識C程序/38
2.9.2比較兩個交換變量取值的算法/40
2.10課外學習/41第3章初步認識結構化算法/42
3.1結構化算法的原則和特點/42
3.1.1結構化算法的主要原則/42
3.1.2結構化算法的主要特點/43
3.23種基本控制結構與流程圖/43
3.2.1傳統流程圖與3種控制結構/43
3.2.2NS圖與3種基本控制結構/44
3.3NS圖描述算法/46
3.4順序結構算法舉例/47
3.5擴展知識/49
3.5.1認識編譯預處理命令include
和define/49
3.5.2編譯預處理命令的使用/51
3.6C編程規范/52
3.7課后練習/52
3.8順序結構算法實驗/52
3.9課外閱讀/53第4章分支結構算法及其實現/54
4.1關系表達式和邏輯表達式/54
4.1.1關系運算和關系表達式/54
4.1.2邏輯運算和邏輯表達式/55
4.2二選一分支結構/58
4.3算法走讀/61
4.3.1對算法的NS圖進行編號/61
4.3.2用測試數據檢驗算法/62
4.4實現二選一結構的ifelse 語句/64
4.4.1ifelse語句的基本形式/64
4.4.2ifelse語句的縮進、對齊/64
4.4.3復合語句/65
4.5含二選一分支結構的算法舉例/67
4.6多分支結構及算法舉例/70
4.6.1多分支選擇結構/70
4.6.2實現多分支結構的C語句/73
4.7擴展知識/74
4.7.1C數據與邏輯“真”與“假”/74
4.7.2條件運算符/74
4.8C編程規范/75
4.8.1排版/75
4.8.2可讀性/75
4.8.3質量保證/76
4.9課后練習/76
4.10實驗題目/77
4.10.1二選一分支結構算法設計/77
4.10.2修改分支結構的C程序/78
4.10.3多分支結構算法設計/79
4.11課外閱讀/80第5章循環結構算法及其實現/81
5.1先判斷型循環結構/81
5.1.1定數循環/81
5.1.2C語言中的while語句/83
5.1.3for 循環結構/85
5.1.4不定數循環/86
5.1.5先判斷型循環結構的算法舉例/89
5.2循環結構算法走讀/94
5.2.1算法走讀/94
5.2.2算法的健壯性/97
5.3后判斷型循環結構/99
5.4 循環的嵌套/102
5.4.1自頂向下、逐步求精的設計方法/102
5.4.2循環的嵌套/104
5.4.3for循環結構與窮舉法/105
5.5擴展知識/109
5.5.1復合賦值運算符/109
5.5.2for循環的靈活使用/109
5.5.3break語句/110
5.5.4枚舉類型/112
5.6C編程規范/115
5.6.1排版/115
5.6.2可讀性/115
5.6.3提高效率/115
5.7課后練習/115
5.8實驗題目/117
5.8.1先判斷型循環結構算法設計(一)/117
5.8.2先判斷型循環結構算法設計(二)/118
5.8.3后判斷型循環結構算法設計/119
5.8.4循環嵌套算法的設計/120
5.8.5利用for循環窮舉法解題/122
5.9課外實踐/123第6章模塊化和C語言的函數/124
6.1“模塊化”程序設計思想/124
6.2函數/126
6.2.1標準函數/126
6.2.2自定義函數/127
6.3參數/130
6.3.1形參和實參/130
6.3.2參數的值傳遞和地址傳遞/130
6.3.3如何設計函數中的參數/132
6.4返回值/137
6.5函數舉例/138
6.6調用過程分析/143
6.6.1函數調用的一般形式/143
6.6.2函數調用的方式/143
6.6.3函數調用的過程/144
6.7擴展知識/146
6.7.1全局變量和局部變量/146
6.7.2函數的遞歸調用/149
6.7.3帶參數的宏定義/151
6.7.4利用#include 實現代碼的重用/153
6.8C編程規范/154
6.8.1函數設計/154
6.8.2全局變量/155
6.8.3指針/155
6.9課后練習/155
6.10實驗題目/157
6.10.1打印月歷/157
6.10.2函數的嵌套調用/157
6.10.3擲骰子游戲/158
6.10.4函數的遞歸/160
6.11課外實踐/161第7章數組/162
7.1一維數組及其使用/162
7.1.1數組的引出/162
7.1.2一維數組的定義和引用/163
7.1.3一維數組使用舉例/165
7.1.4數組名做函數的參數/172
7.1.5排序和查找算法/178
7.2二維數組及其使用/187
7.2.1二維數組的定義和引用/187
7.2.2二維數組使用的一般形式/188
7.2.3二維數組使用舉例/189
7.2.4二維數組名做函數的參數/191
7.3擴展知識/195
7.3.1數組的初始化/195
7.3.2一維數組的指針變量/196
7.3.3一維數組指針做函數的參數/198
7.4C編程規范/199
7.4.1數組定義規范/199
7.4.2數組使用規范/200
7.5課后練習/200
7.6實驗題目/201
7.6.1數組元素計數器和做標記/201
7.6.2數組名作為函數參數/202
7.6.3改進冒泡法排序算法/203
7.6.4二維數組的使用/205
7.7課外實踐/206第8章字符和字符串處理的算法/208
8.1字符類型數據處理的算法/208
8.1.1字符常量與字符變量/208
8.1.2字符數據在內存中的存儲/209
8.1.3字符類型數據處理算法舉例/210
8.2一個字符串的存儲和處理/214
8.2.1一維字符數組與字符串/214
8.2.2C語言中字符串的輸入輸出/215
8.2.3字符串處理函數/217
8.2.4字符串處理算法舉例/219
8.3多個字符串的存儲和處理/225
8.3.1二維字符數組/225
8.3.2多個字符串處理算法舉例/226
8.4擴展知識/229
8.4.1字符串的指針變量/229
8.4.2指針數組/231
8.5課后練習/233
8.6實驗目的/233
8.6.1字符及字符串處理/233
8.6.2字符串處理/234
8.6.3綜合練習多個字符串的
存儲和處理/235第9章結構體/237
9.1結構體的引出/237
9.2結構體類型和結構體變量/238
9.2.1結構體類型/238
9.2.2結構體變量/239
9.2.3結構體變量的引用/241
9.3結構體數組/243
9.3.1結構體數組/243
9.3.2結構體數組的引用/244
9.4指向結構體的指針變量/246
9.4.1結構體變量的指針變量/246
9.4.2結構體和結構體指針做參數/246
9.5擴展知識/248
9.6C編程規范/249
9.6.1結構體設計/249
9.6.2可讀性/250
9.7課后練習/250
9.8實驗題目/251
9.8.1結構體變量的定義和使用/251
9.8.2結構體數組的使用/252
9.8.3結構體做函數的參數——結構體
指針的使用/253
9.9課外實踐/254附錄AC語言常用格式說明符/256附錄B本書各章C語言運算符的優先級和結合性/258附錄C常用字符ASCII碼表/260C語言語法索引/261算法索引/263
參考文獻/264