书籍详情
C语言编程思想与方法
作者:尹宝林 著
出版社:机械工业出版社
出版时间:2022-04-01
ISBN:9787111698289
定价:¥79.00
购买这本书可以去
内容简介
本书是一本讲授使用C语言进行程序设计的实用参考书。它以C语言为工具,讲授程序设计的过程和方法。从C语言和C程序的基本要素以及程序设计的基本方法开始,循序渐进地引入对程序设计专业化的要求和相关的知识。从增强读者的感性认识入手,通过多角度对例题的分析,示范对关键知识和技术的运用,通过对关键内容在不同层次上的适当重复,深化读者对概念的理解和掌握。
作者简介
尹宝林,1973年毕业于北京航空学院(现更名为北京航空航天大学)计算机专业,1984年获英国爱丁堡大学博士学位。曾任北京航空航天大学计算机系教授、博士生导师。从事计算机专业教学和科研工作多年,主讲过“C语言程序设计”“高级语言程序设计”“UNIX程序设计环境”“计算机图形学”“图像处理”等课程,其中“高级语言程序设计”被评为北京市精品课程。主编过《离散数学》《C程序设计导引》等教材。参加全国信息学奥林匹克(NOI)活动的组织与指导工作,曾任NOI科学委员会副主席。
目录
作者自序
第0章 引言1
第1章 程序设计的基本方法7
1.1 程序设计的基本过程7
1.2 问题分析9
1.2.1 对程序功能的要求9
1.2.2 对程序性能的要求10
1.2.3 程序的使用方式和环境11
1.2.4 程序的错误处理12
1.2.5 程序的测试13
1.2.6 问题分析的结果13
1.3 方案设计18
1.3.1 求解思路18
1.3.2 计算模型21
1.3.3 算法分类24
1.3.4 算法和数据结构的选择26
1.3.5 算法的检验33
1.4 编码:从算法到代码34
1.4.1 代码的结构34
1.4.2 编码的质量37
1.4.3 代码的可维护性39
1.4.4 代码中的注释39
1.4.5 代码的检查40
1.4.6 代码中常见的错误40
1.5 测试和调试42
1.5.1 调试的基本方法43
1.5.2 故障的检查、确认和修改44
1.5.3 常见的故障类型和调试方法46
1.5.4 调试数据的设计和使用48
1.5.5 调试数据和标准输入/输出的重新定向48
1.5.6 调试工具50
1.5.7 测试和调试中常见的问题50
1.6 手册的使用52
第2章 数值的表示和计算53
2.1 整型数据类型53
2.1.1 有符号数和无符号数54
2.1.2 无符号数和标志位56
2.1.3 整型的截断与扩展56
2.1.4 整型计算的溢出和判断58
2.1.5 整除所引起的误差60
2.1.6 整型数据的字节序和尾端62
2.2 浮点数据类型65
2.2.1 浮点数据的表示方法65
2.2.2 有效数字和最低位当量67
2.2.3 浮点数的比较70
2.2.4 浮点数值计算中的上溢和下溢72
2.3 数值计算中的类型转换75
2.3.1 基本类型转换和数据宽度75
2.3.2 强制类型转换77
2.3.3 char的符号类型79
2.3.4 变量符号类型的判断80
2.4 按位操作80
2.4.1 移位操作81
2.4.2 标志位的设置、检测和清除82
2.4.3 常用的位操作模式84
2.4.4 位操作应用举例85
2.5 数值计算的速度88
第3章 指针、数组、结构和类型90
3.1 指针变量91
3.1.1 指针变量的定义91
3.1.2 指针的类型93
3.1.3 指针运算94
3.1.4 指针的强制类型转换95
3.1.5 不合法的指针运算97
3.1.6 指针与整数98
3.1.7 指针的增量运算和减量运算99
3.1.8 作为函数参数的指针100
3.2 指针和一维数组100
3.2.1 指针和数组的互换100
3.2.2 动态一维数组103
3.2.3 数组复制与指针赋值106
3.2.4 变量限制符const108
3.2.5 数组的负数下标109
3.3 二维数组和一维指针数组110
3.3.1 作为参数的二维数组110
3.3.2 二维数组和指针111
3.3.3 二维数组和一维指针数组的对比113
3.3.4 指针数组和命令行参数116
3.3.5 二维数组的动态分配118
3.4 函数指针121
3.4.1 函数指针变量的定义122
3.4.2 函数指针变量的使用123
3.4.3 函数指针数组的使用128
3.5 结构129
3.5.1 结构类型的定义129
3.5.2 结构成员的访问131
3.5.3 结构类型的嵌套定义133
3.5.4 结构的自引用134
3.5.5 结构类型与函数的参数和返回值134
3.6 复杂类型的解读135
3.6.1 变量定义中的复杂类型说明136
3.6.2 强制类型转换中的复杂类型139
3.6.3 类型定义语句和复杂类型的定义139
第4章 程序中的递归142
4.1 递归的定义142
4.2 递归函数的执行149
4.3 递归函数的设计150
4.4 递归的优点和缺点155
4.5 递归函数的效率158
4.6 递归函数的使用161
4.6.1 适宜使用递归的情况161
4.6.2 不适宜使用递归的情况169
4.7 递归函数效率的改进170
4.7.1 尾递归函数的非递归化170
4.7.2 带存储机制的递归171
4.7.3 一般递归函数的非递归化172
第5章 搜索176
5.1 搜索的目标和基本过程176
5.2 深度优先搜索178
5.2.1 深度优先搜索的基本算法179
5.2.2 回溯搜索182
5.3 广度优先搜索185
5.4 重复节点的判断188
5.5 带深度控制的广度优先搜索195
5.6 节点的编码和搜索效率199
第6章 常用函数和函数库209
6.1 静态链接和动态链接209
6.1.1 静态链接209
6.1.2 动态链接210
6.2 库函数的使用211
6.2.1 标准库函数的头文件212
6.2.2 标准函数库文件的使用212
6.2.3 错误信息函数和变量213
6.3 数据输入输出函数214
6.3.1 文件描述字和字符流215
6.3.2 文件的打开、创建和关闭217
6.3.3 文件数据的二进制格式读写220
6.3.4 读写操作中的定位223
6.3.5 基础读写与字符流读写的效率比较225
6.3.6 字符流的冲刷227
6.3.7 文件的属性227
6.4 字符类型函数和字符串操作函数230
6.4.1 字符类型函数230
6.4.2 字符串操作函数231
6.5 时间函数233
6.5.1 日历时间233
6.5.2 程序运行时间235
6.6 随机数函数235
6.6.1 基本随机数函数235
6.6.2 均匀分布随机数的生成236
6.6.3 非均匀连续分布随机数的生成237
6.6.4 离散分布随机数的生成238
第7章 程序的优化241
7.1 优化的作用和意义241
7.2 优化的基本过程242
7.2.1 运算时间和存储空间242
7.2.2 优化可能性的判断243
7.2.3 程序运行的整体计时244
7.2.4 程序运行的分析计时和程序运行剖面246
7.3 运行效率的改进策略和方法249
7.3.1 调整代码249
7.3.2 改进算法254
7.3.3 空间换时间258
7.3.4
第0章 引言1
第1章 程序设计的基本方法7
1.1 程序设计的基本过程7
1.2 问题分析9
1.2.1 对程序功能的要求9
1.2.2 对程序性能的要求10
1.2.3 程序的使用方式和环境11
1.2.4 程序的错误处理12
1.2.5 程序的测试13
1.2.6 问题分析的结果13
1.3 方案设计18
1.3.1 求解思路18
1.3.2 计算模型21
1.3.3 算法分类24
1.3.4 算法和数据结构的选择26
1.3.5 算法的检验33
1.4 编码:从算法到代码34
1.4.1 代码的结构34
1.4.2 编码的质量37
1.4.3 代码的可维护性39
1.4.4 代码中的注释39
1.4.5 代码的检查40
1.4.6 代码中常见的错误40
1.5 测试和调试42
1.5.1 调试的基本方法43
1.5.2 故障的检查、确认和修改44
1.5.3 常见的故障类型和调试方法46
1.5.4 调试数据的设计和使用48
1.5.5 调试数据和标准输入/输出的重新定向48
1.5.6 调试工具50
1.5.7 测试和调试中常见的问题50
1.6 手册的使用52
第2章 数值的表示和计算53
2.1 整型数据类型53
2.1.1 有符号数和无符号数54
2.1.2 无符号数和标志位56
2.1.3 整型的截断与扩展56
2.1.4 整型计算的溢出和判断58
2.1.5 整除所引起的误差60
2.1.6 整型数据的字节序和尾端62
2.2 浮点数据类型65
2.2.1 浮点数据的表示方法65
2.2.2 有效数字和最低位当量67
2.2.3 浮点数的比较70
2.2.4 浮点数值计算中的上溢和下溢72
2.3 数值计算中的类型转换75
2.3.1 基本类型转换和数据宽度75
2.3.2 强制类型转换77
2.3.3 char的符号类型79
2.3.4 变量符号类型的判断80
2.4 按位操作80
2.4.1 移位操作81
2.4.2 标志位的设置、检测和清除82
2.4.3 常用的位操作模式84
2.4.4 位操作应用举例85
2.5 数值计算的速度88
第3章 指针、数组、结构和类型90
3.1 指针变量91
3.1.1 指针变量的定义91
3.1.2 指针的类型93
3.1.3 指针运算94
3.1.4 指针的强制类型转换95
3.1.5 不合法的指针运算97
3.1.6 指针与整数98
3.1.7 指针的增量运算和减量运算99
3.1.8 作为函数参数的指针100
3.2 指针和一维数组100
3.2.1 指针和数组的互换100
3.2.2 动态一维数组103
3.2.3 数组复制与指针赋值106
3.2.4 变量限制符const108
3.2.5 数组的负数下标109
3.3 二维数组和一维指针数组110
3.3.1 作为参数的二维数组110
3.3.2 二维数组和指针111
3.3.3 二维数组和一维指针数组的对比113
3.3.4 指针数组和命令行参数116
3.3.5 二维数组的动态分配118
3.4 函数指针121
3.4.1 函数指针变量的定义122
3.4.2 函数指针变量的使用123
3.4.3 函数指针数组的使用128
3.5 结构129
3.5.1 结构类型的定义129
3.5.2 结构成员的访问131
3.5.3 结构类型的嵌套定义133
3.5.4 结构的自引用134
3.5.5 结构类型与函数的参数和返回值134
3.6 复杂类型的解读135
3.6.1 变量定义中的复杂类型说明136
3.6.2 强制类型转换中的复杂类型139
3.6.3 类型定义语句和复杂类型的定义139
第4章 程序中的递归142
4.1 递归的定义142
4.2 递归函数的执行149
4.3 递归函数的设计150
4.4 递归的优点和缺点155
4.5 递归函数的效率158
4.6 递归函数的使用161
4.6.1 适宜使用递归的情况161
4.6.2 不适宜使用递归的情况169
4.7 递归函数效率的改进170
4.7.1 尾递归函数的非递归化170
4.7.2 带存储机制的递归171
4.7.3 一般递归函数的非递归化172
第5章 搜索176
5.1 搜索的目标和基本过程176
5.2 深度优先搜索178
5.2.1 深度优先搜索的基本算法179
5.2.2 回溯搜索182
5.3 广度优先搜索185
5.4 重复节点的判断188
5.5 带深度控制的广度优先搜索195
5.6 节点的编码和搜索效率199
第6章 常用函数和函数库209
6.1 静态链接和动态链接209
6.1.1 静态链接209
6.1.2 动态链接210
6.2 库函数的使用211
6.2.1 标准库函数的头文件212
6.2.2 标准函数库文件的使用212
6.2.3 错误信息函数和变量213
6.3 数据输入输出函数214
6.3.1 文件描述字和字符流215
6.3.2 文件的打开、创建和关闭217
6.3.3 文件数据的二进制格式读写220
6.3.4 读写操作中的定位223
6.3.5 基础读写与字符流读写的效率比较225
6.3.6 字符流的冲刷227
6.3.7 文件的属性227
6.4 字符类型函数和字符串操作函数230
6.4.1 字符类型函数230
6.4.2 字符串操作函数231
6.5 时间函数233
6.5.1 日历时间233
6.5.2 程序运行时间235
6.6 随机数函数235
6.6.1 基本随机数函数235
6.6.2 均匀分布随机数的生成236
6.6.3 非均匀连续分布随机数的生成237
6.6.4 离散分布随机数的生成238
第7章 程序的优化241
7.1 优化的作用和意义241
7.2 优化的基本过程242
7.2.1 运算时间和存储空间242
7.2.2 优化可能性的判断243
7.2.3 程序运行的整体计时244
7.2.4 程序运行的分析计时和程序运行剖面246
7.3 运行效率的改进策略和方法249
7.3.1 调整代码249
7.3.2 改进算法254
7.3.3 空间换时间258
7.3.4
猜您喜欢