数据结构课程设表达式求值_00002.docVIP

  • 6
  • 0
  • 约6.14千字
  • 约 20页
  • 2018-11-03 发布于福建
  • 举报
数据结构课程设表达式求值_00002

数据结构课程设计 算符优先法对算术表达式求值 目录 一,课程题目 ................................................................... 1 二,程序设计思想 .......................................................... 1 三,程序流程图 ............................................................. 1 四,程序关键代码设计 ................................................... 1 五,程序源代码以及运行结果 ......................................... 3 六,心得体会 ..................................................................... 7 一,课程题目 (算符优先法计算算数表达式)以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教材表3.1(P53)给出的算符优先关系,实现对于算术四则混合运算(加、减、乘、除)表达式的求值。例如:7+(4-2)*3+12/2=19。注:按照四舍五入的方式将四则运算结果取整。 二,程序设计思想 在程序中分别设立一个运算符栈(OPTR 栈),用于存储‘+’,‘-’,‘*’,‘/’,‘#’(‘#’用于判断算术表达式结束),和一个操作数栈(OPND 栈),用于存放整数,输入算式后,先将数字与运算符分开入i栈,若为数字则先用转换函数将char类型的数转换为int型并进入操作数栈,若为运算符则根据教材表3.1(P53)给出的算符优先级关系,判断栈顶运算符和从键盘取得的运算符作优先级比较,若取得的运算符优先级高则进栈,直到取得运算符优先级低的,则将操作数取出作operate运算后存入栈顶,反复操作知道遇到‘#’,则结束运算,输出栈顶元素即为结果。 三,程序流程图 四,程序关键代码设计 本次程序设计共调用了12个方法分别是: InitNumStack,ParseInt,PushNum,PopNum ,InitCalStack,PopCal ,PushCal,In,GetTopCal,GetTopNum,Preced,Operate。 其中 ParseInt方法 int ParseInt(char c[]){ int number[5],i; for(i=0;i5;i++){ number[i]=(int)(c[i])-48; } i=10000*number[0]+1000*number[1]+100*number[2]+10*number[3]+number[4]; return i; } 为将输入的数字字符型转换为整型的转换函数,通过Ascall表的转换关系,将输入的字符型数字转换为整型。在入栈前进行此方法,以便整型数的计算。 Preced,Operate函数 char Preced(char a , char b){ char c[7]={+,-,*,/,(,),#}; char d[7][7]={ {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,=, }, {,,,, ,,}, {,,,,, ,=}, }; int Operate (int a,char theta,int b){ int c ; if (theta==+){ c=a+b; return c; } if (theta==-){ c=a-b; return c; } if (theta==*){ c=a*b; return c; } if (theta==/){ c=a/b; return c; } return 0; } 其中preced是判定运算符栈的栈顶运算符C1与读入的运算符C2之间优先关系函数;Opearte为进行二元运算aCb的函数,如果是编译表达式,则产生这个运算的一组相应的指令并返回存放结果的中间变量名;如果是解释执行表达式,则直接进行该运算,并返回运算结果。 五,程序源代码以及运行结果 #includestdio.h #includemalloc.h #includestring.h typedef struct{ int *base; int *top; int Stacksize;

文档评论(0)

1亿VIP精品文档

相关文档