资源描述:
《算术表达式求值演示-课程设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、题目:算术表达式求值演示班级:031021班姓名:李鑫学号:03102067完成日期:2011.12一、需求分析1.问题描述:表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个经典例子。设计一个程序演示用算符优先法对算术表达式求值的过程。2.基本要求:利用教科书表3.1给出的算符优先关系,实现对算术四则混合运算表达式的求值。3.测试数据:教科书例3-1的算术表达式3*(7-2)。二、概要分析栈的抽象数据类型定义ADTSqStack{数据对象:D={ai
2、ai∈ElemSet,i=1,2
3、,3……,n,n≥0}数据关系:R1={
4、ai-1,ai∈D,i=1,2,3,……,n}约定其中ai端为栈底,an端为栈顶。操作集合:(1)voidInitStack1(SqStack1&S1);//声明栈建立函数(2)voidInitStack2(SqStack2&S2);//声明栈建立函数(3)voidevaluate(SqStack1&S1,SqStack2&S2);//确定如何入栈函数(4)voidPush1(SqStack1&S1,chare);//声明入栈函数(5)v
5、oidPush2(SqStack2&S2,floate);//声明入压栈函数(6)charGetTop1(SqStack1&S1);//声明取栈顶元素函数(7)floatGetTop2(SqStack2&S2);//声明取栈顶元素函数(8)charPop1(SqStack1&S1);//声明出栈函数(9)floatPop2(SqStack2&S2);//声明出栈函数(10)charCompare(charm,charn);//声明比较函数(11)floatOperate(floata,charrh
6、eta,floatb);//声明运算函数(12)voidDispStack1(SqStack1&S1);//从栈底到栈顶依次输出各元素(13)voidDispStack2(SqStack2&S2);//从栈底到栈顶依次输出各元素}ADTSqStack三、详细设计10源程序#includeusingnamespacestd;#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10typedefstruct//运算符栈{char*base;c
7、har*top;intstacksize;}SqStack1;typedefstruct//运算数栈{float*base;float*top;intstacksize;}SqStack2;voidInitStack1(SqStack1&S1);//声明栈建立函数voidInitStack2(SqStack2&S2);//声明栈建立函数voidevaluate(SqStack1&S1,SqStack2&S2);//确定如何入栈函数voidPush1(SqStack1&S1,chare);//声明入
8、栈函数voidPush2(SqStack2&S2,floate);//声明入压栈函数charGetTop1(SqStack1&S1);//声明取栈顶元素函数floatGetTop2(SqStack2&S2);//声明取栈顶元素函数charPop1(SqStack1&S1);//声明出栈函数floatPop2(SqStack2&S2);//声明出栈函数charCompare(charm,charn);//声明比较函数floatOperate(floata,charrheta,floatb);//声明
9、运算函数voidDispStack1(SqStack1&S1);//从栈底到栈顶依次输出各元素voidDispStack2(SqStack2&S2);//从栈底到栈顶依次输出各元素/*主函数*/voidmain(){SqStack1S1;//定义运算符栈10SqStack2S2;//定义运算数栈//freopen("data1.in","r",stdin);//freopen("data1.out","w",stdout);InitStack1(S1);//调用栈建立函数InitStack2(S2
10、);//调用栈建立函数evaluate(S1,S2);//调用确定如何入栈函数cout<<"按任意键结束!"<