表达式求解课程设计
- 格式:doc
- 大小:412.50 KB
- 文档页数:29
摘要
本程序是关于表达式求解的问题,其主要功能是进行简单的四则运算,其特点之一是支持带括号的四则运算;二是用到栈的一些相关操作,不但对操作有提示,还对与异常输入信息报错。
通过该题目的设计过程,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。
在表达式求解用到的算法中,c语言算法可读性很强,一方面,是因为c语言是高级语言,是面向程序员的语言,二是c语言的功能是很完备的,可以达到事半功倍的效果,和其他语言相比量是比较少。栈的应用使该程序更出色。
关键字:堆栈,初始化栈,入栈,出栈。
Abstract
This program is about expression to solve the problem, its main function is to carry out operations of four simple, one of its features is support four operations with brackets; two is the number of operations used stack, not only has the cue for the operation of abnormal input information, and error.
Through the design process of the subject, to deepen understanding of the logical structure, storage structure of linear table and stack, mastering the linear table and the stack to achieve the basic operation, to further understand and master the various data structures in the book, learn how to learn knowledge to solve practical problems, to cultivate students' ability.
In the expression used in solving algorithm, the algorithm C language readability is very strong, on the one hand, because the C language is a high-level language for programmers, the language, the two is the C language function is complete, can achieve a multiplier effect, and the amount is less than any other language. Stack of applications make the program more outstanding.
Keywords: initialize the stack, stack, the stack, the stack.
目录
摘要 (1)
1概述 (4)
1.1开发背景 (4)
1.2开发意义 (4)
1.3内容与要求 (4)
2概要设计 (5)
2.1算法时间和空间性能分析 (5)
2.2模块功能图 (5)
3详细设计 (7)
3.1函数关系调用模块 (7)
3.2用C语言构造运算符栈函数 (7)
3.3用C语言构造运算数栈函数 (9)
4调试分析 (12)
4.1调试中遇到的问题及对问题的解决方法 (12)
4.2测试结果的输出 (12)
总结 (15)
参考文献 (16)
致谢 (17)
附录(源程序): (18)
1概述
1.1开发背景
在c语言和c++的环境中,综合数据结构所学的知识,开始将‘#’入操作符栈,通过一个函数来判别算术运算符的优先级。且规定‘#’的优先级最低。在输入表达式的最后输入‘#’,代表表达式输入结束。在表达式输入过程中,遇操作数则直接入栈。遇到运算符则与栈顶运算符比较优先级,当前运算符优先级高(前面的运算还不应执行)则当前运算符入栈,扫描下一符号;否则栈顶运算符出栈,两操作数出栈,进行运算,所得结果入数栈,重新比较当前运算符(注意当前运算符未变)与新栈顶运算符。如此重复直到栈顶运算符与当前符号均为‘#’,运算结束。编写出对应的程序来实现它。
1.2开发意义
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象及它们之间相互关系及操作的学科。数据结构按其元素之间的关系可分为四种:1.集合2.线性结构3.树形结构4.网状结构。而栈作为一种重要的线性结构,从数据结构的角度看,其特殊性在于其操作是线性表操作的子集。她是操作受限的线性表。因此可称其为限定性数据结构。但从数据类型的角度看,它是与线性表大不相同的一类重要的抽象数据类型。由于其后进先出的特性,被广泛地应用于各种软件系统中。
1.3内容与要求
(1)使用顺序栈存储算术表达式,主要功能有:输入并建立算术表达式、输出算术表达式、算术表达式的计算及显示输出等;
(2)至少要用10个测试数据,算法对于这些合法的输入数据都能产生满足
规格说明要求的结果;
(3)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;
(4)假设算术表达式中只含加减乘除等四种运算符,操作数是实数,界限符有括号有“()”、“[]”、“{ }”、表达式起始、结束符“#”等;
(5)要求对自己设计的程序进行多次的调试;若表达式在输入出错时能够提示并进行修正;显示栈的变化过程。
(6)通过本次程序设计,更好的掌握建栈、入栈和出栈的顺序,深化数据结构所学的基本内容,提高自己的程序设计能力和编写能力。
2概要设计
2.1算法时间和空间性能分析
时间上,对于含n个字符的表达式,无论是对其进行合法性检测还是对其进行入栈出栈操作n次,因此其时间复杂度为O(n)。
空间上,由于在本程序中,在为算符栈(OPTR)和操作数栈(OPND)涉及到两种情况时申请空间,一方面分别为OPTR栈和OPND栈申请了初始的存储单元,均为STACK_INITSIZE=100个;另一方面,考虑到两个栈在处理具体的算术表达式时,有可能会出现溢出的情况,即栈的初始的存储空间不够用,这时需要为其申请额外的存储空间,每溢出一次,就为其申请存储单元STACKINCREMENT=10个;所以,本程序的算法的空间复杂度一方面取决于算术表达式的长度,另一方面取决于本程序的所有代码所占用的存储空间大小。
2.2模块功能图
设计一个程序,首先要了解程序的设计思路和程序的基本构成框架,图2.1为设计程序的基本思路和概要,通过逐步的模块间的关系调用来实现整个程序的完整性: