算术表达式的求解数据结构课程设计报告.pdf
《算术表达式的求解数据结构课程设计报告.pdf》由会员分享,可在线阅读,更多相关《算术表达式的求解数据结构课程设计报告.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.-可修编.课程设计报告 题目:算术表达式求值 一、需求分析 1、设计要求:给定一个算术表达式,通过程序求出最后的结果 1、从键盘输入要求解的算术表达式;2、采用栈结构进行算术表达式的求解过程;3、能够判断算术表达式正确与否;4、对于错误表达式给出提示;5、对于正确的表达式给出最后的结果;2、设计构想:为了实现算符优先算法使用两个工作栈,一个称作OPTR,以寄存运算符;另一个称作 OPND,用以寄存操作数或运算结果。在操作数和操作符入栈前,通过一个函数来判别,输入的是操作数还是操作符,操作数入 OPND,操作符入 OPTR。在输入表达式的最后输入#,设定#的优先级最低,代表表达式输入结束。在表
2、达式输入过程中,遇操作数则直接入栈,遇到运算符则与栈顶运算符比较优先级,若当前运算符优先级高,则当前运算符入栈,扫描下一符号;否则栈顶运算符出栈,两操作数出栈,进行运算,所得结果入数栈,重新比较当前运算符与新栈顶运算符。如此重复直到栈顶运算符与当前符号均为#,运算结束。二、概要设计 1、本程序包含的模块:.-可修编.(1)栈模块实现栈抽象数据类型(2)运算模块实现数据表达式的运算(3)主程序模块 三、详细设计(1)栈模块 1、定义栈结构 struct Sqstack 算术运算式的求解 栈模块 主函数模块main 运算模块 初始化栈 定义栈结构 出栈 入栈 取栈顶元素 判断输入字符类型 判断符号
3、优先级 基础运算函数 运算函数 .-可修编.elemtype*top;/栈顶元素 elemtype*base;/栈底元素 int stacksize;/栈的大小 ;2、栈的基本操作 初始化栈 status initstack(struct Sqstack&s)s.base=(elemtype*)malloc(stack_size*sizeof(elemtype);if(!s.base)return OVERFLOW;s.top=s.base;s.stacksize=stack_size;return OK;入栈 status push(struct Sqstack&s,elemtype e).
4、-可修编.if(s.top-s.base=s.stacksize)s.base=(elemtype*)realloc(s.base,(s.stacksize+stack_increasement)*sizeof(elemtype);if(!(s.base)return OVERFLOW;s.top=s.base+s.stacksize;s.stacksize+=stack_increasement;*s.top+=e;return OK;出栈 elemtype pop(struct Sqstack&s)elemtype e;if(s.top=s.base)return ERROR;e=*-s.
5、top;.-可修编.return e;取栈顶元素 elemtype gettop(struct Sqstack&s)elemtype e;if(s.top=s.base)return ERROR;e=*(s.top-1);return e;(2)运算模块 1、判断输入字符 c 是否为操作符:若是,则返回1;否则,返回 0 int In(int c)char p10=+-*/()#;int i=0;while(pi!=0).-可修编.if(pi=c)return 1;i+;return 0;2、判断运算符的优先级 char precede(char top,char c)/该函数为判断当前运算符
6、与前一个运算符的优先级,前一个运算符高于或等于当前运算符的优先级则返回,前一个运算符小于当前运算符的优先级则返;break;case+:case-:if(top=#|top=().-可修编.result=;break;case*:case/:if(top=*|top=/|top=)result=;else result=;else result=;break;.-可修编.case(:result=;break;case:result=;break;default:printf(操作符输入错误!n);return result;3、运算函数 基础运算函数:实现相应的加、减、乘、除、乘方及带小括号
7、的基本数学运算并返回结果,其中 a,b 为两个操作数,theta 为操作符 elemtype operate(elemtype a,char theta,elemtype b)elemtype result;switch(theta)case+:result=a+b;break;case-:result=a-b;break;case*:result=a*b;break;case/:.-可修编.if(b=0)printf(nn 输入错误!分母不能为 0!n);result=0;else result=a/b;break;case%:if(b=0|b=NULL)printf(nn 输入错误!n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算术 表达式 求解 数据结构 课程设计 报告
限制150内