资源描述:
《数据结构课程设计--表达式求值》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数据结构课程设计算符优先法对算术表达式求值19目录一,课程题目...................................................................1二,程序设计思想..........................................................1三,程序流程图.............................................................1四,程序关键代码设计...................................................1五
2、,程序源代码以及运行结果.........................................3六,心得体会.....................................................................719一,课程题目(算符优先法计算算数表达式)以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教材表3.1(P53)给出的算符优先关系,实现对于算术四则混合运算(加、减、乘、除)表达式的求值。例如:7+(4-2)*3+12/2=19。注:按照四舍五入的方式将四则运算结果取整。二,程序设计思想在程序中分别设立一个运算符栈(
3、OPTR栈),用于存储‘+’,‘-’,‘*’,‘/’,‘#’(‘#’用于判断算术表达式结束),和一个操作数栈(OPND栈),用于存放整数,输入算式后,先将数字与运算符分开入i栈,若为数字则先用转换函数将char类型的数转换为int型并进入操作数栈,若为运算符则根据教材表3.1(P53)给出的算符优先级关系,判断栈顶运算符和从键盘取得的运算符作优先级比较,若取得的运算符优先级高则进栈,直到取得运算符优先级低的,则将操作数取出作operate运算后存入栈顶,反复操作知道遇到‘#’,则结束运算,输出栈顶元素即为结果。19三,程序流程图四,程序关键代码设计本次程序设计共调用了12个方法分别是:In
4、itNumStack,ParseInt,PushNum,PopNum,InitCalStack,PopCal,PushCal,In,GetTopCal,GetTopNum,Preced,Operate。其中ParseInt方法intParseInt(charc[]){intnumber[5],i;for(i=0;i<5;i++){number[i]=(int)(c[i])-48;}19i=10000*number[0]+1000*number[1]+100*number[2]+10*number[3]+number[4];returni;}为将输入的数字字符型转换为整型的转换函数,通过As
5、call表的转换关系,将输入的字符型数字转换为整型。在入栈前进行此方法,以便整型数的计算。Preced,Operate函数charPreced(chara,charb){charc[7]={'+','-','*','/','(',')','#'};chard[7][7]={{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=',''},{'>','>','>'
6、,'>','','>','>'},{'<','<','<','<','<','','='},};intOperate(inta,chartheta,intb){intc;if(theta=='+'){c=a+b;19returnc;}if(theta=='-'){c=a-b;returnc;}if(theta=='*'){c=a*b;returnc;}if(theta=='/'){c=a/b;returnc;}return0;}其中preced是判定运算符栈的栈顶运算符C1与读入的运算符C2之间优先关系函数;Opearte为进行二元运算aCb的函数,如果是编译表达式,则产生这个运算的一组相
7、应的指令并返回存放结果的中间变量名;如果是解释执行表达式,则直接进行该运算,并返回运算结果。19五,程序源代码以及运行结果#include#include#includetypedefstruct{int*base;int*top;intStacksize;}SqlNum;voidInitNumStack(SqlNum&S){S.base=(int*)malloc