实验二 算术表达式

2019-01-27 11:26

目 录

1概述............................................................................................................................. 1

1.1问题描述.......................................................................................................... 1 1.2算术表达式的构成.......................................................................................... 1 1.3表达式求值的规则.......................................................................................... 1 2需求分析..................................................................................................................... 1

2.1输入的形式和输入值的范围.......................................................................... 1 2.2程序所能达到的功能...................................................................................... 2 3.系统分析.................................................................................................................... 2 4概要设计..................................................................................................................... 2

4.1数据结构及算法思想...................................................................................... 2 4.2堆栈的抽象数据类型定义.............................................................................. 2 4.3算法分析.......................................................................................................... 3

4.3.1系统流程图........................................................................................... 3 4.3.2运算符优先关系模块........................................................................... 4 4.3.3主程序模块........................................................................................... 4 4.3.4堆栈模块............................................................................................... 4 4.4主程序的模块调用.......................................................................................... 5 4.5主要实现的功能函数...................................................................................... 6

4.5.1包含的主要函数功能所具有的功能................................................... 6 4.5.2数据结构设计....................................................................................... 6

5详细设计..................................................................................................................... 6

5.1功能模块详细设计.......................................................................................... 6

5.1.1详细设计思想....................................................................................... 6 5.2中缀表达式转换成后缀表达式...................................................................... 7 5.3后缀表达式求值.............................................................................................. 7 6运行与测试................................................................................................................. 7

测试结果................................................................................................................. 7 7总结和心得................................................................................................................. 8 参考文献........................................................................................................................ 8 8.附:源代码................................................................................................................ 9

1概述

1.1问题描述

编写一个表达式求值程序,使输入一个四则运算表达式后,能够返回正确的结果。该表达式由数字0~9、+、-、*、/、括号组成,且表达式必须正确无误。程序的编写可用到栈或队列的基本算法,求出该表达式的值,并分析算法的时间复杂度和运算的结果。首先要了解算术四则运算的规则,表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子。

1.2算术表达式的构成

一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。我们称它们为单词。一般地,操作数既可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。

1.3表达式求值的规则

1.3.1先乘除,后加减; 1.3.2从左算到右; 1.3.3先括号内,后括号外。

2需求分析

2.1输入的形式和输入值的范围

根据题目要求与提示,在输入一个中缀表达式,输入数的范围为int型,此时,程序将计算出表达式的结果。

2.2输出的形式

1

当按照程序要求选择了,再输入表达式程序将自动运算出表达式结果;中缀表达式转化为后缀表达式并计算出结果。

2.2程序所能达到的功能

本程序能计算出含+、-、*、/、(、)等运算符的简单运算。

3.系统分析

(1) 构造一个空栈S,初始条件:栈S已存在

(2) 用P返回S的栈顶元素

(3) 插入元素ch为新的栈顶元素 (4) 删除S的栈顶元素

(5) 判断字符是否是运算符,运算符即返回1 (6) 判断运算符优先权,返回优先权高的 (7) 输入表达式

(8) 返回表达式的最终结果

4概要设计

4.1数据结构及算法思想

表达式计算是实现程序设计逻辑语言的基本问题之一,也是栈和队列应

用的一个典型的例子。该设计是先通过栈将中缀表达式转换为后缀表达式,在转换过程中又用到了队列的操作。而在得到后缀表达式之后,又用到队列的操作对生成的后缀表达式进行计算。在整个设计的实现过程中,用到的都是栈和队列的概念。

4.2堆栈的抽象数据类型定义

ADT Stack{

数据对象:D={ai|ai∈正整数,i=0,1,2,3,…n,及{+-*/()}} 数据关系:R1={|ai-1,ai∈D} 基本操作: InitStack(&S)

2

操作结果:构造一个空的堆栈S Push(&S, e)

初始条件:存在堆栈S

操作结果:元素e压入堆栈S,top+1 Pop(&S,e)

初始条件:栈S已经存在且非空

操作结果:删除栈顶元素e,输出其值,top-1

4.3算法分析

4.3.1系统流程图

输入一个表达式和’#’入栈 当输入符号时 是 是数字吗? 否 是 栈顶运算符优先级低于输入符号吗? 否 栈顶运算符优先级等于输入符号吗? 是 栈顶是“(”且输入符号为“)” 是 否 栈顶运算符优先级高于输入符号吗? 否 输出栈顶运算符 出错 将符号入栈 对数字进行处理 栈顶运算符出栈 程序结束 是 图4.3.1系统流程图

3

4.3.2运算符优先关系模块

int Priority(DataType op) //求运算符优先级 {

switch(op) {

case '(':

case '#': return(0); case '-':

case '+': return (1); case '*':

case '/': return (2); }

return -1; }

4.3.3主程序模块

void main( ) {

SeqQueue *Q;

SeqQueue PostQ; //定义队列,存放后缀表达式 Q=&PostQ;

InitQueue(Q); //初始化队列

CTPostExp(Q); //调用转换函数将中缀表达式转换成后缀表达式while(!QueueEmpty(Q)) //输出后缀表达式 printf(\printf(\Q->front=0;

printf(\ }

4.3.4堆栈模块

为了实现上述操作,应以栈为存储结构。 基本操作:

(1). int GetTop(SqStack *S)

初始条件:栈存在;

4


实验二 算术表达式.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一年级阅读教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: