需 求 分 析 (附 代 码 ) 一 、 需 求 分 析 ( 1) 首 先 定 义 两 个 栈OPTR、 OPND, 栈OPTR 用 于 存 放 运 算 符 , 栈OPND用 于 存 放 操 作 数 ; 定 义 一 个 一 维 数 组expr【 】 存 放 表 达 式 串 。 ( 2) 主 函 数 主 要 包 括 两 部 分 : ( 1) 判 断 运 算 符 优 先 权 , 返 回 优 先 权 高 的 ; ( 2)操 作 函 数 。 ( 3) 开 始 将 ‘ #’ 入 操 作 符 栈 , 通 过 一 个 函 数 来 判 别 算 术 运 算 符 的 优 先 级 。 且规 定 ‘ #’ 的 优 先 级 最 低 。 在 输 入 表 达 式 的 最 后 输 入 ‘ #’ , 代 表 表 达 式 输 入 结 束 。在 表 达 式 输 入 过 程 中 , 遇 操 作 数 则 直 接 入 栈 。 遇 到 运 算 符 则 与 栈 顶 运 算 符 比 较 优先 级 ,当 前 运 算 符 优 先 级 高 (前 面 的 运 算 还 不 应 执 行 )则 当 前 运 算 符 入 栈 ,扫 描 下 一符 号 ;否 则 栈 顶 运 算 符 出 栈 ,两 操 作 数 出 栈 ,进 行 运 算 ,所 得 结 果 入 数 栈 ,重 新 比 较 当前 运 算 符 (注 意 当 前 运 算 符 未 变 )与 新 栈 顶 运 算 符 。 如 此 重 复 直 到 栈 顶 运 算 符 与 当前 符 号 均 为 ‘ #’ , 运 算 结 束 。 ( 4) 最 初 实 现 的 加 、 减 、 乘 、 除 及 带 小 括 号 的 基 本 运 算 , 但 考虑到 实 用 性, 后来 的 设计中 有加 上了乘 方运 算 。 在 乘 方运 算 中 借用 了 C 库中 自带 的 乘 方函 数pow。 二、 概要 设计 1、 设定 栈 的 抽象数 据类型定 义 : ADT Stack { 数 据对象: D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 } 数 据 关 系 : R1= {
| ai-1, ai∈ D, i=2,...,n } 约 定an 端 为 栈 顶 , a1 端 为 栈 底 。 基 本 操 作 : InitStack(&S) 操 作 结 果 : 构 造 一 个 空 栈 S。 DestroyStack(&S) 初 始 条 件 : 栈 S 已 存 在 。 操 作 结 果 : 栈 S 被 销 毁 。 StackEmpty(S...