当前位置:文档之家› 算术表达式求值

算术表达式求值

算术表达式求值
算术表达式求值

《数据结构》

课程设计说明书

题目算术表达式求值

学号

姓名

指导教师

日期

内蒙古科技大学课程设计任务书课程名称数据结构课程设计

设计题目算术表达式求值

指导教师时间2013年秋学期第15周至第19周

一、教学要求

1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力

2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能

3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力

4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风

二、设计资料及参数

每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。

算术表达式求值

以字符串表示算术表达式,在此基础上借助栈完成对表达式的转换和求值操作。

要求设计类(或类模板)来描述算术表达式及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:

输入算术表达式(中缀表示)

中缀表达式转换为后缀表达式

输出表达式

对后缀表达式求值

并设计主函数测试该类。

三、设计要求及成果

1. 分析课程设计题目的要求

2. 写出详细设计说明

3. 编写程序代码,调试程序使其能正确运行

4. 设计完成的软件要便于操作和使用

5. 设计完成后提交课程设计报告

四、进度安排

资料查阅与讨论(1天)

系统分析(2天)

系统的开发与测试(5天)

编写课程设计说明书和验收(2天)

五、评分标准

1. 根据平时上机考勤、表现和进度,教师将每天点名和检查

2. 根据课程设计完成情况,必须有可运行的软件。

3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。

4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问

六、建议参考资料

1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11

2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社2007.2

3.《数据结构:用面向对象方法与C++语言描述》,殷人昆主编,清华大学出版社 2007.6

目录

第1章需求分析 (4)

1.1 题目描述 (4)

1.2 设计需求分析 (4)

1.3 详细分析 (4)

第2章总体设计 (6)

2.1 任务与分析 (6)

2.2 程序的主要功能 (6)

2.2.1 中缀表达式转化成后缀表达式 (6)

2.2.2 后缀表达式求值 (8)

2.3 总体功能设计 (9)

第3章抽象数据类型定义 (10)

3.1 链表栈的抽象数据类型的设计 (10)

第4章详细设计 (11)

4.1 工程视图 (11)

4.2 类图视图 (11)

4.3 函数的调用关系 (12)

4.4 主程序流程图 (13)

4.5 主要算法代码 (14)

第5章测试 (19)

5.1 算术表达式求值主界面 (19)

5.2 输入中缀转化求值 (20)

5.3 按y继续输入 (20)

5.4 按n退出 (21)

第6章总结 (21)

6.1 特色之处 (22)

6.2 感想总结 (22)

参考资料 (22)

附录: (23)

第1章需求分析

1.1题目描述

以字符串表示算术表达式,在此基础上借助栈完成对表达式的转换和求值操作。

要求设计类(或类模板)来描述算术表达式及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:

输入算术表达式(中缀表示)

中缀表达式转换为后缀表达式

输出表达式

对后缀表达式求值

并设计主函数测试该类。

1.2设计需求分析

根据题目要求,编译系统计算中缀表达式的过程分为两步:(1)将中缀表达式后缀表达式;(2)根据后缀表达式计算出表达式的值。

在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。

算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/。

算法输出:输出后缀表达式和后缀运算结果。

算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,然后根据栈后进先出的特点不断进行入栈出栈转化成后缀表达式,然后再对后缀表达式进行相应运算。

1.3详细分析

要对一个含有加减乘除四则运算的合法的算术表达式进行求值,首先,应了解算术表达式的四则运算的规则:

(1)从左向右计算

(2)先乘除,后加减

(3)先括号内,后括号外

由此可知,比如算术表达式(7+15)*(23-28/4)的计算顺序,即为

(7+15)*(23-28/4)=22*(23-28/4)=22*(23-7)=22*16=352 其次,应明确“算符优先法”的内容:

算符优先法就是根据上述四则运算规则确定的优先关系来实现对表达式的编译或解释执行的。

一个简单的四则运算表达式由操作数(operand)、运算符(operator)和界限符(delimiter)组成,其中操作数是正整数,运算符只含加、减、乘、除四种,界限符有左右括号和表达式起始、结束符“#”;而且,为了统一算法的描述,将运算符和界限符通称为算符。算符集OP={+,-,*,/,(,),#}。

根据上述3条运算规则,在具体的运算的每一步中,任意两个相继出现的算符θ

1和θ

2

之间的优先关系只能是如下3中关系之一:

θ1<θ2θ1的优先级低于θ2

θ1=θ2θ1的优先级等于θ2

θ1>θ2θ1的优先级高于θ2

下表定义了算符之间的这种优先关系。

表1.1 算符之间的优先关系

θ1θ2+ - * / ()# + > > < < < > > - > > < < < > > * > > > > < > > / > > > > < > > (< < < < < =

)> > > > > > # < < < < < =

第2章总体设计

2.1任务与分析

