数据结构 算术表达式求值文档格式.docx

上传人:b****7 文档编号:22886818 上传时间:2023-02-05 格式:DOCX 页数:15 大小:67.58KB
下载 相关 举报
数据结构 算术表达式求值文档格式.docx_第1页
第1页 / 共15页
数据结构 算术表达式求值文档格式.docx_第2页
第2页 / 共15页
数据结构 算术表达式求值文档格式.docx_第3页
第3页 / 共15页
数据结构 算术表达式求值文档格式.docx_第4页
第4页 / 共15页
数据结构 算术表达式求值文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构 算术表达式求值文档格式.docx

《数据结构 算术表达式求值文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构 算术表达式求值文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构 算术表达式求值文档格式.docx

4.3详细设计4

4.3.1程序中用到的抽象数据类型:

4.4测试与分析6

4.4.1测试6

4.4.2调试分析8

4.5附录8

5总结与展望12

1设计时间

2010年12月27至2010年12月30

2设计目的

加强我们的实践能力,掌握数据结构的应用,算法的编写,类C语言的算法转换成C程序并上级调试的基本方法。

对我们基本的程序设计素养的培养和软件工作者作风的训练,起到显著的促进作用。

3设计任务

设计一个程序,演示用算符优先法对算术表达式求值的过程。

4设计内容

4.1需求分析

4.1.1程序的功能

(1)完成运算符和运算数的识别处理。

(2)在识别出运算数的同时,将字符序列形式转换成整数形式。

(3)实现对算数四则混和运算表达式的求值。

1、在本次演示中,要输入以字符序列的形式,语法正确且不含变量的整数表达式然后咦“#”结束。

2、由于算符有优先关系,故用栈来实现。

设置运算符栈接收运算符,优先权低的压入栈内,优先权高的进行运算,设置运算数栈,来接收运算数,并存储运行的结果。

3、在读入字符序列的同时,完成运算符合运算数(整数)的识别处理,以及相应的运算,在识别出是运算数的同时,将当前字符序列转换成整数形式。

1)8+2-3

2)3*(7-2)

3)8/(4-2)

4.2总体设计

4.2.1程序用到的抽象数据类型

本程序利用栈的概念,利用栈“先进后出”的原则,利用链表的存储结构,进而设计的。

(1)首先定义一个栈,将字符x入栈定义栈结点,之后x出栈,既得到栈顶元素初始化的一个栈;

(2)对输入的字符判断是否为运算符,并比较其优先级;

(3)在读入字符序列的同时,完成运算符合运算数(整数)的识别处理。

在读入字符序列的同时,完成运算符合运算数(整数)的识别处理在读入字符序列的同时,完成运算符合运算数(整数)的识别处理。

本算法一共进行了两次调用,第一次调用是charEval_Exp()对voidPushOptr(SNode*top,charx)和charPopOptr(SNode*top)的调用,第二次是主函数对charEval_Exp()的调用,完成了运算符的操作,完成字符串对整形的转换。

4.3详细设计

#include<

cstdio>

malloc.h>

#defineNULL0

typedefstructnode{//栈结点

chardate;

structnode*next;

}SNode;

SNode*InitStack(){//初始化top

SNode*top;

top=(SNode*)malloc(sizeof(SNode));

top->

next=NULL;

returntop;

}

4.3.2对主程序和其它主要函数写出伪码算法:

