(盐城工学院数据结构课程设计)栈的应用表达式求值 下载本文

数据结构课程设计报告

栈的应用:表达式求值的设计

专业 徐燕萍

学生姓名 班学

级 号

指导教师 完成日期

目 录

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系统流程图