中缀输入,然后中缀表达式转化成后缀形式。后缀表达式的操作数与中缀表达式的操作数先后次序相同,只是运算符的先后次序发生了改变。因此,对中缀表达式从左到右依次进行扫描,每读到一个操作数即把它作为后缀的一部分输出;每读到一个运算符就将它和下一个运算符进行比较,根据运算符的优先级来决定它是入栈还是出栈。后缀求值,通过ASC依次辨别然后计算。

2.2程序的主要功能

2.2.1中缀表达式转化成后缀表达式

描述:

(1)输入中缀表达式;

(2)扫描中缀表达式,通过调用比较运算符优先级依次输出。

代码表示:

//中缀转后缀

void operation(vector &exp1)

{

int mm=1;

ListStack s2;//通过栈正确输出运算符顺序

s2.push('#');

char c;

cin>>c;

while(c!='#')

{

if(JudgeType(c))

{

if(mm==2)

{

exp1.push_back(',');

}

exp1.push_back(c);

mm=1;

c=getchar();

}

else

{

switch(judgeop(s2.GetTop(),c))

{

case '>':s2.push(c);

c=getchar();

break;

case '=':s2.pop();

c=getchar();

break;

case '<':

{

char temat=s2.pop();

exp1.push_back(',');

exp1.push_back(temat);

break;

}

}

mm=2;

}

}

char name=s2.pop();

while(name!='#')

{

exp1.push_back(',');

exp1.push_back(name);

name=s2.pop();

}

}

2.2.2后缀表达式求值

描述:

(1)设置一个指针用来遍历后缀表达式;

(2)通过符号的ASC码辨别数字和运算符;

(3)计算。

代码表示:

//计算后缀表达式

void Result(vector &exp1)

{

ListStack s1;

int mm=1;

for(vector::iterator iter=exp1.begin();iter!=exp1.end();++iter)

{

if(*iter>=48&&*iter<=57)

{

double num;

num=(double)*iter-48;

if(mm==0)

{

double nn=s1.pop();

num=nn*10+num;

}

s1.push(num);

mm=0;

}

else if(*iter==44)

{

mm=1;

continue;

}

else if(*iter!=44&&*iter<48)

{

double re2=s1.pop();

double re1=s1.pop();

s1.push(operate(re1,re2,*iter));

mm=1;

}

}

cout<

}

2.3总体功能设计

函数主体结构与功能实现如下图2.1所示:

程序功能

中缀输入转化成后缀后缀计算

图2.1

第3章抽象数据类型定义3.1链表栈的抽象数据类型的设计

ADT描述

ADT ListStack{

数据对象D:D={a

i | a

i

∈ElemSet,i=1,2,3……,n,n≥0}

数据关系:R1={

i-1,a

i

>| a

i-1

,a

i

∈D,i=1,2,3,……,n}约定an端为栈顶,a1端为栈底

基本操作:

ListStack()

操作结果:构造一个空栈。push(T ele)

初始条件:栈已存在。

操作结果:插入新元素为栈顶。pop()

初始条件:栈已存在且非空。操作结果:删除栈顶元素。GetTop()

初始条件:栈已存在且非空。操作结果:返回栈顶。

}ADT ListStack

第4章详细设计

4.1工程视图

一个源代码文件,截取工程文件视图,由图4.1表示

图4.1 工程视图

4.2类图视图

这个文件包含类、存储结构及一些重要函数函数,下面用截图来说明。

图4.2类图

4.3函数的调用关系

如下图4.3所示

主函数main()

界面字体颜色system(”color

B”)

Result(exp1)

计算后缀

清屏函数

system (”cls”)Operation

(exp1)转化成

后缀

c har

judgeop(cha

r op1,char

op2)运算符

优先级

图4.3函数调用关系4.4主程序流程图

如图4.4所示:

:

开始

主界面

Y => str

输入

转化

计算

图4.4主程序流程图

4.5 主要算法代码

1.中缀转化成后缀

void operation(vector &exp1) { int mm=1;

ListStack s2;//通过栈正确输出运算符顺序 s2.push('#'); char c; cin>>c; while(c!='#') { if(JudgeType(c)) { if(mm==2)

{

输出

是否继续?

结束

y

n

exp1.push_back(',');

}

exp1.push_back(c);

mm=1;

c=getchar();

}

else

{

switch(judgeop(s2.GetTop(),c))

{

case '>':s2.push(c);

c=getchar();

break;

case '=':s2.pop();

c=getchar();

break;

case '<':

{

char temat=s2.pop();

exp1.push_back(',');

exp1.push_back(temat);

break;

}

}

mm=2;

}

}

char name=s2.pop();

while(name!='#')

{

exp1.push_back(',');

exp1.push_back(name);

name=s2.pop();

}

}

2.计算后缀表达式

void Result(vector &exp1)

