C语言上机实验报告书 表达式求值实验报告.doc

C语言上机实验报告书 表达式求值实验报告.doc

ID:55631226

大小:55.00 KB

页数:6页

时间:2020-05-21

C语言上机实验报告书   表达式求值实验报告.doc_第1页
C语言上机实验报告书   表达式求值实验报告.doc_第2页
C语言上机实验报告书   表达式求值实验报告.doc_第3页
C语言上机实验报告书   表达式求值实验报告.doc_第4页
C语言上机实验报告书   表达式求值实验报告.doc_第5页
资源描述:

《C语言上机实验报告书 表达式求值实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一.需求分析设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。(1)输入的形式:表达式,例如2*(3+4)包含的运算符只能有'+'、'-'、'*'、'/'、'('、')';(2)输出的形式:运算结果,例如2*(3+4)=14;(3)程序所能达到的功能:对表达式求值并输出二.系统设计1.栈的抽象数据类型定义:ADTStack{数据对象:D={ai

2、ai∈ElemSet,i=1,2,…,n,n≥0}数据关系:R1={

3、ai-1,ai∈D,i=2,…,n}约定an端为栈顶,ai端为栈底基本操

4、作:Push(&S,e)初始条件:栈S已存在操作结果:插入元素e为新的栈顶元素Pop(&S,&e)初始条件:栈S已存在且非空操作结果:删除S的栈顶元素,并用e返回其值}ADTStack2.主程序的流程:EvaluateExpression()函数实现了对表达式求值的功能,main()函数直接调用EvaluateExpression()对输入的表达式求值输出函数的调用关系图:ReturnOpOrdmainprecedeInPopPushEvaluateExpression输出Operate3.各个模块的主要功能:*Push(SC*s,charc):把字符压栈*P

5、ush(SF*s,floatf):把数值压栈*Pop(SC*s):把字符退栈*Pop(SF*s):把数值退栈Operate(a,theta,b):根据theta对a和b进行'+'、'-'、'*'、'/'、'^'操作In(Test,*TestOp):若Test为运算符则返回true,否则返回falseReturnOpOrd(op,*TestOp):若Test为运算符,则返回此运算符在数组中的下标precede(Aop,Bop):根据运算符优先级表返回Aop与Bop之间的优先级EvaluateExpression(*MyExpression):用算符优先法对算术表

6、达式求值三.调试分析(1)刚开始只编写了一个Push和一个Pop函数,但因为在EvacuateExpression()里既有运算符入/出栈,又有运算数入/出栈,运行下来总是出错。所以就编写了两个不同的Push和Pop函数,分别使用。四.测试结果输入表达式:2+3*4/5-1输入表达式:5*(10-2*3)-8输入表达式:(5-17)/3+2五.用户手册输入语法正确的、不含变量的数学表达式(运算符只能是'+'、'-'、'*'、'/'、'('、')'),回车即输出结果。六.附录源程序:#include#include#incl

7、ude#include#definetrue1#definefalse0#defineOPSETSIZE8typedefintStatus;unsignedcharPrior[8][8]={//运算符优先级表//'+''-''*''/''('')''#''^'/*'+'*/'>','>','<','<','<','>','>','<',/*'-'*/'>','>','<','<','<','>','>','<',/*'*'*/'>','>','>','>','<','>','>','<',/*'/'*/'>','>','>'

8、,'>','<','>','>','<',/*'('*/'<','<','<','<','<','=','','<',/*')'*/'>','>','>','>','','>','>','>',/*'#'*/'<','<','<','<','<','','=','<',/*'^'*/'>','>','>','>','<','>','>','>'};typedefstructStackChar{charc;structStackChar*next;}SC;//StackChar类型的结点SCtypedefstructStackFloat{floatf;struc

9、tStackFloat*next;}SF;//StackFloat类型的结点SFSC*Push(SC*s,charc){//SC类型的指针Push,返回pSC*p=(SC*)malloc(sizeof(SC));p->c=c;p->next=s;returnp;}SF*Push(SF*s,floatf){//SF类型的指针Push,返回pSF*p=(SF*)malloc(sizeof(SF));p->f=f;p->next=s;returnp;}SC*Pop(SC*s){//SC类型的指针PopSC*q=s;s=s->next;free(q);returns;

10、}SF*Pop(SF*s){//SF类

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。