数据结构课程设计报告

发布 2022-10-05 03:13:28 阅读 5226

算术表达式求值系统。

学号。姓名。

班级。指导教师。

成绩。完成时间: 2011.01.02

一、 设计题目描述和要求。

1. 问题:

现在的计算器只能对简单的数进行运算,对复杂的多项表达式不能运算。

2. 解决方案:

设计一个表达式求值系统。

3. 要求:

以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用下表给出的算符优先关系,实现对算术四则混合运算表达式的求值。

算术四则运算的规则:

a. 从左算到右。

b. 先乘除,后加减。

c. 先括号内,后括号外。

根据上述三条运算规则,在运算的每一步中,对任意相继出现的算符θ1和θ2 ,都要比较优先权关系,它们优先关系如下表所示。

二、 系统分析与概要设计。

根据问题描述和要求,系统要求能够正确求出算术表达式的值。在进行算术表达式求值过程中,考虑到我们输入的是中缀表达式,采用后缀表达式比较容易计算,因此先将中缀表达式转换成后缀表达式。程序应该具有:

“将算术表达式转化为后缀表达式”、“利用后缀表达式求值”等基本模块。

由于有优先级的问题,根据优先级不同的运算符运算的次序是不同的,因此。

更具其优先级的大小抽象的将其定义为不同的大小。

三、 详细设计和编码。

1. 数据类型定义。

表达式求值中运算符对应优先级的定义。

struct

char ch;

int pri;

lpri[7]=,rpri[7]=,op用栈存储运算符。

2.各模块算法描述。

(1)计算栈顶运算符对应的数字。

n y n y (2)判断优先级

y n y n (3)中缀转为后缀 n y yn ny y n y n y n n y (4)后缀表达式求值 y n y n y n y n y n y ny n (5)主函数

四、 调试分析。

写程序容易调程序难,调试要求:不仅要有很好的阅读程序的能力,更要有理解,分析和纠错能力。这次在调试过程中发现就是偶尔能运行成功,偶尔不能,只要不用加减就能成功,一旦用加减就运行不了。

最后发现原来加与减弄反了。

五、 测试结果。

进入多项式求值系统。

请输入表达式:4+5*6-2

中缀表达式:4+5*6-2

后缀表达式:4##6##-

表达式的值:32

q键退出,其它键继续。

请选择:h进入多项式求值系统。

请输入表达式:(56-20)/(6-2)-5

中缀表达式:(56-20)/(6-2)-5

后缀表达式:56##-6##-/5#

表达式的值:4

q键退出,其它键继续。

请选择:qpress any key to continue

六、 小结。

利用表达式求值的过程中思路是:输入的是中缀表达式,为了便于求值,先将中缀表达式转换成后缀表达式,再利用后缀表达式求值。在转换的过程中,考到了优先级,因此要对运算符号设定对应的值,就算是虚拟值吧。

在编程的过程中,要细心,耐心,遇到问题不要急。

七、 附录。

#include<>

#include<>

#include<>

#define maxsize 30

struct设定运算符优先级。

char ch;

int pri;

lpri0},,rpri0},,

int leftpri(char op求左运算符op的优先级。

for(int i=0;i<7;i++)

if(lpri[i].ch==op) return lpri[i].pri;

int rightpri(char op求右运算符op的优先级。

for(int i=0;i<7;i++)

if(rpri[i].ch==op) return rpri[i].pri;

int inop(char ch判断ch是否为运算符。

if(ch=='ch=='ch=='ch=='ch=='ch=='

return 1;

else return 0;

int precede(char op1,char op2op1和op2运算符优先级的比较结果。

if(leftpri(op1)==rightpri(op2))

return 0;

else if(leftpri(op1) return -1;

else return 1;

void trans(char *exp,char postexp)将算术表达式exp转换为后缀表达式postexp

char st[maxsize];

int top=-1;

int i=0i作为postexp的下标。

top进栈。

st[top]='

while(*exp!='0')

else为运算符。

while(st[top此时exp扫描完毕,退栈到'='为止。

postexp[i]='0给postexp表达式添加结束标识。

float compvalue(char *postexp计算后缀表达式postexp的值。

float s[maxsize数值栈。

float a,b,d;

int top=-1;

while(*postexp!='0')

postexp继续处理其他的字符。

return s[top];

void main()

char ch='a';

char exp[20];

while(ch!='q'&&ch!='q')

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...