{

ListStack s1;

int mm=1;

for(vector::iterator iter=exp1.begin();iter!=exp1.end();++iter) {

if(*iter>=48&&*iter<=57)

{

double num;

num=(double)*iter-48;

if(mm==0)

{

double nn=s1.pop();

num=nn*10+num;

}

s1.push(num);

mm=0;

}

else if(*iter==44)

{

mm=1;

continue;

}

else if(*iter!=44&&*iter<48)

{

double re2=s1.pop();

double re1=s1.pop();

s1.push(operate(re1,re2,*iter));

mm=1;

}

}

cout<

}

3.判断运算符优先级

char judgeop(char op1,char op2)//op1为栈顶元素,op2为读入的符号{

switch(op1)

{

case '#':return '>';

case '+':

{

switch(op2)

{

case '*':

case '/':

case '(':return '>';

case '+':

case '-':

case ')':return '<';

}

}

case '-':

{

switch(op2)

{

case '*':

case '/':

case '(':return '>';

case '+':

case '-':

case ')':return '<';

}

}

case '*':

{

switch(op2)

{

case '(':return '>';

case '*':

case '/':

case '-':

case '+':

case ')':return '<';

}

}

case '/':

{

switch(op2)

{

case '(':return '>';

case '*':

case '/':

case '+':

case '-':

case ')':return '<';

}

}

case '(':

{

switch(op2)

{

case '+':

case '-':

case '*':

case '/':

case '(':return '>';

case ')':return '=';

}

}

}

}

第5章测试

5.1算术表达式求值主界面

图5.1主界面

5.2输入中缀转化求值

图5.2输入中缀转化求值5.3按y继续输入

数据结构表达式求值实验报告

竭诚为您提供优质文档/双击可除数据结构表达式求值实验报告 篇一:数据结构实验二——算术表达式求值实验报告 《数据结构与数据库》 实验报告 实验题目算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系pb0920603 姓学 邮名:李维谷号:pb09206285箱: liwg@https://www.doczj.com/doc/862870997.html,指导教师:贾伯琪 实验时间:20XX年10月10日 一、需要分析 问题描述: 表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。

问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个(:数据结构表达式求值实验报告)算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)#

数据结构实验二——算术表达式求值实验报告

《数据结构与数据库》 实验报告 实验题目 算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系PB0920603 姓名:李维谷 学号:PB09206285 邮箱:liwg@https://www.doczj.com/doc/862870997.html, 指导教师:贾伯琪 实验时间:2010年10月10日 一、需要分析 问题描述:

表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。 问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)# 输出结果:194.4

算术表达式求值演示程序

数理学院 课程设计报告书 课程名称数据结构课程设计 设计题目算术表达式求值演示 专业班级 学号 姓名 指导教师

2014 年12 月

4.2.2 基本操作: InitStack(&S) 操作结果:构造一个空栈S。 GetTop(S) 初始条件:栈S 已存在。 操作结 果: 用P 返回S的栈顶元素。Push(&S 初始条 件:,ch) 栈S 已存在。 操作结 果:插入元素ch 为新的栈顶元素。 Pop(&S) 初始条件:栈S 已存在。 操作结 果:删除S 的栈顶元素。 In(ch) 操作结果:判断字符是否是运算符,运算符即返回1 Precede(c1, c2) 初始条件:c1,c2 为运算符。操作结果:判断运算符优先权,返回优先权高的。Operate(a,op,b) 初始条件:a,b 为整数,op为运算符。操作结果: a 与 b 进行运算,op 为运算符,返回其值。num(n) 操作结果:返回操作数的长度。EvalExpr() 初始条件:输入表达式合法。操作结果:返回表达式的最终结果。}ADT Stack 主程序的流程:

EvaluateExpression() 函数实现了对表达式求值的功能,main() 函数直接调用EvaluateExpression() 对输入的表达式求值输出。 4.2.3 函数的调用关系图

