c语言程序设计报告表达式求值,数据结构算术表达式求值实验报告.pdf

92afa9673925d49cc527eaf72598dba8.png

北京理工大学珠海学院《数据结构》课程设计报告 题目:____________算术表达式求值_________________所在学院:班级:学生姓名:指导教师:2010年 05 月 26 日目录 1.前言··································································································1 2.概要设计··································································································1 2.1 数据结构设计······················································································································1 2.2 算法设计···························································································································1 2.3 ADT 描述··························································································································2 2.4 功能模块分析····················································································································2 3.详细设计··································································································3 3.1 数据存储结构设计················································································································3 3.2主要算法流程图 (或算法伪代码)··························································································3 4 .软件测试··································································································6 5.心得体会··································································································8 参考文献······································································································8 附 录···········································································································8北京理工大学珠海学院计算机科学技术学院 1.前言在计算机中,算术表达式由常量、变量、运算符和括号组成。

4-832-jpg_6_0_______-658-0-0-658.jpg

c语言程序设计视频教程 曾怡教授讲解 全28讲完整版下载 c语言视频教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。c语言程序设计视频教程 曾怡教授讲解 全28讲完整版下载 c语言程序视频教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。《c语言程序设计》视频教程(曾怡) c语言程序设计教程 程序设计视频教程, 语言学习视频教程, 程序的灵魂, 算法, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 数据类型, 运算符与表达式, 顺序程序设计, 顺序程序设计, 顺序程序设计, 选择结构的程序设计, 选择结构的程序设计, 选择结构的程序设计. ... [ 04-04 ]。

0fa4ec540b00e825bef30e7d94807633.gif

1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先 权后作相应的操作,直至整个表达式求值完毕 (即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。1第 页数据结构课程设计 2.3 ADT 描述ADT Stack{数据对象:D {| ∈ElemSet,i 1,2,…,n, n≧0}a ai i数据对象:R1 {|a ,a D ,i 2,…,n}i i1 i1 i约定 端为栈顶, 端为栈底。aani基本操作:InitStack(&S)操作结果:构造一个空栈S。GetTop(S)初始条件:栈S 已存在。操作结果:用P 返回S 的栈顶元素。Push(&S,ch)初始条件:栈S 已存在。操作结果:插入元素ch 为新的栈顶元素。Pop(&S)初始条件:栈S 已存在。操作结果:删除S 的栈顶元素。In(ch)操作结果:判断字符是否是运算符,运算符即返回1。Precede(c1,c2)初始条件:c1,c2 为运算符。操作结果:判断运算符优先权,返回优先权高的。

e42bff67ae21885958256a5fe3c80a52.png

4、size操作(返回当前栈中的元素个数)。并且如果是方法内部需要执行运算时,无非就是对操作数栈中的栈顶元素频繁地执行入栈和出栈操作而已。}对于出栈操作pop,代码如下:/*若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok。

3-754-png_6_0_0_135_280_622_732_892.979_1262.879-641-0-1275-641.jpg

(2)Precede(char c1,char c2) 判断运算符优先权功能,该函数判断运算符c1,c2 的优先权,具体优 先关系参照表 1。(3)Operate(int a,char op,intb)操作数用对应的运算符进行运算功能。运算结果直接返回。(4)num(intn) 求操作数的长度功能数据结构表达式求值,需要用itoa 函数把int 型转换成字符串型,strlen 函数可求 字符长度。(5)EvalExpr()主要操作函数运算功能。分析详细见 “3.详细设计…3.2”。 3.详细设计 3.1 数据存储结构设计因为表达式是由操作符,运算符和界限符组成的。如果只用一个char类型栈,不能满足2 位以 上的整数,所以还需要定义一个int 类型的栈用来寄存操作数。/* 定义字符类型栈 */typedef struct{int stacksize;char *base;char *top;}Stack;/* 定义整型栈 */typedef struct{int stacksize;int *base;int *top;}Stack2; 3.2 主要算法流程图 (或算法伪代码) 1.Precede(char c1,char c2) 判断运算符优先权,返回优先权高的。

算符间的优先关系如下:3第 页数据结构课程设计+-*/()#+><<<<>>->><<<>>*>>>><>>/>>>><>>(<<<<>>>>>#<<<<','>','','>', '>','>','','>', '>','>','>','>','','>', '>','>','>','>','','>', '','>','>','>','!', '>','>', '

算法概要流程图: 利用该算法对算术表达式3*(7-2)求值操作过程如下:步骤OPTR 栈 OPND 栈 输入字符主要操作1#3*(7-2)#Push(OPND,’3’)2#3*(7-2)#Push(OPTR,’*’)3#*3(7-2)#Push(OPNR,’(’)4#*(37-2)#Push(OPND,’7’)5#*(37-2)#Push(OPNR,’-’)6#*(-372)#Push(OPND,’2’)7#*(-372)#Operate(‘7’,’-’,’2’)8#*(3 5)#Pop(OPTR)9#*3 5#Operate(‘3’,’*’,5’)10#15#Return(GetTop2(OPND))表2 算法伪代码如下: int EvalExpr()//主要操作函数 {c *ptr++; while(c! '#'||GetTop(OPTR)! '#') { if(!In(c))//不是运算符即进栈 {if(!In(*(ptr-1)))ptr ptr-1;5第 页数据结构课程设计 m atoi(ptr);//取字符串前面的数字段 n num(m); Push2(&OPND,m); ptr ptr+n; c *ptr++; } else switch(Precede(GetTop(OPTR),c)) { case''://退栈并将运算结果入栈 theta Pop(&OPTR); b Pop2(&OPND);a Pop2(&OPND); Push2(&OPND,Operate(a,theta,b)); break; } } 4.软件测试 1.运行成功后界面。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-112082-1.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值