本书介绍了用C语言进行软件开发的各个方面。全书共分为14章,讲述了传统软件工程方面的主题,同时也给出了程序设计方面的重要内容。主要内容包括:软件开发周期、规格说明、人机界面设计、模块化、程序美学、防错性程序设计、逐步求精法、验证程序的正确性、测试和文档、性能分析和测量、数据结构和算法设计等。
本书可以在大学本科的一些课程中讲解,如软件工程、数据结构和算法、高级C语言编程。对于想提高所学知识融会贯能能力的学生来说,本书是一本非常不错的参考书。
译者序
前言
第1章 软件开发
1.1 开发活动
1.2 规格说明
1.3 设计
1.4 模块化
1.5 选择编程语言
1.6 程序开始
1.7 确认
1.8 性能分析和测量
1.9 文档
1.10 维护
1.11 增强
1.12 计算机辅助
1.13 小结
1.14 参考文献
第2章 规格说明
2.1 介绍
2.2 数学问题
2.3 编程语言
2.4 电子数据表
2.5 数据库管理
2.6 小结
2.7 参考文献
2.8 练习
第3章 设计
3.1 介绍
3.2 性能
3.3 菜单
3.4 命令格式
3.5 联机帮助
3.6 设计例子
3.7 参考文献
3.8 练习
第4章 模块化
4.1 介绍
4.2 文本编辑器
4.3 电子数据表
4.4 数据库管理
4.5 程序
4.6 小结
4.7 参考文献
4.8 练习
第5章 程序美学
5.1 程序的魅力
5.2 选择名字
5.3 注释
5.4 程序布局
5.5 语句组成
5.6 选择控制语句
5.7 通用性
5.8 输入/输出格式
5.9 参考文献
5.10 练习
第6章 防错性程序设计
6.1 介绍
6.2 输入错误
6.3 数值误差
6.4 边界错误
6.5 混合原因
6.6 参考文献
6.7 练习
第7章 逐步求精法
7.1 介绍
7.2 迷宫老鼠
7.3 排序
7.4 网
7.5 装配线顺序
7.6 参考文献
7.7 练习
第8章 程序的正确性
8.1 介绍
8.2 数学归纳法
8.3 判定转换方法
8.4 参考文献
8.5 练习
第9章 测试
9.1 介绍
9.2 模块测试策略
9.3 产生测试数据
9.4 调试
9.5 参考文献
9.6 练习
第10章 性能分析
10.1 介绍
10.2 空间复杂度
10.3 时间复杂度
10.4 渐近符号(ΟΩΘο)
10.5 实际复杂度
10.6 参考文献
10.7 练习
第11章 性能测量
11.1 介绍
11.2 函数调用开销
11.3 递归和循环
11.4 边界测试
11.5 编程效率
11.6 算法比较
11.7 生成测试数据
11.8 练习
第12章 数据结构
12.1 介绍
12.2 基于公式的表示
12.3 链接表示法
12.4 间接寻址
12.5 比较
12.6 模拟指针
12.7 参考文献
12.8 练习
第13章 高级数据结构
13.1 二元树
13.2 堆
13.3 二叉村
13.4 Union-Find(并查)树
13.5 图
13.6 参考文献
13.7 练习
第14章 算法设计方法
14.1 介绍
14.2 贪心法
14.3 分治法
14.4 动态规则
14.5 回溯法
14.6 分枝-限界法
14.7 启发法
14.8 参考文献
14.9 练习
附录A 曲线拟合
本书实际上是《Pascal 软件开发》(Software Development in Pascal, by Sartaj Sahni, Camelot Publishing Co., Gainesville, FL.)一书的“C”版本,目的是介绍软件开发任务的各个方面。本书的厚度足以证明软件开发中会遇到很多的困难。书中主题体现了我们对软件工程的定义。这些主题包括传统软件工程的内容,如问题规格说明书、人机界面设计、模块化、程序美学、逐步求精、测试和文档;此外还包括程序验证、性能分析和测量、数据结构和算法。我认为,对于软件开发来说,这些主题和前面的主题同样重要。
本书可以用在大学本科的一些课程中。建议从整体上来阅读本书的内容,以便更好地理解软件开发的各个方面。介绍软件工程的课程可以使用第1章到第9章的内容。介绍数据结构和算法的课程可以使用第10章至第14章的内容。高级编程的课程可以使用第1章至第7章和第9章至第12章的内容。要讲解本书内容,推荐使用两个学期的时间。