4.3 详细设计 4.3.1 ① . Precede(char c1,char c2)判断运算符优先权,返回优先权高的 算符间的优先关系 如下: 算法伪代码如下: char Precede(char c1,char c2) { static char array[49]={ >', '>', '<', '<', '<', '>', '>', >', '>', '<', '<', '<', '>', '>', >', '>', '>', '>', '<', '>', '>', >', '>', '>', '>', '<', '>', '>', <', '<', '<', '<', '<', '=', '!', >', '>', '>', '>', '!', '>', '>', <', '<', '<', '<', '<', '!', '='}; // 用一维数组存储 49 种情况 switch(c1) { /* i 为下面 array 的横标 */ case '+' : i=0;break; case '-' : i=1;break; case '*' : i=2;break;

数据结构算术表达式求值实验报告

软件技术基础实验报告 实验名称:表达式计算器 系别:通信工程 年级: 班级: 学生学号: 学生姓名: 《数据结构》课程设计报告 题目简易计算表达式的演示 【题目要求】 要求:实现基本表达式计算的功能 输入:数学表达式,表达式由整数和“+”、“-”、“×”、“/”、“(”、“)”组成输出:表达式的值 基本操作:键入表达式,开始计算,计算过程和结果记录在文档中 难点:括号的处理、乘除的优先级高于加减

1.前言 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/、=,用#表示结束。 算法输出:表达式运算结果。 算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。 2.概要设计 2.1 数据结构设计 任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top 指示栈顶元素在顺序栈中的位置,base 为栈底指针,在顺序栈中,它始终指向栈底,即top=base 可作为栈空的标记,每当插入新的栈顶元素时,指针top 增1,删除栈顶元素时,指针top 减1。 2.2 算法设计 为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR ,用以寄存运算符,另一个称做OPND ,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。 2.3 ADT 描述 ADT Stack{ 数据对象:D={ i a |i a ∈ElemSet,i=1,2,…,n, n ≧0} 数据对象:R1={< 1 ,-i i a a >| 1-i a ,D a i ∈,i=2,…,n}

表达式求值课程设计报告

表达式求值课程设计报告 表达式求值 《数据结构》 课程设计报告 题目: 栈的应用:表达式求值 (系): 信息科学与工程学院院 专业班级: 软件工程1102班学生姓名: 学号: 指导教师: 20 13 年 6 月 8 日至20 13 年 6 月 21 日 表达式求值 目录 目录 (2) 1 概述 (1) 1.1 课程设计目的 (1) 1.2 课程设计内容 (1) 2 系统需求分析 ...................................................... 1 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (1) 3 系统概要设计 .................................................... 2 3.1 系统的功能模块划分 (2)

3.2 系统流程图 (2) 4系统详细设计 ..................................................... 3 5 测试 ............................................................ 6 5.1 测试方案 (6) 5.2 测试结果 (6) 6 小结 ............................................................ 8 参考文献 .......................................................... 9 附录1 源程序清单 (10) 2 数据结构课程设计报告(2012) 表达式求值 1 概述 1.1 课程设计目的 1(要求学生达到熟练掌握C语言的基本知识和技能。 2(了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。 3(提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 4(培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提 高程序设计水平。

算术表达式求值课程设计报告

课程设计 教学院 课程名称 题目 专业 班级 姓名 同组人员 指导教师 2013 年 6 月22 日 (完成时间)

目录 一.概述 (2) 二.总体方案设计 (4) 三.详细设计 (6) 四.程序的调试与运行结果说明 (14) 五.课程设计总结 (14) 六.附录 (16) 参考文献 (3233) (“目录”要求必须自动生成)

一概述(宋体,三号,加粗,居中) 1.课程设计的目的(小标题,宋体,四号,加粗,左对齐顶格) (1).理解和掌握该课程中的有关基本概念,程序设计思想和方法。 (2).培养综合运用所学知识独立完成课题的能力。 (3).培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 (4).掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 2.课程设计的要求 算术表达式求值程序实现以下功能: (1)构造一个空栈S,初始条件:栈S已存在 (2)用P返回S的栈顶元素 (3)插入元素ch为新的栈顶元素 (4)删除S的栈顶元素 (5)判断字符是否是运算符,运算符即返回1 (6)判断运算符优先权,返回优先权高的 (7)输入表达式 (8)返回表达式的最终结果。

二总体方案设计 a)需求分析 该程序能实现算术四则运算表达式的求值,显示运算过程。 输入的形式:表达式,例如5*(3+7)#。 包含的运算符只能有'+'、 '-'、'*'、 '/'、 ' (' ') '; 程序所能达到的功能:对表达式求值并输出。 b)总体设计 本程序使用的是编程工具是Visual c++ 6.0,实现了运算器的功能和仿真界面(大体界面如下图所示)。在基本要求的基础上,运算数可以是实数类型,同时增加了乘方运算的功能;可以实现对负数的运算,例如用户输入表达式6* (-0.25),则程序会在负号的前面自动加上一个0。 1)算符包括加(+)、减(-)、乘(*)、除(/)、乘方(^);另一个称作 OPND,用以寄存操作数和运算结果,操作数可以是float型的浮点数。 算法的基本思想是: 2)首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素; 依次读入表达式中的每个字符,若是操作数(浮点数)则进OPND栈, 若是运算符(+、—、*、/、^)则和OPTR栈的栈顶运算符比较优先权 后作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当 前读入的字符均为“#”)。 3)编写一个原型为void strtofloat(char str[ ],int n,int i),把一 个数字串转换为一个实型数,并压入运算数栈中。(整个程序的源代码 见附录,并有具体解释)

数据结构算术表达式求值课程设计

目录 1.前言 (2) 2.问题描述 (3) 3.总体设计·····················································································错误!未定义书签。 3.1 概要设计 ······························································································错误!未定义书签。 3.1.1 数据结构的选择 (3) 3.1.2 相关功能函数 (3) 3.1.3 函数模块调用关系 (4) 3.2详细设计和编码 (5) 4.运行与测试 (9) 4.1 上机调试 (9) 4.2 算法时间和空间性能分析 (10) 4.3程序运行测试结果 (11) 5. 总结与心得 (13) 5.1设计中难点的总结以及其它解决方案 (13) 5.2 实验心得 (14) 6. 用户使用说明 (16) 7. 参考文献 (16) 8. 附录1(源代码清单) (16) 9. 附录2(成绩评定表) (25) 1

1.前言 课程设计是实践性教学中的一个重要环节,它以某一课程为基础,它可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。 在数据结构的学习和课程设计过程中,我发现它要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,都必须加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。对于我们专业来说,虽然说对技术要求不是特别高,但是在实际操作过程中,没有足够的专业知识对于编程来说是远远不可以达到要求的,所以对于这次的课程设计,我们必须要通过自己额外补充知识来完成它。 在这次的课程设计中我选择的题目是表达式的求值演示。它的基本要求是:以字符序列的形式从终端输入语法正确的,不含变量的表达式。利用算符优先关系,实现对算术四则混合运算表达式的求值,并演示在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。对于表示出栈在每执行一个过程中都要输出它的变化,这点我认为在编程中是比较困难的,以我自身的能力,是不可能在规定的时间内完成任务的,所以我参考了很多有价值的书籍来帮助我完成我的程序设计。 2

最新《数据结构》算术表达式求值

二课程设计2——算术表达式求值 一、需求分析 二、程序的主要功能 三、程序运行平台 四、数据结构 五、算法及时间复杂度 六、测试用例 七、程序源代码 三感想体会与总结 算术表达式求值 一、需求分析 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 二、程序的主要功能 (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 三、程序运行平台 Visual C++ 6.0版本 四、数据结构 本程序的数据结构为栈。 (1)运算符栈部分: struct SqStack //定义栈 { char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈的长度 };

int InitStack (SqStack &s) //建立一个空栈S { if (!(s.base = (char *)malloc(50 * sizeof(char)))) exit(0); s.top=s.base; s.stacksize=50; return OK; } char GetTop(SqStack s,char &e) //运算符取栈顶元素 { if (s.top==s.base) //栈为空的时候返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK return OK; } int Push(SqStack &s,char e) //运算符入栈 { if (s.top-s.base >= s.stacksize) { printf("运算符栈满!\n"); s.base=(char*)realloc (s.base,(s.stacksize+5)*sizeof(char) ); //栈满的时候,追加5个存储空间 if(!s.base) exit (OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=5; } *(s.top)++=e; //把e入栈 return OK; } int Pop(SqStack &s,char &e) //运算符出栈 { if (s.top==s.base) //栈为空栈的时候,返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else {

算术表达式求值课设报告

数据结构课程设计 设计说明书表达式求值算法的实现((()()(( 学生姓名 学号 班级 成绩 指导教师 数学与计算机科学学院 2012年 9月 7日

数据结构课程设计评阅书

课程设计任务书 2011—2012学年第2学期 专业学号:姓名: 课程设计名称:数据结构课程设计 设计题目:表达式求值算法的实现 完成期限:自 2012 年 8 月 28 日至 2012 年 9 月 7 日共 2 周 栈的存储和相关运算是数据结构中数组部分的重点知识和技能。表达式求值算法可借助栈来完成,它的存储可以使用顺序结构也可以使用链式结构,这要根据具体的应用来决定。本课程设计按以下的要求运用C/ C++结构体、指针、数据结构等基知识编程实现。 任务要求:1)阐述设计思想,画出流程图;2)任意输入一个表达式(算术、逻辑、关系表达式);3)建立栈;4)借助栈的相关运算完成表达式求值过程;5)将表达式及其运算结果按照其数学形式打印输出; 6)说明测试方法,写出完整的运行结果,较好的界面设计;7)按照格式要求完成课程设计说明书。设计要求: 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。 2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架; 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚; 5)程序调试与测试:能够熟练掌握调试工具的各种功能,设计测试数据确保程序正确。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析; 7)编写课程设计报告; 指导教师(签字):教研室主任(签字): 批准日期:年月日

数据结构教学规划表达式求值【完全版】

XXXXXX大学《数据结构》课程设计报告 班级: 学号: 姓名: 指导老师:

目录 一算术表达式求值 一、需求分析 二、程序的主要功能 三、程序运行平台 四、数据结构 五、算法及时间复杂度 六、测试用例 七、程序源代码 二感想体会与总结

算术表达式求值 一、需求分析 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 二、程序的主要功能 (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 三、程序运行平台 Visual C++ 6.0版本 四、数据结构 本程序的数据结构为栈。 (1)运算符栈部分: struct SqStack //定义栈

{ char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈的长度 }; int InitStack (SqStack &s) //建立一个空栈S { if (!(s.base = (char *)malloc(50 * sizeof(char)))) exit(0); s.top=s.base; s.stacksize=50; return OK; } char GetTop(SqStack s,char &e) //运算符取栈顶元素 { if (s.top==s.base) //栈为空的时候返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK return OK; } int Push(SqStack &s,char e) //运算符入栈 { if (s.top-s.base >= s.stacksize) { printf("运算符栈满!\n");

算术表达式求值系统

数据结构课程设计报告 课设题目:算式表达式求值系统 班级: 软件1202 姓名: 学号: 指导教师: 李斌 成绩: 2013 年1月

目录 一、需求分析 (2) 二、概要设计 (2) (一)设计思想 (2) (二)实现方法 (2) (三)模块整体设计图 (3) (四)函数功能介绍 (3) 三、详细设计 (4) (一)数据结构设计 (4) (二)模块接口设计 (4) (三)盒图 (5) 四、调试分析 (7) 五、用户手册 (7) 六、测试结果 (8) 七、附录 (9) 附录一设计体会 (9) 附录二源程序 (9)

一、需求分析 算式表达式求值是程序设计语言编译中一个最基本的问题。本次任务要求完成一个四则算式表达式求值系统。具体需求为:当用户输入一个四则算式(包括加、减、乘、除和括号),如(12+3)*2+9*4,输出其计算结果。具体要求如下:(一)要实现栈的基本操作算法,包括初始化栈、进栈、出栈等。 (二) 在本程序中,表达式中的元素限定为char型,表达式长度不超过100,表达式以“#”号为结束标志。 (三)要求程序输出表达式的计算结果。 二、概要设计 (一)设计思想 本次四则算式表达式求值的程序采用的是中缀表达式的求值的方法。所谓中缀表达式,就是指每个二目运算符在两个运算量的中间,假设所讨论的算术运算符包括:+ 、- 、*、/、%、^(乘方)和括号()。而本次程序的编写只涉及四则运算(+、-、*、/)和括号()。 设运算规则为: .运算符的优先级为:()> *、/> +、- ; .有括号出现时先算括号内的,后算括号外的,多层括号,由内向外进行; 表达式作为一个满足表达式语法规则的串存储,如表达式“3*2^(4+2*2-1*3)-5”,它的的求值过程为:自左向右扫描表达式,当扫描到3*2时不能马上计算,因为后面可能还有更高的运算,正确的处理过程是:需要两个栈:对象栈s1和算符栈s2。当自左至右扫描表达式的每一个字符时,若当前字符是运算对象,入对象栈,是运算符时,若这个运算符比栈顶运算符高则入栈,继续向后处理,若这个运算符比栈顶运算符低则从对象栈出栈两个运算量,从算符栈出栈一个运算符进行运算,并将其运算结果入对象栈,继续处理当前字符,直到遇到结束符“#”。 根据运算规则,左括号“(”在栈外时它的级别最高,而进栈后它的级别则最低了; 乘方运算的结合性是自右向左,所以,它的栈外级别高于栈内; 就是说有的运算符栈内栈外的级别是不同的。当遇到右括号“)”时,一直需要对运算符栈出栈,并且做相应的运算,直到遇到栈顶为左括号“(”时,将其出栈,因此右括号“)”级别最低但它是不入栈的。对象栈初始化为空。根据以上分析,每个运算符栈内、栈外的级别如下: 算符栈内级别栈外级别 ^ 3 4 *、/、% 2 2 +、- 1 1 ( 0 4 ) -1 -1 (二)实现方法

《大数据结构》算术表达式求值

实用标准文档 二课程设计2——算术表达式求值 一、需求分析 二、程序的主要功能 三、程序运行平台 四、数据结构 五、算法及时间复杂度 六、测试用例 七、程序源代码 三感想体会与总结 算术表达式求值 一、需求分析 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 二、程序的主要功能 (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 三、程序运行平台

Visual C++ 6.0版本 四、数据结构 本程序的数据结构为栈。 (1)运算符栈部分: struct SqStack //定义栈 { char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈的长度 }; int InitStack (SqStack &s) //建立一个空栈S { if (!(s.base = (char *)malloc(50 * sizeof(char)))) exit(0); s.top=s.base; s.stacksize=50; return OK; } char GetTop(SqStack s,char &e) //运算符取栈顶元素 { if (s.top==s.base) //栈为空的时候返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK return OK; }

c语言实现一.二叉树操作 二.用栈实现算术表达式求值 课设报告

目录 题目一.二叉树操作(1)二.算术表达式求 (1) 一、课程设计的目的 (1) 二、课程设计的内容和要求 (1) 三、题目一设计过程 (2) 四、题目二设计过程 (6) 五、设计总结 (17) 六、参考文献 (18)

题目一.二叉树操作(1)二.算术表达式求 一、课程设计的目的 本学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。 (1)题目一的目的: 1、掌握二叉树的概念和性质 2、掌握二叉树的存储结构 3、掌握二叉树的基本操作 (2)题目二的目的: 1、掌握栈的顺序存储结构和链式存储结构 2、掌握栈的先进后出的特点 3、掌握栈的基本运算 二、课程设计的内容和要求 (1)题目一的内容和要求: 1、编写已知二叉树的先序、中序序列,恢复此二叉树的程序 2、编写求二叉树深度的程序 (2)题目二的内容和要求: 1、算术表达式由操作数、运算符和界限符组成。操作数是正整数,运算符为 加减乘除,界限符有左右括号和表达式起始 2、将一个表达式的中缀形式转化为相应的后缀形式 3、依据后缀表达式计算表达式的值

三、题目一设计过程 1、题目分析 现已知一棵二叉树的先序遍历序列和中序遍历序列,依次从先序遍历序列中取结点,由先序序列确定根结点(就是第一个字母),每次取出一个结点就与中序遍历的序列进行比较,当相等的时候,中序遍历序列就被分成以该结点为根的二叉树子树,该结点左部分为左子树,右部分为右子树,直到取完先序列里的所有结点,则二叉树构造完毕(树用链式存储结构存储),用递归实现! 由建好的二叉树,先判断这棵树是否为空,若不为空则找数的左子树,统计它的高度,然后找树的右子树,统计它的高度,比较左子树和右子树的高度,然后返回其中大的那个值加一,则求出数的高度。这里用递归实现! 2、算法描述 main ( )(主函数) 先构造一颗二叉树,初始化为空,用来存储所构造的二叉树,并输入一棵树的先序序列和中序序列,并统计这个序列的长度。然后调用实现功能的函数。 void CreateBiTree(BiTree *T,char *pre,char *in,int len)(由先序序列和中序序列构造二叉树) 根据前序遍历的特点, 知前序序列(pre)的首个元素(pre[0])为根(root), 然后在中序序列(in)中查找此根(pre[0]), 根据中序遍历特点, 知在查找到的根(root) 前边的序列为左子树, 后边的序列为右子树。设根前边有n个元素,则又有, 在前序序列中,紧跟着根(root)的n个元素序列(即pre[1...n]) 为左子树, 在后边的为右子树,而构造左子树问题其实跟构造整个二叉树问题一样,只是此时前序序列为pre[1...n]), 中序序列为in[0...n-1], 分别为原序列的子串, 构造右子树同样。这里用递归实现! int Depth(BiTree T)(求树的深度) 当所给的参数T是NULL时,返回0。说明这个树只有一个叶子节点深度为0,当所给的参数不是NULL时,函数调用自己看看这个参数的左分支是不是NULL,

表达式求值程序设计说明书

汇编语言实训课程设计任务书 题目:表达式求值程序班级:计算机科学与技术一班 学生姓名:赵旭尧学号: 14730141 题目类型:软件工程(R)指导教师:刘树群 一.题目简介 该设计要求学生使用汇编语言,设计并开发出针对四则运算表达式进行求 值的命令行或窗口程序。 通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇 编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进 行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。 得到软件工程的综合训练,提高解决实际问题的能力。 二.设计任务 1、查阅文献资料,一般在5篇以上; 2、通过键盘输入表达式,进行针对整数的“加减乘除”四则运算表达式 进行求值,有良好的界面; 3、完成软件结构设计和算法设计; 4、完成系统的软件开发和测试工作; 5、撰写设计说明书; 6、做好答辩工作。 三.主要内容、功能及技术指标 1、实现功能及指标:①使用Win32的窗口程序模式,实现表达式求值程序 及测试界面程序的设计与开发;②支持整数的四则运算、位运算和小括号等; ③使用文本框对表达式进行交互式编辑和输出。 2、问题分析及解决方案框架确定:充分地分析和理解问题本身,弄清要求 做什么。在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结 构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及 过程(或函数)之间的调用关系,并画出函数之间的调用关系图。 3、详细设计和编码:定义相应的存储结构,确定各个函数的算法,并画出 流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过200 行,否则要进一步划分。

数据结构课程设计-表达式求值问题

实验表达式求值问题 1.问题描述 表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3.中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀表达式(如:11 22 7 4 - * 3 / +)和前缀表达式(+ 11 / * 22 - 7 4 3)。后缀表达式 和前缀表达式中没有括号,给计算带来方便。如后缀表达式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。 2.数据结构设计 (1)顺序栈类定义:首先应在类中定义成员函数,以此来完成顺序栈的相关操作,如下: class SqStack { private: T *base; //栈底指针 int top; //栈顶 int stacksize; //栈容量public: SqStack(int m); //构建函数 ~SqStack(){delete [] base;top=0;stacksize=0;} //析构函数 void Push(T x); //入栈 T Pop(); //出栈 T GetTop(); //获取栈顶元素 int StackEmpty(); //测栈空 void ClearStack(); //清空栈 void StackTop(); //返回栈顶指针 void StackTranverse(); //显示栈中元素 }; (2)顺序栈类实现:对顺序栈进行初始化,初始化的首要操作就是创建一个空顺序栈。 Step1:申请一组连续的内存空间为顺序栈使用: base=new T[m]; i f(base==NULL) {

算术表达式求值(c++)数据结构实验

数据结构实验报告 实验名称:实验2 栈和队列及其应用 实验目的:通过上机实验,加深理解栈和队列的特性;能根据实际问题的需要灵活运用栈和队列; 掌握栈和队列的应用。 实验内容:(2选1)内容1:算术表达式求值问题;内容2:航空客运订票系统。 实验要求:1)在C++系统中编程实现;2)至少实现两种以上操作算法;3)写出算法设计的基本原理或画出流程图;4)算法实现代码简洁明了;关键语句要有注释;5)给出调试和测试 结果;6)完成实验报告。 实验步骤: (1)算法设计 为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后 作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均 为”#”)。 (2)算法实现 typedef struct{ int stacksize; char *base; char *top; } Stack; typedef struct{ int stacksize; int *base; int *top; } Stack2; int InitStack(Stack *s) //构造运算符栈 { s->base=(char *)malloc(STACK_INIT_SIZE*sizeof(char)); if(!s->base) return ERROR; s->top=s->base; s->stacksize=STACK_INIT_SIZE; return OK; } int InitStack2(Stack2 *s) //构造操作数栈 { s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s->base) return ERROR; s->stacksize=STACK_INIT_SIZE; s->top=s->base; return OK; } int In(char ch) //判断字符是否是运算符,运算符即返回1 { return(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='#'); } int Push(Stack *s,char ch) //运算符栈插入ch为新的栈顶元素{ *s->top=ch; s->top++; return 0; } int Push2(Stack2 *s,int ch)//操作数栈插入ch为新的栈顶元素 { *s->top=ch; s->top++; return 0; } char Pop(Stack *s) //删除运算符栈s的栈顶元素,用p返回其值{ char p;s->top--; p=*s->top; return p;} int Pop2(Stack2 *s) //删除操作数栈s的栈顶元素,用p返回其值{ int p;s->top--; p=*s->top; return p;} char GetTop(Stack s) //用p返回运算符栈s的栈顶元素

数据结构课程设计算术表达式求值-计算器(Word)

高级语言程序设计 《算术表达式求值》 课程设计报告

算术表达式求值 系统可以实现实现对算术四则混合运算表达式求值,并打印求值过程中运算符栈、操作数栈的变化过程。 第二章系统分析 开始运行时界面如下: 你可以输入一个表达式,按E对其进行求值。

#include #include #include #include #define N 100 double numStack[N]={0};//操作数栈 int numTop; char opStack[N];//运算符栈 int opTop; void print_num(double str1[],int n) { int i; printf("\n操作数栈:\n"); for(i=0;i

if(ch=='*'||ch=='/') return 3; if(ch=='(') return -1; return 0; } double result(double num1,char op,double num2)//计算 { if(op=='+') return num1+num2; if(op=='-') return num1-num2; if(op=='*') return num1*num2; if(op=='/') return num1/num2; return 0; } int compute(char str[]) { double num=0; int i=0,j=1,k=1; numTop=opTop=0; while(str[i]!='\0'||opTop>0) { if(str[i]>='0'&&str[i]<='9') num=num*10+str[i]-'0'; else if( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) ) k=-1; else { if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')') {

算术表达式求值-数据结构实验报告

清华大学数据结构课程实验报告(20 -20 学年第学期) 报告题目:算术表达式求值 任课老师: 专业: 学号: 姓名: 二0一年月日