charEval_Exp(){//完成运算符操作

chara,b,c,r,f,z;

intresult;

SNode*top[2];

top[0]=InitStack();

PushOptr(top[0],'

#'

);

top[1]=InitStack();

c=getchar();

while(c!

='

||(GetTop(top[0]))!

){

if(!

In(c)){

PushOptr(top[1],c);

}

else{

r=Precede(GetTop(top[0]),c);

switch(r){

case'

<

'

:

PushOptr(top[0],c);

break;

PopOptr(top[0]);

>

b=PopOptr(top[0]);

a=PopOptr(top[1]);

z=PopOptr(top[1]);

result=Operate(z,b,a);

f=result+'

0'

;

//用+'

完成字符串对整形的转换

PushOptr(top[1],f);

returnf;

4.3.3画出函数的调用关系图

各程序模块之间的层次(调用)关系:

算符间优先关系如下表:

+

-

*

/

#

=

4.4测试与分析

4.4.1测试

给出测试数据,输出测试的结果,测试数据应该完整(覆盖算法各种情况)。

1)测试8+2-3结果如图4-1所示:

图4-1

2)测试3*(7-2)结果如图4-2所示:

图4-2

3)测试8/(4-2)的结果如图4-3所示:

图4-3

4.4.2调试分析

在设计程序的过程中,出现程序不能运行,发现不能找到表达式结束的标识符,因此,在设计的时候需要认为动态的添加结束标识符‘#’,是程序能够顺利的运行。

4.5附录

typedefstructnode{

SNode*InitStack(){

//初始化2个top,后面用来保存我们的输入

voidPushOptr(SNode*top,charx){

SNode*p;

p=(SNode*)malloc(sizeof(SNode));

p->

date=x;

next=top->

next;

next=p;

charPopOptr(SNode*top){

charx;

if(top==NULL)

returnNULL;

p=top->

x=p->

date;

next=p->

free(p);

returnx;

voidPushOpnd(SNode*top,charx){

charPopOpnd(SNode*top){

charGetTop(SNode*top){

return(top->

next)->

intIn(charc){

intn;

switch(c){

+'

-'

*'

/'

('

)'

n=1;

break;

default:

n=0;

returnn;

charPrecede(charx,chary){//判断符号的优先级

inti,j;

intform[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,2},{1,1,1,1,2,1,1},{-1,-1,-1,-1,-1,2,0}};

switch(x){

i=0;

i=1;

i=2;

i=3;

i=4;

i=5;

i=6;

switch(y){

j=0;

j=1;

j=2;

j=3;

j=4;

j=5;

j=6;

if(form[i][j]==1)

return'

else

if(form[i][j]==-1)

else

intOperate(charx,charz,chary){//进行二元运算acb(c为运算符),并返回运算结果

inta=x-'

b=y-'

switch(z){

returna+b;

returna-b;

returna*b;

returna/b;

charEval_Exp(){

chara,b,c,r,f,z;

//调用上面定义的初始化方法

//第一个放一个#用来表示并保存第一个输入

//进行初始化

//取得你控制台的输入

In(c)){//如果一直不是#,

PushOpnd(top[1],c);

//放到第二个top中

//继续取控制台

else{{//如果是#

//比较优先级

a=PopOpnd(top[1]);

z=PopOpnd(top[1]);

PushOpnd(top[1],f);

voidmain(){

charresult;

result=Eval_Exp();

printf("

%d\n"

result-'

5总结与展望

通过这一个学期对数据结构的学习,让我认识到,数据结构就是众多编程语言里的核心,也为我们日后的学习打下基础

在整个上机实践的过程中,我注意到,无论程序的大小,我们都要以一颗认真的心去对待。

一旦程序中出现错误,会导致程序运行的失败。

因此,在设计程序的过程中,我们所要考虑的内容就不仅仅是仔细,还要做到全面。

在以前的C语言学习过程中,我们只需注意如何编写函数,如何顺利的完成我们所要达到的目的,这似乎是没有什么战术而言。

然而现在,情况改变了,在我们编写程序之前,还要综合考虑各种因素。

如:

选择我们自己所需要的数据结构,是用树,图,还是栈,串等,然后选定一种或几种存储结构来确定后面函数的主要风格。

最后在编写每一个函数之前,我们应该仔细的比对,挑选最适合当前状况的算法。

只有真正理解定义数据类型的好处,才能用这样这样一种数据结构来完成我们的程序,达到我们的目的。

通过这次课程设计我觉得我们学习《数据结构》的方法存在一定的弊端,《数据结构》的效果直接影响到我们对其它专业课的学习和今后业务的成长。

我觉得我们对于《数据结构》的学习不仅包括理论部分的学习,还要让我们勤动手,多实践。

参考文献

[1]严蔚敏,吴伟民.数据结构[M].北京:

清华大学出版社,2007.

[2]谭浩强.C语言程序设计[M].北京:

清华大学出版社,2005.

[3]

成绩评定

成绩教师签字

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1