欢迎来到天天文库
浏览记录
ID:6169339
大小:329.00 KB
页数:28页
时间:2018-01-05
《利用栈求表达式的值》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、利用栈求表达式的值编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。3、若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:voidinitstack():初始化堆栈 intMake_str():语法检查并计算
2、intpush_operate(intoperate):将操作码压入堆栈 intpush_num(doublenum):将操作数压入堆栈 intprocede(intoperate):处理操作码 intchange_opnd(intoperate):将字符型操作码转换成优先级 intpush_opnd(intoperate):将操作码压入堆栈 intpop_opnd():将操作码弹出堆栈 intcaculate(intcur_opnd):简单计算+,-,*,/ doublepop_num():弹出操作数 源代码:#incl
3、ude#include#include#include#defineMAXSIZE100#defineN1000inti=0; //表达式数typedefstructexpression//表达式结构 { longdoubleresult; charexpstr[MAXSIZE]; }expression;expressionexpr[N];//表达式的一个整体容器stypedefstruct//操作码栈定义 { charcode[MAXSIZE]; int
4、top; }opnd;typedefstruct//操作数栈定义 { doubledate[MAXSIZE]; inttop; }num;//《——opnd栈操作——》:voidinitstack(opnd*op)//初始化栈 { op->top=-1; }intempty_opnd(opnd*op)//判空 { if(op->top==-1) return0; elsereturn1; }intpush_opnd(opnd*op,charco)//压栈 { if(op->top==MAXSIZE-1) { printf("The
5、"opnd"stackisfull."); return0; } op->top++; op->code[op->top]=co; return1; }charpop_opnd(opnd*op)//出栈 { chara=' '; if(op->top==-1) { printf("error:The"opnd"stackisempty."); returna; } a=op->code[op->top]; op->top--; returna; }charget_opnd(opnd*op)//查看栈顶 { char
6、a=' '; if(op->top==-1) { printf("error:The"opnd"stackisempty."); returna; } else returnop->code[op->top]; }//《——num栈操作——》:voidinitstack(num*nu) { nu->top=-1; }intempty_num(num*nu)//判空 { if(nu->top==-1) return0; elsereturn1; }intpush_num(num*nu,doubleda)//压栈 { if
7、(nu->top==MAXSIZE-1) { printf("error:The"date"stackisfull."); return0; } nu->top++; nu->date[nu->top]=da; return1; }doublepop_num(num*nu)//出栈 { doublea=' '; if(nu->top==-1) { printf("error:The"date"stackisempty."); returna; } a=nu->date[nu->top]; nu->top--;
8、returna; }doubleget_num(num*nu)//查看栈顶 { if(nu->top!=-1) returnnu->date[nu->top]; }//《——结束栈定义操作——》//《——
此文档下载收益归作者所有