欢迎来到天天文库
浏览记录
ID:39545166
大小:92.51 KB
页数:17页
时间:2019-07-05
《算术表达式的求解-数据结构课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程设计报告题目:算术表达式求值一、需求分析1、设计要求:给定一个算术表达式,通过程序求出最后的结果1>、从键盘输入要求解的算术表达式;2>、采用栈结构进行算术表达式的求解过程;3>、能够判断算术表达式正确与否;4>、对于错误表达式给出提示;5>、对于正确的表达式给出最后的结果;2、设计构想:为了实现算符优先算法使用两个工作栈,一个称作OPTR,以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。在操作数和操作符入栈前,通过一个函数来判别,输入的是操作数还是操作符,操作数入OPND,操作符入OPTR。在输入表达式的最后输入‘
2、#’,设定‘#’的优先级最低,代表表达式输入结束。在表达式输入过程中,遇操作数则直接入栈,遇到运算符则与栈顶运算符比较优先级,若当前运算符优先级高,则当前运算符入栈,扫描下一符号;否则栈顶运算符出栈,两操作数出栈,进行运算,所得结果入数栈,重新比较当前运算符与新栈顶运算符。如此重复直到栈顶运算符与当前符号均为‘#’,运算结束。二、概要设计1、本程序包含的模块:(1)栈模块——实现栈抽象数据类型(2)运算模块——实现数据表达式的运算(3)主程序模块算术运算式的求解栈模块主函数模块main运算模块初始化栈定义栈结构出栈入栈取栈顶元素判断
3、输入字符类型判断符号优先级基础运算函数运算函数三、详细设计(1)栈模块1、定义栈结构structSqstack{elemtype*top;//栈顶元素elemtype*base;//栈底元素intstacksize;//栈的大小 };2、栈的基本操作①初始化栈statusinitstack(structSqstack&s){s.base=(elemtype*)malloc(stack_size*sizeof(elemtype));if(!s.base)returnOVERFLOW;s.top=s.base;s.stacksize=s
4、tack_size;returnOK;}②入栈statuspush(structSqstack&s,elemtypee){if(s.top-s.base>=s.stacksize){s.base=(elemtype*)realloc(s.base,(s.stacksize+stack_increasement)*sizeof(elemtype));if(!(s.base))returnOVERFLOW;s.top=s.base+s.stacksize;s.stacksize+=stack_increasement;}*s.top++
5、=e;returnOK;}③出栈elemtypepop(structSqstack&s){elemtypee;if(s.top==s.base)returnERROR;e=*--s.top;returne;}④取栈顶元素elemtypegettop(structSqstack&s){elemtypee;if(s.top==s.base)returnERROR;e=*(s.top-1);returne;}(2)运算模块1、判断输入字符c是否为操作符:若是,则返回1;否则,返回0intIn(intc){charp[10]="+-*/()
6、#^";inti=0;while(p[i]!=' '){if(p[i]==c)return1;i++;}return0;}2、判断运算符的优先级charprecede(chartop,charc)//该函数为判断当前运算符与前一个运算符的优先级,前一个运算符高于或等于当前运算符的优先级则返回‘>’,前一个运算符小于当前运算符的优先级则返‘<’,当前一个运算符为‘(’当前运算符为‘)’时返回‘=’,用于去除表达式的括号。{charresult;switch(c){case'#':result='>';break;case'+':ca
7、se'-':if(top=='#'
8、
9、top=='(')result='<';elseresult='>';break;case'*':case'/':if(top=='*'
10、
11、top=='/'
12、
13、top=='^')result='>';elseresult='<';break;case'%':if(top=='%'
14、
15、top=='/'
16、
17、top=='^'
18、
19、top=='*')result='>';elseresult='<';break;case')':if(top=='(')result='=';elseresult='>';b
20、reak;case'(':result='<';break;case'^':result='<';break;default:printf("操作符输入错误!");}returnresult;}3、运算函数①基础运算函数:实现相应
此文档下载收益归作者所有