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