1、 通达学院算法与数据结构设计报告 ( 2014/2015 学年 第 二 学期 ) 题 目: 模拟简单计算器模拟简单计算器 装订线. 目录目录 一、一、课题内容和要求课题内容和要求 1 二、二、需求分析需求分析 1 三、概要设计三、概要设计 1 1 设计理念 1 2.子函数功能 2 3.函数的调用 4 四、详细设计四、详细设计 4 五、测试及结果分析五、测试及结果分析 11 加法测试 . 11 减法测试 . 11 乘法测试 . 12 除法测试 . 12 混合运算 . 13 六、调试六、调试过程中的问题过程中的问题 . 13 七、课程设计总结七、课程设计总结 15 1 一一、课题内容和要求课题内容
2、和要求 利用所学的数据结构的基本知识,设计一个计算器(90) 输入:带有括号、+,-,X,/ 的表达式; 输出:运算结果 实例:输入: (4*3-(2+1) )*2 输出: 18 要求: 1)对不合法输入进行检测并提示; 2)对合法输入求出正确解; 二、二、需求分析需求分析 本程序主要是采用栈的理论知识,主要用到两个结构体栈,一个 用来转化表达式,一个用来计算表达式。 三、三、概要设计概要设计 1 1 设计理念设计理念 首先,用一个字符数组来存储用户输入的中缀表达式。然后用栈 来把这个表达式转化为后缀表达式,转化时要进行符号优先级比较, 这里将* /的优先级定为 2, + -定为 1,括号和=
3、定 为 0。具体思想如下:例如用户输入了 1+2*3=,将其存放入一个字符 数组中。先在栈的底部存放一个=号符,用作符号优先级比较。 首先将 1 存放到另外一个字符数组 s1 中,再将+号入栈。入栈的 同时与底部的=比较优先级, +的优先级高于= ,所以不出 栈,之后将 2 存放入 s2 中,然后再将*入栈,入栈的同时与+ 2 比较符号优先级, *比+高,所以不出栈。再将 3 存入 s2 中。 之后将栈中不是=的运算符都弹出栈,并依次存入 s2 中。所以 s2 中的表达式为 123*+。之后进行计算,计算时用到浮点栈。首先将 s2 中的字符依次入栈, 遇到运算符时进行计算。 所以将 123 入
4、栈后, 再将*入栈的同时,将前面两个数字进行运算,算出结果为 6 并 存入栈中,之后再将+入栈,再与 1 进行运算,结果即为 7,然 后输出结果。 2.2.子函数功能子函数功能 pseqstack1 init_seqstack1(void) pseqstack1 S; S=(pseqstack1)malloc(sizeof(pseqstack1); if(S) S-top1=-1; return S; 初始化栈 int empty_seqstack1(pseqstack1 S) if(S-top1=-1) return 1; else return 0; 3 判断栈是否为空 int push_seqstack1(pseqstack1 S,datatype1 X 进栈