1、程 序 设 计 实 践 指 导朱 明 方 赵 莼 善 雷 田 玉 编 著清 华 大 学 出 版 社( 京 ) 新 登 字 158 号内 容 提 要本 书 旨 在 帮 助 广 大 读 者 在 程 序 设 计 的 实 践 中 掌 握 程 序 设 计 的 基 本 知 识 , 提 高 程 序 设 计 的 能 力 。 全 书 共 分 7 章 。 第 1 至 4 章 是 程 序 设 计 的 基 础 训 练 。第 1、 2 章 归 纳 了程 序 设 计 的 基 本 要 求 和 基 本方 法 , 第 3章 简 要 介 绍 了 常 用 算 法 和 数 据 结 构 , 第 4 章 总 结 了 程 序 调 试 与
2、测 试 的主 要 方 法 。 第 5 至 7 章 以 电 路 和 力 学 中 的 一 些 内 容 为 背 景 , 给 出 应 用 问 题 程 序设 计 的 思 路 和 关 键 步 骤 。 第 5 章 重 点 归 纳 了 自 动 建 立 电 路 方 程 的 常 用 方 法 , 第 6 章 简 要 介 绍 了 非 线 性 电 阻 电 路 的 求 解 问 题 , 第 7 章 结 合 力 学 中 的 一 些 例 子 介 绍 了 一 般 工 程 领 域 中 的 程 序 设 计 问 题 。 全 书 各 章 内 容 相 对 独 立 , 并 给 出 相 应 的 例 题 和 练 习 题 , 读 者 可 以 根
3、据 具 体 情 况 灵 活 选 择 学 习 与 练 习 的 内 容 。本 书 可 以 作 为 大 专 院 校 非 计 算 机 专 业 的 学 生 进 行 程 序 设 计 训 练 的 教 材 , 也 可 作 为 广 大 科 技 工 作 者 的 自 学 参 考 书 。版 权 所 有 , 翻 印 必 究 。 本 书 封 面 贴 有 清 华 大 学 出 版 社 激 光 防 伪 标 签 , 无 标 签 者 不 得 销 售 。图 书 在 版 编 目 ( CI P) 数 据程 序 设 计 实 践 指 导 / 朱 明 方 等 编 著 .- 北 京 : 清 华 大 学 出 版 社 , 1996 I SBN 7-
4、302-02344-1 . 程 . 朱 . 程 序 设 计 -方 法 . T P311. 11中 国 版 本 图 书 馆 CIP 数 据 核 字 ( 96) 第 19392 号出 版 者 : 清 华 大 学 出 版 社 ( 北 京 清 华 大 学 校 内 , 邮 编 100084)印 刷 者 : 北 京 市 清 华 园 胶 印 厂发 行 者 : 新 华 书 店 总 店 北 京 科 技 发 行 所开 本 : 787 1092 1/ 16 印 张 : 14. 75 字 数 : 350 千 字版 次 : 1997 年 1 月 第 1 版 1997 年 1 月 第 1 次 印 刷书 号 : ISBN
5、7-302-02344-1/ T P1165印 数 : 00016000定 价 : 15. 60 元前 言实 践 是 学 习 程 序 设 计 的 重 要 环 节 , 要 掌 握 好 程 序 设 计 的 基 本 方 法 和 技 术 , 需 要 不 断 丰 富 理 论 知 识 , 更 需 要 不 断 积 累 实 践 经 验 。 因 此 , 在 学 习 了 程 序 设 计 的 基 本 知 识 并 进 行 了 初 步 的 上 机 练 习 之 后 , 还 需 要 进 行 大 量 的 程 序 设 计 的 训 练 。 通 过 这 些 训 练 , 可 以 深 入 理 解 和 掌 握 程 序 设 计 的 基 本
6、 知 识 、 基 本 方 法 和 技 术 , 并 把 它 们 与 应 用 问 题 结 合 起 来 , 逐 步 积 累 经验 , 最 终 达 到 能 够 用 计 算 机 解 决 实 际 问 题 的 目 的 。 本 书 正 是 为 这 种 训 练 的 需 要 而 编 写 的 。本 书 是 在 教 学 中 多 年 使 用 的 程 序 设 计 训 练 习 题 与 指 导 讲 义 的 基 础 上 修 改 、 补 充 而 成 的 , 以 具 有 程 序 设 计 初 步 知 识 的 读 者 为 对 象 , 内 容 包 括 从 程 序 设 计 基 本 要 求 到 实 际 应 用 问 题 程 序 设 计 所 涉
7、 及 的 基 本 知 识 、 方 法 和 一 些 关 键 步 骤 , 以 及 针 对 各 章 不 同 的 训 练 要 求 所 给 出 的 典 型 示 例 。第 1 至 4 章 是 程 序 设 计 的 基 础 训 练 。 第 1, 2 章 针 对 初 步 学 过 程 序 设 计 语 言 的 读 者 , 归纳 了 程 序 设 计 的 基 本 要 求 和 基 本 方 法 。 第 3 章 概 要 地 介 绍 了 常 用 算 法 和 数 据 结 构 , 这 一 部 分 的 训 练 要 求 读 者 具 有 计 算 机 算 法 和 数 据 结 构 的 基 本 知 识 。 第 4 章 总 结 程 序 调 试
8、与 测 试 的 主 要 方 法 , 这 是 程 序 设 计 的 重 要 环 节 , 就 训 练 而 言 读 者 更 多 地 要 解 决 程 序 调 试 问 题 , 因 此 读 者 更 要 注 重 程 序 调 试 能 力 的 培 养 和 训 练 。第 5 至 7 章 是 针 对 实 际 应 用 问 题 的 程 序 设 计 训 练 。 考 虑 到 通 用 性 , 这 部 分 以 应 用 较 广 泛 的 电 路 、 力 学 中 的 一 些 知 识 为 背 景 。 第 5 章 围 绕 分 析 、 求 解 线 性 电 路 的 程 序 设 计 问 题 , 在归 纳 总 结 有 关 电 路 与 网 络 图
9、论 的 一 些 基 本 概 念 的 基 础 上 , 着 重 讨 论 了 求 解 电 路 的 关 键 步骤 自 动 建 立 电 路 方 程 的 常 用 方 法 。 对 于 方 程 组 的 求 解 问 题 , 因 为 第 3 章 中 已 有 介 绍 , 此 章 不 作 重 点 讨 论 。 第 6 章 简 单 介 绍 了 非 线 性 电 阻 电 路 的 数 值 求 解 方 法 牛 顿 -拉 夫 逊 法 , 以 及 由 此 建 立 的 友 网 络 模 型 。 第 7 章 结 合 力 学 方 面 的 一 些 应 用 例 子 , 说 明 一 般 工 程 领 域 中 计 算 与 数 据 处 理 方 面 的
10、程 序 设 计 问 题 。全 书 各 章 都 给 出 了 进 行 训 练 所 需 要 的 练 习 题 , 练 习 中 的 有 些 问 题 可 以 用 具 体 的 数 据进 行 验 证 , 这 些 验 证 所 需 要 的 数 据 由 教 师 指 定 , 或 由 练 习 者 自 行 选 定 。本 书 第 1 至 4 章 由 朱 明 方 编 写 , 第 5, 6 章 由 赵 莼 善 编 写 , 其 中 练 习 题 部 分 由 其 所 在 的 基 本 电 工 教 研 组 电 路 教 学 组 编 写 , 第 7 章 由 雷 田 玉 编 写 , 全 书 由 朱 明 方 定 稿 。本 书 的 编 写 与 出
11、 版 得 到 了 清 华 大 学 电 子 工 程 系 教 务 科 的 鼓 励 和 支 持 , 得 到 了 清 华 大学 出 版 社 的 大 力 帮 助 , 在 此 表 示 衷 心 的 感 谢 。由 于 编 写 者 的 水 平 所 限 , 书 中 难 免 存 在 一 些 问 题 和 错 误 , 恳 请 读 者 批 评 指 正 。作 者1996 年 4 月 目 录第 1 章 程 序 设 计 的 基 本 要 求 11.1 程 序 设 计 的 基 本 概 念 和 一 般 步 骤 11.1.1 什 么 是 程 序 设 计 11.1.2 程 序 设 计 的 一 般 步 骤 21.2 程 序 的 质 量 6
12、1. 2. 1 程 序 的 正 确 性 与 可 靠 性 71. 2. 2 程 序 的 简 明 性 71. 2. 3 程 序 的 有 效 性 91. 2. 4 程 序 的 可 维 护 性 101. 2. 5 程 序 的 适 应 性 111.3 实 践 学 习 程 序 设 计 的 重 要 环 节 13练 习 题 15第 2 章 程 序 设 计 的 基 本 方 法 172.1 结 构 化 程 序 设 计 方 法 172. 1. 1 结 构 化 程 序 设 计 方 法 的 提 出 172. 1. 2 结 构 化 程 序 的 基 本 结 构 192. 1. 3 自 顶 向 下 和 逐 步 细 化 的 设
13、 计 方 法 312.2 模 块 化 程 序 设 计 方 法 332. 2. 1 模 块 的 划 分 342. 2. 2 模 块 之 间 的 结 构 362.3 程 序 设 计 的 风 格 372. 3. 1 什 么 是 程 序 的 风 格 372. 3. 2 设 计 的 风 格 382. 3. 3 语 言 运 用 的 风 格 392. 3. 4 程 序 正 文 表 示 的 风 格 422. 3. 5 输 入 输 出 的 方 式 与 格 式 462.4 程 序 设 计 举 例 47练 习 题 60第 3 章 常 用 算 法 与 数 据 结 构 623.1 常 用 算 法 概 要 623. 1.
14、 1 计 算 机 算 法 及 其 描 述 62 3. 1. 2 数 值 计 算 中 的 常 用 算 法 673.2 基 本 数 据 结 构 763. 2. 1 线 性 表 及 其 顺 序 存 储 结 构 763. 2. 2 线 性 表 的 链 式 存 储 结 构 链 表 783. 2. 3 栈 和 队 列 803. 2. 4 数 组 与 矩 阵 的 压 缩 存 储 833. 2. 5 二 叉 树 的 基 本 概 念 873.3 常 用 的 查 找 与 排 序 方 法 933. 3. 1 基 本 查 找 方 法 933. 3. 2 常 用 排 序 方 法 973.4 程 序 例 105练 习 题
15、 127第 4 章 程 序 的 调 试 与 测 试 1304.1 程 序 的 调 试 1304. 1. 1 程 序 调 试 的 一 般 步 骤 1304. 1. 2 程 序 调 试 的 实 验 方 法 1364. 1. 3 程 序 调 试 的 推 理 技 术 1394.2 程 序 的 测 试 1414. 2. 1 程 序 测 试 的 基 本 概 念 1414. 2. 2 程 序 测 试 的 常 用 方 法 1454. 2. 3 程 序 测 试 的 层 次 149练 习 题 156第 5 章 线 性 电 路 求 解 及 计 算 机 辅 助 分 析 简 介 1595.1 基 础 部 分 1595.
16、 1. 1 基 本 定 律 1595. 1. 2 线 性 电 路 的 基 本 分 析 方 法 1615. 1. 3 例 题 分 析 1625.2 网 络 图 论 和 网 络 方 程 1665. 2. 1 网 络 图 论 的 一 些 基 本 概 念 1665. 2. 2 支 路 约 束 及 基 尔 霍 夫 定 律 的 矩 阵 形 式 1685. 2. 3 节 点 法 1705. 2. 4 改 进 节 点 法 1715. 2. 5 例 题 分 析 1715.3 建 立 节 点 电 压 方 程 的 关 联 矩 阵 法 1775.4 建 立 节 点 电 压 方 程 的 直 接 法 180练 习 题 1
17、84 一 般 科 学 计 算 问 题 的 程 序 设 计 1977. 1. 1 实 例 之 一 : 公 式 计 算 1977. 1. 2 实 例 之 二 : 求 解 方 程 的 根 2007. 1. 3 实 例 之 三 : 求 解 代 数 方 程 组 2057. 1. 4 实 例 之 四 : 求 解 微 分 方 程 209数 据 处 理 方 面 的 程 序 设 计 2127. 2. 1 数 据 的 输 入 2127. 2. 2 均 值 和 方 差 2137. 2. 3 频 数 分 布 与 累 计 频 数 分 布 2147. 2. 4 工 程 上 的 曲 线 拟 合 问 题 2157. 2. 5
18、 数 据 库 与 数 据 管 理 217第 6 章 非 线 性 电 阻 电 路 的 数 值 求 解 方 法 1896.1 非 线 性 电 阻 元 件 及 电 路 方 程 的 列 写 1896. 1. 1 非 线 性 电 阻 元 件 1896. 1. 2 非 线 性 电 阻 电 路 的 方 程 1896.2 非 线 性 方 程 和 非 线 性 方 程 组 的 求 解 1916. 2. 1 非 线 性 方 程 的 求 解 牛 顿 迭 代 法 1916. 2. 2 非 线 性 方 程 组 的 求 解 牛 顿 -拉 夫 逊 法 1936.3 用 友 网 络 模 型 法 求 解 非 线 性 电 阻 电
19、路 194练 习 题 195第 7 章 一 般 工 程 领 域 应 用 问 题 的 程 序 设 计 1977.1 7.2 7.3 应 用 问 题 计 算 程 序 的 一 般 结 构 2197. 3. 1 子 程 序 2197. 3. 2 主 程 序 2197.4 原 始 数 据 的 处 理 221练 习 题 224主 要 参 考 文 献 229 第 1 章 程 序 设 计 的 基 本 要 求1.1 程 序 设 计 的 基 本 概 念 和 一 般 步 骤1.1.1 什 么 是 程 序 设 计说 起 程 序 设 计 , 初 学 者 住 往 想 到 就 是 用 计 算 机 语 言 写 出 一 些 语
20、 句 。 然 而 , 对 程 序 设 计 的 这 种 理 解 却 是 非 常 片 面 、 很 不 完 整 的 。 实 际 上 , 写 出 程 序 的 语 句 , 只 是 程 序 设 计 的 一 部 分 工 作 , 而 且 就 工 作 量 而 言 是 很 小 的 一 部 分 工 作 。 在 程 序 设 计 过 程 中 , 写 出 程 序 之 前 及 其 以 后 都 有 许 多 重 要 的 工 作 必 须 做 。 那 么 , 究 竟 什 么 是 程 序 设 计 呢 ? 对 于 这 个 问 题 可 以 从 不 同 的 角 度 予 以 回 答 。简 单 地 说 , 程 序 设 计 是 将 事 先 确
21、定 的 解 题 步 骤 , 用 计 算 机 指 令 或 计 算 机 所 能 理 解 的 语 言 描 述 出 来 的 过 程 。 这 里 , 我 们 应 理 解 为 确 定 解 题 步 骤 及 用 计 算 机 语 言 描 述 这 两 个 方 面 。 为 了 用 计 算 机 语 言 把 求 解 问 题 的 过 程 描 述 出 来 , 在 确 定 解 题 步 骤 时 , 一 方 面 要 反 映 问 题 本 身 的 计 算 要 求 , 同 时 又 要 考 虑 方 便 计 算 机 语 言 的 描 述 。 而 计 算 要 求 又 必 须 建 立 在 正 确 的 计 算 模 型 上 , 因 此 , 程 序
22、设 计 工 作 事 实 上 从 拿 到 问 题 的 时 候 就 开 始 了 。 它 包 括 分 析 问 题 、 建 立 数 学 模 型 、 确 定 算 法 与 数 据 结 构 、 程 序 编 写 、 程 序 测 试 等 一 系 列 的 工 作 , 直 至 交 出 一 个 可 用 的 程 序 。 正 因 为 如 此 , 我 们 说 程 序 设 计 是 一 项 涉 及 到 多 方 面 内 容 的 工 作 , 是 把 复 杂 问 题 的 求 解 转 换 为 计 算 机 能 执 行 的 简 单 操 作 的 过 程 。 为 了 完 成 这 个 过 程 , 除 了 对 实 际 问 题 进 行 抽 象 以
23、外 , 还 要 设 计 适 合 于 计 算 机 求 解 的 算 法 , 有 了 正 确 的 算 法 才 能 编 写 出 解 决 问 题 的 程序 。 另 一 方 面 , 程 序 的 处 理 对 象 是 数 据 , 每 个 数 据 都 有 一 定 的 特 性 , 而 且 数 据 之 间 还 会 有 一 定 的 联 系 , 因 而 当 处 理 的 数 据 对 象 比 较 复 杂 时 , 我 们 必 须 仔 细 地 分 析 数 据 以 及 它 们 之 间 的 联 系 , 把 它 们 合 理 地 组 织 起 来 , 即 要 选 择 合 适 的 数 据 结 构 。 确 定 的 数 据 结 构 不 同 ,
24、 程 序 中 采 用 的 处 理 方 法 也 不 一 样 。 这 也 就 是 说 , 算 法 与 数 据 结 构 是 人 们 用 计 算 机 求 解 问 题 时 所 要 作 的 两 种 抽 象 。 算 法 是 从 计 算 机 的 操 作 出 发 对 解 题 过 程 的 抽 象 , 数 据 结 构 是 从 对 被 处 理 数 据 对 象 的 组 织 出 发 对 问 题 的 抽 象 。 这 两 种 抽 象 互 相 依 赖 , 互 相 补 充 , 从 而 有 效 地 降 低 问 题 的 复 杂 性 , 达 到 解 决 问 题 的 目 的 。 这 就 是 程 序 设 计 的 实 质 性 工 作 和 真
25、 正 的 涵 义 。 著 名 计 算 机 科 学 家 沃 思 ( W ir th) 曾 对 程 序 作 过 精 辟 的 描 述 :“程 序 就 是 在 数 据 的 某 些 特 定 的 表 示 方 式和 结 构 的 基 础 上 , 对 抽 象 算 法 的 具 体 描 述 。 ”他 对 程 序 的 这 个 定 义 亦 即 指 出 了 程 序 设 计 的 实 质 。在 程 序 设 计 中 , 除 了 算 法 和 数 据 结 构 以 外 , 程 序 设 计 方 法 也 是 关 系 程 序 设 计 成 败 和 影 响 程 序 设 计 质 量 的 重 要 因 素 。 好 的 程 序 设 计 方 法 可 以
26、 使 设 计 者 思 路 清 楚 , 程 序 结 构 清 晰 , 可 以 用 较 短 的 时 间 设 计 出 正 确 的 程 序 , 并 且 所 设 计 的 程 序 容 易 验 证 其 正 确 性 , 容 易 扩 充 , 便 于 维 护 。 显 然 , 易 验 证 、 易 扩 充 性 等 都 是 程 序 设 计 的 目 标 。为 了 提 高 程 序 设 计 的 效 率 和 质 量 , 设 计 出 满 意 的 程 序 , 选 择 使 用 各 种 优 质 的 软 件 工具 、 改 善 程 序 设 计 的 工 作 环 境 是 非 常 重 要 的 。 这 些 工 具 包 括 算 法 描 述 的 工 具
27、 、 计 算 机 语 言 、1程 序 输 入 、 调 试 、 测 试 等 工 具 软 件 。 正 如 用 先 进 的 仪 器 设 备 可 以 生 产 出 先 进 的 产 品 , 可 以 完 成 高 、 精 、 尖 的 科 学 实 验 一 样 , 有 了 良 好 的 环 境 和 工 具 , 就 为 设 计 高 质 量 的 程 序 提 供 了 方 便 条 件 。综 上 所 述 , 程 序 设 计 不 仅 要 设 计 算 法 , 确 定 数 据 结 构 , 还 涉 及 到 程 序 设 计 方 法 和 设 计工 具 的 选 择 。 因 此 , 有 人 用 以 下 的 公 式 来 描 述 程 序 设 计
28、 :程 序 设 计 = 算 法 + 数 据 结 构 + 方 法 + 工 具 这 是 对 程 序 设 计 涵 义 的 深 刻 揭 示 。1.1.2 程 序 设 计 的 一 般 步 骤如 前 所 述 , 程 序 设 计 涉 及 到 多 方 面 的 内 容 , 它 包 括 从 拿 到 问 题 直 至 得 到 正 确 结 果 这 样 一 个 过 程 。 这 个 过 程 可 以 分 成 若 干 步 骤 或 者 叫 若 干 阶 段 , 在程 序 设 计 中 , 设 计 者 应 该 有 计 划 、 有 条 理 地 逐 步 进 行 。 但 是 , 有 的 初 学 者 往 往 不 重 视 一 些 必 要 的 步
29、 骤 , 一 拿 到 问 题 就 想 直 接 写 出 解 题 的 程 序 。 这 是 一 种 很 不 好 的 习 惯 和 作 风 , 这 样 是 很 难 写 出 高 质 量 的 程 序 来 的 。 就 好 像 一 个 人 写 文 章 , 在 正 式 开 始 下 笔 之 前 未 推 敲 提 纲 , 没 有 对 文 章 的 详 、 略 、 开 头 、 结 尾 等 进 行 认 真 的 思 考 和 合 理 的 安 排 , 很 难 写 出 好 文 章 一 样 。 对 于 设 计 程 序 , 这 种 “拿 来 就 写 ”的 做 法 , 说 明 程 序 员 没 有 掌 握 程 序 设 计 的 一 般 步 骤
30、 。正 如 写 作 文 有 分 析 题 意 , 选 材 , 构 思 , 列 出 粗 提 纲 , 列 出 细 提 纲 , 开 始 写 作 文 这 样 一 些 规 律 性 的 步 骤 一 样 , 设 计 程 序 也 有 一 个 常 规 的 、 通 用 的 步 骤 。 学 习 程 序 设 计 必 须 首 先 了 解 这 些 步 骤 , 并 且 在 不 断 的 练 习 和 实 践 中 逐 渐 掌 握 它 们 。 为 了 使 初 学 者 了 解 和 掌 握 程 序 设 计 的 基 本 规 律 和 步 骤 , 并 具 有良 好 的 程 序 设 计 的 作 风 , 为 设 计 大 型 的 、 高 质 量 的
31、 程 序 打 下 基 础 , 下 面 就 一 般 规 模 的 程 序 设 计 步 骤 作 一 些 介 绍 。程 序 设 计 的 基 本 步 骤 如 图 1.1 所 示 。1. 明 确 所 要 解 决 的 问 题图 1.1 程 序 设 计 基 本 步 骤这 是 拿 到 问 题 以 后 首 先 要 做 的 工 作 , 其 目 的 是 确 切 地 搞 清 楚 问 题 的 性 质 、 任 务 和 要求 , 分 析 任 务 的 规 模 及 效 益 。 这 一 步 要 确 定 解 决 问 题 的 方 针 , 决 定 解 决 问 题 的 出 发 点 和 目 的 地 。 通 过 对 问 题 的 分 析 , 明
32、 确 所 要 达 到 的 目 的 , 在 分 析 已 知 条 件 ( 包 括 问 题 中 所 给 的 条 件 和 现 有 的 计 算 机 系 统 条 件 ) 的 基 础 上 , 根 据 问 题 的 性 质 确 定 解 决 问 题 的 方 针 和 对 策 。 比 如 , 根 据 条 件 决 定 要 不 要 把 问 题 分 解 ; 分 析 有 哪 些 因 素 会 影 响 处 理 的 结 果 ; 在 时 间 、 空 间 和 精 度 等 因 素 发 生 矛 盾 的 时 候 要 决 定 如 何 取 舍 , 等 等 。 对 任 务 、 要 求 分 析 得 越 充 分 、 越 透 彻 , 以后 各 步 的
33、工 作 就 会 越 顺 利 。22. 分 析 问 题 , 建 立 计 算 模 型对 问 题 进 行 具 体 分 析 , 找 出 内 在 的 联 系 与 规 律 , 再 经 过 一 定 的 简 化 和 抽 象 , 用 数 学 语言 进 行 描 述 , 建 立 起 正 确 的 计 算 模 型 。 这 是 程 序 设 计 中 十 分 重 要 的 一 步 , 通 过 这 一 步 要 把 实 际 的 物 理 问 题 转 化 为 数 学 问 题 , 要 从 实 际 问 题 中 抽 象 出 数 据 之 间 的 关 系 。 对 于 数 值 计 算 问 题 要 建 立 起 数 学 模 型 , 对 于 非 数 值
34、 处 理 问 题 则 借 助 于 “数 据 结 构 ”建 立 起 数 据 模 型 。 从 本 质 上 说 , 数 据 模 型 是 某 种 数 据 关 系 的 模 式 , 因 此 , 建 立 数 据 模 型 也 就 是 建 立 数 学 模 型 。 这 里 所 说 的 计 算 模 型 是 一 个 比 数 学 模 型 更 广 泛 的 概 念 , 在 软 件 工 程 中 还 要 用 到 其 他 的 模 型 , 但 就 初 学 者 来 说 , 主 要 是 建 立 数 学 模 型 的 问 题 。解 决 科 学 计 算 方 面 的 问 题 , 一 般 不 需 要 程 序 员 自 己 去 建 立 数 学 模
35、型 , 而 是 用 已 有 的 基 本 模 型 去 完 成 本 问 题 的 映 射 。 设 计 者 的 主 要 任 务 是 把 实 际 问 题 归 结 到 某 种 基 本 模 型 上 , 还要 善 于 在 不 同 的 情 况 下 利 用 不 同 的 基 本 模 型 。 已 有 的 各 种 公 式 、 定 律 、 定 理 等 都 是 基 本 的 数 学 模 型 。 例 如 , 一 个 电 路 网 络 的 求 解 , 经 过 分 析 , 可 以 抽 象 为 解 联 立 方 程 组 , 这 就 是 电 路 网 络 问 题 的 数 学 模 型 。 当 然 这 个 数 学 模 型 的 建 立 是 比 较
36、 容 易 的 , 这 是 因 为 在 电 路 原 理 中 已 经 给 我 们 总 结 了 可 循 的 规 律 。如 果 不 是 纯 计 算 问 题 , 尤 其 在 非 数 值 领 域 , 程 序 员 有 时 要 自 己 去 建 立 数 学 模 型 或 数 据 模 型 , 这 就 需 要 设 计 者 付 出 更 多 的 努 力 来 解 决 计 算 模 型 的 问 题 。 为 说 明 这 一 点 , 我 们 举 一 个 实 例 。猎 人 带 着 狗 、 兔 和 白 菜 要 乘 小 船 渡 河 , 但 因 船 太 小 , 一 次 只 能 带 一 样 。 因 为 狗 能 吃 兔 , 兔 要 吃 菜 ,
37、 所 以 狗 和 兔 , 兔 和 菜 都 不 能 在 无 人 监 视 的 情 况 下 留 在 一 起 。 现 要 找 出 既 能 安 全 渡 河 , 又 使 往 返 监 送 次 数 最 少 的 方 案 。这 个 问 题 要 设 计 程 序 来 解 决 , 关 键 是 要 找 到 将 其 转 换 为 数 学 问 题 的 思 路 , 即 建 立 起 计 算 模 型 。 用 人 工 解 决 这 个 问 题 的 时 候 , 可 以 凭 着 狗 、 兔 、 白 菜 这 些 概 念 以 及 它 们 之 间 不 相 容 的 情 况 , 找 出 求 解 该 问 题 的 方 案 。 比 如 , 可 以 通 过
38、图 1.2 所 示 的 7 步 来 完 成 从 本 岸图 1.2 猎 人 渡 河 过 程3到 对 岸 的 运 送 。 图 中 ,“本 岸 ”表 示 开 始 渡 河 以 前 , 猎 人 、 狗 、 兔 和 白 菜 所 在 的 一 岸 ;“对 岸 ”表 示 猎 人 带 着 狗 、 兔 和 白 菜 最 终 要 到 达 的 河 岸 , 即 “目 的 ”河 岸 。要 设 计 程 序 ( 系 统 不 支 持 汉 字 的 情 况 下 ) 来 解 决 上 述 问 题 , 则 要 以 不 同 的 “标 志 ”分 别 代 表 狗 、 兔 、 白 菜 , 为 方 便 起 见 , 可 以 取 1、 2、 3 分 别
39、代 表 狗 、 兔 、 白 菜 。 这 样 取 数 的 目 的 , 是 要 把 狗 、 兔 、 菜 两 两 在 一 起 时 , 相 容 与 不 相 容 的 情 况 区 分 开 。 可 以 看 出 , 当 两 数 之 差 为 1 时 为 不 相 容 情 况 , 两 数 之 差 为 2 时 则 是 表 示 相 容 的 情 况 。 显 然 在 程 序 中 是 容 易 判 别 它 们 的 。 这 就 是 实 际 问 题 向 数 学 问 题 的 转 化 , 也 是 建 立 该 问 题 的 计 算 模 型 的 过 程 。 具 体 实 现 时 , 程 序 中 可 以 用 两 个 数 组 分 别 代 表 本
40、岸 和 对 岸 , 用 一 个 变 量 代 表 小 船 , 1、 2、 3 分 别 代 表 狗 、 兔 、 和 白 菜 。 本 岸 数 组 中 的 数 1、 2、 3 通 过 小 船 变 量 传 送 给 对 岸 数 组 , 对 岸 数 组 中 的 数 也 会 送 回 给 本 岸 数 组 ( 当 到 达 对 岸 的 两 者 不 相 容 时 , 要 将 其 中 之 一 送 回 本 岸 ) 。 在 每 次 从 数 组 中 取 出 或 向 数 组 存 入 的 时 候 , 要 检 查 数 组 中 的 数 是 否 相 容 , 若 不 相 容 则 试 取 另 一 个 数 , 或 交 换 一 个数 , 使 留
41、 在 本 岸 或 对 岸 数 组 中 的 数 总 是 相 容 或 者 只 有 一 个 。这 个 例 子 中 , 对 问 题 的 抽 象 和 向 数 学 问 题 的 转 化 都 是 比 较 简 单 的 , 但 通 过 它 可 以 说 明 非 数 值 计 算 问 题 如 何 通 过 设 计 程 序 来 解 决 。3. 确 定 数 据 结 构 , 选 择 或 设 计 算 法这 一 步 要 确 定 计 算 机 解 决 所 给 问 题 的 方 法 与 步 骤 。 对 于 数 值 计 算 问 题 , 因 为 通 常 情 况 下 数 据 量 不 是 特 别 大 , 所 以 , 主 要 是 解 决 采 用 何
42、 种 计 算 方 法 及 在 计 算 机 上 实 现 的 算 法 的 问 题 。 对 于 非 数 值 处 理 问 题 , 往 往 数 据 量 比 较 大 , 数 据 的 组 织 合 理 与 否 , 对 计 算 机 处 理 的 效 率 影 响 很 大 , 因 此 , 必 须 很 好 地 考 虑 和 安 排 数 据 的 组 织 形 式 , 即 确 定 数 据 结 构 。 同 时 , 针 对 所 采 用 的 数 据 结 构 采 取 相 应 的 计 算 机 算 法 。 前 已 述 及 , 程 序 设 计 的 根 本 问 题 是 解 决 算 法 与 数 据 结 构 的 问 题 , 可 见 这 一 步 的
43、 重 要 性 。计 算 机 算 法 是 一 个 专 门 的 研 究 课 题 , 人 们 已 总 结 出 许 多 经 验 和 规 律 , 有 许 多 问 题 , 特 别 是 数 值 计 算 问 题 已 有 一 些 现 成 的 算 法 可 以 选 用 。 但 也 有 一 些 问 题 其 算 法 没 有 “现 成 的 模 式 ”可 以 照 搬 , 而 需 要 自 己 去 设 计 , 设 计 算 法 有 时 并 非 易 事 。 在 计 算 机 算 法 课 程 中 讨 论 了 一 些 常 用 的 算 法 和 一 些 基 本 的 规 律 , 但 要 真 正 掌 握 它 , 还 要 经 过 大 量 的 实
44、践 。数 据 结 构 要 研 究 和 讨 论 的 问 题 也 很 多 , 对 基 本 数 据 结 构 的 掌 握 和 应 用 也 要 以 大 量 的实 践 为 基 础 。第 3 章 中 的 练 习 正 是 为 了 加 强 以 上 两 方 面 的 训 练 。4. 根 据 算 法 画 出 流 程 图这 一 步 是 对 算 法 进 行 具 体 描 述 ; 并 用 选 定 的 程 序 设 计 语 言 , 根 据 流 程 图 编 写 程 序 。 画 出 流 程 图 的 过 程 是 把 算 法 具 体 化 的 过 程 , 也 是 使 算 法 向 程 序 靠 近 的 过 程 。 根 据 逐 步 细 化 的
45、方 法 , 画 流 程 图 是 从 粗 到 细 分 为 不 同 层 次 的 , 当 流 程 图 细 到 能 与 程 序 语 句 对 应 时 , 就 可 以进 行 程 序 编 写 了 。 当 然 , 对 每 一 步 画 出 的 流 程 图 都 必 须 进 行 正 确 性 检 查 , 避 免 程 序 中 的 逻 辑 错 误 。 这 里 需 要 说 明 一 点 : 为 了 方 便 结 构 化 程 序 设 计 ( 关 于 结 构 化 程 序 设 计 方 法 , 将 在 第 2 章 中 专 门 练 习 ) , 程 序 流 程 图 要 画 成 结 构 化 流 程 图 。 在 开 始 学 习 程 序 设 计
46、 时 就 学 习 画 结 构 化 流 程 图 , 对 学 会 结 构 化 程 序 设 计 是 非 常 重 要 的 。4在 画 出 流 程 图 以 后 , 根 据 程 序 流 程 图 编 写 程 序 , 这 个 过 程 称 为 编 码 或 代 码 设 计 。 这 一 过 程 是 将 流 程 图 中 的 各 基 本 结 构 转 换 为 程 序 语 言 的 语 句 描 述 。 在 编 写 程 序 时 , 设 计 者 应 该 正 确 、 合 理 地 使 用 语 言 的 语 句 和 语 法 规 则 , 这 就 要 求 设 计 者 要 熟 练 掌 握 所 用 的 语 言 。 为 了 提 高 程 序 设 计
47、 的 质 量 , 增 强 程 序 的 易 读 性 , 还 应 该 使 程 序 设 计 风 格 化 。 关 于 程 序 的 风 格 将 在 第 2 章 中 讨 论 和 练 习 。5. 程 序 的 调 试 与 测 试一 个 程 序 编 写 完 以 后 , 往 往 不 能 保 证 完 全 正 确 , 而 需 要 经 过 反 复 的 检 查 和 修 改 , 这 一步 骤 叫 做 程 序 的 调 试 。程 序 的 调 试 是 程 序 设 计 的 一 个 重 要 环 节 , 程 序 调 试 的 工 作 量 和 所 花 费 的 时 间 , 往 往 要 比 编 写 程 序 大 得 多 , 而 且 它 具 有
48、很 强 的 技 术 性 和 经 验 性 。 因 此 它 也 是 学 习 程 序 设 计 时 需 要 予 以 足 够 重 视 的 基 本 技 能 。 每 个 程 序 的 功 能 和 复 杂 程 度 不 同 , 其 调 试 的 难 易 也 不 一 样 , 但 就 一 般 情 况 而 言 , 程 序 调 试 总 需 要 一 些 基 本 的 步 骤 。 人 们 已 总 结 出 一 些 常 用 的 程 序 调 试 方 法 。为 了 验 证 程 序 的 正 确 性 还 要 对 程 序 的 结 构 和 功 能 进 行 测 试 。 程 序 的 测 试 与 程 序 调 试 有 密 切 的 联 系 , 但 又 有
49、 区 别 , 它 也 有 常 用 的 方 法 。 对 于 初 学 者 来 说 , 因 为 程 序 的 规 模 小 , 也 比 较 简 单 , 程 序 的 调 试 与 测 试 是 不 易 区 分 的 , 但 从 学 习 程 序 设 计 的 要 求 出 发 , 还 是 应 该 了解 并 掌 握 程 序 测 试 的 基 本 方 法 。 关 于 程 序 调 试 和 测 试 的 问 题 将 在 第 4 章 中 专 门 讨 论 。6. 正 式 运 行 程 序在 程 序 调 试 和 测 试 完 成 以 后 , 就 可 以 正 式 运 行 程 序 了 。 对 于 小 程 序 来 说 , 这 一 步 只 要 送 入 正 式 数 据 , 得 到 必 要 的 运 算 结 果 就 达 到 目 的 了 。 但 对 比 较 大 的 程 序 而 言 , 程 序 在 正 式 运 行 后 还 有 维 护 的 问 题 。 在 一 个 大 型 程 序 交 付 运 行 之 后 , 有 可