数据结构课程设计算术表达式.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计算术表达式

《数据结构》课程设计 PAGE  PAGE 10 中南民族大学计算机科学学院 专业:软件工程 学号:201421092032 姓名 :李凯 表达式求值 一 目的 利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值的计算结果 二 需求分析 设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值的计算结果。对于这个程序我们从输入,输出,和功能三方面来分析。 程序输入:从键盘上输入表达式,一个算术表达式,由常量、运算符和括号组成(以字符串形式输入,不含变量 )。为了简化,操作数只能为浮点数,操作符 为 “ +”、“-”、“*”、“/”、“(”、“)”,用“#“表示结束。 程序输出:表达式运算结果,运算符栈、运算数栈、输入字符和主要操作变 化过程,如运算符栈、运算数栈的出入记录,字符出入栈的过程,打印出完整的过程。 3.功能要求及说明:从键盘上输入表达式。分析该表达式是否合法(包含分母不能为零的情况): (1)是数字,则判断该数字的合法性。 (2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表 达 式的值。 (3)若是其它字符,则返回错误信息。 若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。 三 概要设计 1.数据结构的选择: 任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈 来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作 的线性表。 为了实现算符优先算法,可以使用两个工作栈。一个称做SqStack1,用以寄存运算符;另一个称做SqStack2,用以寄存操作数或运算结果。首先置操作数栈为空栈,表达式起始符“#”作为运算符栈的栈底元素,然后依次读入表达式的每个字符,若是操作数则进入SqStack2栈,若是运算符则和SqStack1栈的栈顶运算符比较优先权后做相应操作,直至整个表达式求值完毕。 两个栈: typedef struct //运算符栈 { char *base; char *top; int stacksize; }SqStack1; typedef struct //运算数栈 { float *base; float *top; int stacksize; }SqStack2; 2.相关功能函数: void InitStack1(SqStack1 S1);//声明运算符栈建立函数 void InitStack2(SqStack2 S2);//声明运算数栈建立函数 主要的确定如何入栈的函数:void evaluate(SqStack1 S1,SqStack2 S2); void Push1(SqStack1 S1,char e);//声明入栈函数 void Push2(SqStack2 S2,float e);//声明入栈函数 char GetTop1(SqStack1 S1);//声明取栈顶元素函数 float GetTop2(SqStack2 S2);//声明取栈顶元素函数 char Pop1(SqStack1 S1);//声明出栈函数 float Pop2(SqStack2 S2);//声明出栈函数 char Compare(char m,char n);//声明比较函数 通过这个函数我们来实现运算符运算的先后顺序判断运算符优先权,返回优先权高的 算符间的优先关系如下: θ1 θ2+-*/()#+-*/(= )#=最后的计算函数: float Operate(float a,char rheta,float b);//声明运算函数 为了使运算的过程更加直观的反应出来,我们再绘制一个表格,绘制表格的相关函数如下: void D

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档