摘要:现代科学技术高速发展,各种高科技产品频频问世,而各种技术的基础都离不开基本的表达式求值,它虽然简单,但却是任何复杂系统的基本执行操作。栈是一种重要的线性结构,从数据结构的角度看,它是一种特殊的线性表,具有先入先出的特点。而算符优先法的设计恰巧符合先入先出的思想。故我们基于栈这种数据结构,利用算符优先法,来实现简单算术表达式的求值。 关键字:算符优先法;算术表达式;数据结构;栈 一、课题概述 1、问题描述 一个算术表达式是由运算数、运算符、界限符组成。假设操作数是正整数,运算符只含有加“+”、减“-”、乘“*”、除“/”四种二元运算符,界限符有左括号“(”、右括号“)”和表达式起始、结束符“#”。利用算符优先法对算术表达式求值。 2、设计目的 (1)通过该算法的设计思想,熟悉栈的特点和应用方法; (2)通过对算符优先法对算术表达式求值的算法执行过程的演示,理解在执行相应栈的操作时的变化过程。 (3)通过程序设计,进一步熟悉栈的基本运算函数; (4)通过自己动手实现算法,加强从伪码算法到C语言程序的实现能力。3、基本要求: (1)使用栈的顺序存储表示方式; (2)使用算符优先法; (3)用C语言实现; (4)从键盘输入一个符合要求的算术表达式,输出正确的结果。 4、编程实现平台 Microsoft Visual C++ 6.0 二、设计思路及采取方案 1、设计思路: 为了实现算符优先法,可以使用两个工作栈。一个称做OPTR,用以寄存运

相关主题
文本预览
相关文档 最新文档