本书以算法设计为主、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