数据结构课程设计报告
栈的应用:表达式求值的设计
专业 徐燕萍
学生姓名 班学
级 号
指导教师 完成日期
目 录
1 设计内容…………………………………………………….1 2 设计分析
2.1 系统需求分析……………………………………………..1 2.1.1 系统目标………………………………………………...1 2.1.2 主体功能………………………………………………...1 2.2 系统概要设计……………………………………………..1 2.2.1 系统的功能模块划分………….………………………..1 2.2.2 系统流程图…………………………………...…………2 3 设计实践
3.1 基本分析…………………………………………………..3 3.2 中缀表达式求值…………………………………………..4 3.3 后缀表达式求值…………………………………………..5 3.4 中缀表达式转换成后缀表达式…………………………..6 4 测试方法
4.1 基本测试…………………………………………………..7 4.2 拓展测试…………………………………………………..7 4.3 容错测试…………………………………………………..8 5 程序运行效果……………………………………………….7 6 设计心得…………………………………………………….8 7 附录:源代码……………………………………………….10
栈的应用:表达式求值的设计 1 设计内容 设计一个表达式求值的程序。该程序必须可以接受包含(,),+,-,*,/,%,和^(求幂运算符,a^b=ab)的中缀表达式,并求出结果。如果表达式正确,则输出表达式的结果;如果表达式非法,则输出错误信息。
2 设计分析 2.1系统需求分析 2.1.1系统目标
利用栈设计一个程序,该程序能够用于表达式求值,程序将读入的中缀表达式转换为后缀表达式,然后读取后缀表达式,输出结果。
输入要求:程序从“input.txt”文件中读取信息,在这个文件中如果有多个中缀表达式,则每个表达式独占一行,程序的读取操作在文件的结尾处停止。
输出要求:对于每一个表达式,将其结果放在“output.txt”文件的每一行中。这些结果可能是值(精确到小数点后两位),也可能是错误信息“ERROR IN INFIX NOTATION”。
2.1.2 主体功能
能够处理以字符序列的形式输入的不含变量的实数表达式,正确处理负数与小数,判断表达式是否语法正确(包含分母不能为零的情况),正确实现对算术四则混合运算表达式的求值,能够将计算中遇到的问题和结果以文件的形式予以存储。
2.2系统概要设计 2.2.1系统的功能模块划分
1.判断操作数的函数isnum()
判断当前所指字符是否属于数字,是就返回‘1’,不是就返回‘0’。 2.求运算符优先级函数priority() 为了方便判断运算符优先级,先利用switch函数将不同的运算符返回不同的整型数字,在根据数字的大小判断优先级。‘+’,‘-’优先级相同,返回数字相同 ,‘*’,‘/’也是。 3.表达式求值函数infix_value()
此函数是直接按照设计思路完成问题要求的函数,其中要调用到判断操作符的函数isnum()和求运算符优先级的函数priority()。循环结束弹出栈2的数值,并返回。 4.主函数main()
定义一个数组存储表达式整个字符串,将返回的数值直接赋值到浮点型的result,输出result。 5.两个栈的函数设计:
栈的初始化函数charInit_SeqStack() Init_SeqStack() 栈判空 Empty_SeqStack()
char Empty_SeqStack() 入栈函数 Push_SeqStack()
charPush_SeqStack() 出栈函数 Pop_SeqStack() charPop_SeqStack() 取栈顶函数 GetTop_SeqStack() charGetTop_SeqStack() 销毁栈 Destory_SeqStack()
charDestory_SeqStack()
2.2.2系统流程图