(一) 需求分析 1、输入的形式和输入值的范围: 根据题目要求与提示,先选择你要使用的表达式形式(中缀用1,后缀用0),在输入一个中缀表达式,输入数的范围为int 型,此时,程序将计算出表达式的结果。 2、输出的形式: 当按照程序要求选择了1 或0 之后,再输入表达式;如果选择的是1,则程序将自动运算出表达式结果;如果之前选择的是0,则程序将现将中缀表达式转化为后缀表达式并计算出结果。 3、程序所能达到的功能: 本程序能计算出含+、-、*、/、(、)等运算符的简单运算。 4、测试数据: 输入一个表达式,如果你之前选择的是“中缀表达式”,那么输入5*(4-2)#,那么输出结果是10;如果之前选择的是“后缀表达式”,那么输入5*(4-2)#,那么他将先转换成后缀表达式5 4 2 - * #,再输出结果10。 如果输入表达式没有结束标示符#,如5*(4-2),那将不会输出任何结果,或出现错误结果。 (二) 概要设计 为了实现上述操作,应以栈为存储结构。 1. 基本操作: (1). int GetTop(SqStack *s) 初始条件:栈存在; 操作结果:若栈为空,则返回 s 的栈顶元素;否则返回 ERROR。 (2). void Push(SqStack *s,int e) 初始条件:栈存在; 操作结果:插入e 为新的栈顶元素。 (3). int Pop(SqStack *s) 初始条件:栈存在; 操作结果:若栈不空,则删除之,并返回其值;否则返回 REEOR。 (4).void InitStack(SqStack *s) 初始条件:栈存在; 操作结果:置栈为空。 (5). int Empty(SqStack *s) 初始条件:栈存在; 操作结果:判定 s 是否为空栈。 (6). int Operate(int a,char theta, int b) 初始条件:操作数a 和b 存在,且 theta 是+、-、*、/四则运算; 操作结果:返回 a 与b 间 theta 运算的结果。 (7). int In(char s,char* TestOp) 初始条件:s 为待判断字符,TestOp 为已知的算符集合; 操作结果:s 为算符集合中的元素则返回 1,否则返回 0. (8). int ReturnOpOrd(char op,char* TestOp) 初始条件:op 为待确定运算符,TestOp 为已知的算符集合; 操作结果:确定运算符类型。 (9). char precede(char a, char b) 初始条件:a、b 存在; 操作结果:返回算符 a 和 b 的优先权高低。 (10). void PrintOpnd(SqStack *s) 初始条件:栈存在; 操作结果:输出运算数栈。 (11). void PrintOptr(SqStack *s...