实验3四则运算表达式求值

合集下载

四则混合运算及简便计算

四则混合运算及简便计算

四则混合运算及简便计算四则混合运算的顺序和简便计算我们如何进行整数、小数、分数的四则混合运算呢?以下是运算定律:1、加法交换律:两个数相加,交换加数的位置,它们的和不变,即a+b=b+a。

2、加法结合律:三个数相加,先把前两个数相加,再加上第三个数;或者先把后两个数相加,再和第一个数相加它们的和不变,即(a+b)+c=a+(b+c)。

例如:75+124+225=124+75+225=4243、乘法交换律:两个数相乘,交换因数的位置它们的积不变,即a×b=b×a。

4、乘法结合律:三个数相乘,先把前两个数相乘,再乘以第三个数;或者先把后两个数相乘,再和第一个数相乘,它们的积不变,即(a×b)×c=a×(b×c)。

例如:25×37×466=37×25×466=5、乘法分配律:两个数的和(差)与一个数相乘,可以把两个加(减)数分别与这个数相乘再把两个积相加(减),即(a+b)×c=a×c+b×c【(a-b)×c=a×c-b×c】。

例如:(40+4)×25=40×25+4×25=10006、减法的性质:一个数里连续减去两(几)个数,等于这个数连续减去这两(几)个数的和,即a-b-c=a-(b+c)。

【a-b-c-……-n=a-(b+c+……+n)】例如:875-324-376=875-(324+376)=1757、除法性质基本性质:一个数连续除以几个数,可以除以后几个数的积,也可以先除以第一个除数,再除以第二个除数。

a÷b÷c=a÷(b×c)=a÷c÷b。

例如:2500÷4÷256=2500÷(4×256)=2.xxxxxxxx综合练:2×6.6+2.5×611-6-14.6+3+6+5.43×(-÷) = 2583.xxxxxxxx4以上为四则混合运算的顺序和简便计算。

数据结构实验四:四则运算表达式

数据结构实验四:四则运算表达式

HUNAN UNIVERSITY 课程实验报告题目:四则运算学生姓名学生学号专业班级指导老师李晓鸿完成日期 2 0 1 5年12 月10日一、需求分析1.程序的功能本程序要求首先输入一组数据进行四则运算,输入的数据是按照中缀表达式的结构输入的,完成初始化后,把中缀表达式用后缀表达式(逆波兰表达式)输出,同时输出计算结果。

2.输入的形式输入一个平时所用的正常的四则运算表达式(不需要特别注意输入式子是否正确),输入的数字的范围是(0至2^16)的小数或者整数,输入的符号限于(+-*/^)3.输出的形式程序的输出就是转化后的后缀表达式以及计算的结果,输出结果间用空格隔开;4.测试数据①正常的输入输入21+23*(12-6)输出后续表达式为21 23 12 6 - * +计算结果为159②输入有两个符号的错误情况输入6*3++4*(14-8)输出非括号运算符不能直接接非括号运算符ERROR③输入有小数的情况输入2.0*(11.2-5.3)+2.5后续表达式为2.0 11.2 5.3 - * 2.5 +计算结果为14.3④有整数小数的情况输入2/(3.0+5)*3输出后续表达式为2 3.0 5 + / 3 * 计算结果为0.75⑤错误的输入输入2a+3输出a为非法字符error二、概要设计1.抽象数据类型本题目中,首先需要按顺序读取数字和操作符,将它们分别保存到两个数据结构中,如果最先保存的操作符优先级不大于接下来保存的操作符,将一直不被调用直到上一级操作符被调用,满足先进后出的数据结构,所以用栈来保存操作符。

对于保存的数字,每次调用操作符时,同时将最后保存的两位数字调用,满足先进后出的数据结构,所以用栈来保存数字。

由于需要用后缀表达式输出,按照进栈出栈的顺序,我们将符号作为节点,数字作为左右子树,依次相连成为一颗二叉树,通过后续遍历将二叉树输出。

2.算法的基本思想①.本题目在之后的操作中需要将数字和操作符进入不同的栈,所以我们在程序设计之前需要先设计函数判断读取的字符是数字还是操作符。

实验报告长整数四则运算

实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。

2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。

二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。

四则运算的实现

四则运算的实现

四则运算的实现在数学运算中,四则运算是最基本也是最常见的运算之一。

它包括加法、减法、乘法和除法四种运算方式。

在计算机科学领域,实现四则运算是编程语言中一个非常基础和核心的功能。

本文将介绍四则运算的实现原理及其在计算机编程中的应用。

一、加法运算的实现加法运算是最简单的运算之一,通常用符号“+”表示。

在编程中,实现两个数的加法运算可以通过以下步骤:1. 输入两个待加数。

2. 将两个数相加得到和。

3. 输出和作为运算结果。

以下是一个示例代码,演示了如何实现加法运算:```pythona = int(input("请输入第一个数:"))b = int(input("请输入第二个数:"))sum = a + bprint("两数之和为:", sum)```二、减法运算的实现减法运算是在两个数之间进行相减的操作,通常用符号“-”表示。

在编程中,实现两个数的减法运算可以通过以下步骤:1. 输入被减数和减数。

2. 将被减数减去减数得到差。

3. 输出差作为运算结果。

以下是一个示例代码,演示了如何实现减法运算:```pythona = int(input("请输入被减数:"))b = int(input("请输入减数:"))difference = a - bprint("两数之差为:", difference)```三、乘法运算的实现乘法运算是将两个数相乘的操作,通常用符号“×”表示。

在编程中,实现两个数的乘法运算可以通过以下步骤:1. 输入两个待乘数。

2. 将两个数相乘得到积。

3. 输出积作为运算结果。

以下是一个示例代码,演示了如何实现乘法运算:```pythona = int(input("请输入第一个数:"))b = int(input("请输入第二个数:"))product = a * bprint("两数之积为:", product)```四、除法运算的实现除法运算是将被除数除以除数的操作,通常用符号“÷”表示。

算术表达式求值演示

算术表达式求值演示

实习报告题目:算术表达式求值演示。

一、需求剖析1.以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。

2.利用教科书表给出的算符优先关系,实现对算数四则混淆运算表达式的求值。

3.模仿教科书的例子在求值中运用符栈、运算数栈、输入字符和主要操作的变化过程。

4.程序履行的命令包含:(1)结构空栈;(2)判断符号优先级 ;(3)判断能否为七种运算符之一 ;(4)运算求解算术表达式。

5.测试数据(1)3*(7-2);(2)8;(3)1+2+3+4;(4)88-1*5;(5)1024*4/8;(6)(20+2)*(6/2);(7)3-3-3;(8)8/(9-9);(9)2*(6+2*(3+6*(6+6)));(10)(((6+6)*6+3)*2+6)*2;二、纲要设计1.定的抽象数据型定:ADT Stack{数据象: D={a i |a i∈CharSet,i=1,2,⋯,n,n≥0}数据关系: R1={< a i -1 ,a i >| a i -1, a i∈D,i=2, ⋯, n}基本操作:InitStack (&S)操作果:结构一个空S。

GetTop (S ,&e)初始条件: S 已存在。

操作果:若S 不空,以 e 返回元素。

Push(&S, e)初始条件: S 已存在。

操作果:在S 的插入新的元素e。

Pop(&S, &e)初始条件: S 已存在。

操作果:除S 的元素,用 e 返回其。

} ADT Stack2.定运算表达式的抽象数据型:ADT EvaluateExpression{数据象: D={a i | a i数字及运算符, i=1,2, ⋯, n,n ≥0}数据关系: R1={ }基本操作:Precede(a1 , a2)初始条件:字符a1,a2 存在。

操作果:判断运算符的先In( d )初始条件:字符 d 存在。

操作果:判断 c 能否七种运算符之一Operate(a, theta, b )初始条件:字符a, theta, b存在。

四则混合运算

四则混合运算

四则混合运算1. 介绍四则混合运算是指包含加法、减法、乘法和除法的数学运算。

在四则混合运算中,我们需要根据一定的规则按照一定的顺序进行运算,以求得正确的结果。

四则混合运算常见于数学课程中,也是我们日常生活中常用的运算方式。

2. 加法加法是四则混合运算中最简单的一种运算方式。

在加法中,我们将两个数相加得到它们的和。

例如,2 + 3 = 5。

3. 减法减法是四则混合运算中另一种常见的运算方式。

在减法中,我们将一个数减去另一个数得到它们的差。

例如,5 - 2 = 3。

4. 乘法乘法是四则混合运算中比较复杂的一种运算方式。

在乘法中,我们将两个数相乘得到它们的积。

例如,2 * 3 = 6。

5. 除法除法是四则混合运算中比较特殊的一种运算方式。

在除法中,我们将一个数除以另一个数得到它们的商。

例如,6 / 2 = 3。

需要注意的是,除法中不可以被除数为0。

6. 运算顺序在进行四则混合运算时,我们需要按照一定的顺序进行运算,以得到正确的结果。

一般情况下,我们遵循以下运算顺序:1.首先进行括号中的运算;2.其次进行乘法和除法的运算;3.最后进行加法和减法的运算。

这样的运算顺序可以保证运算的准确性,避免了运算顺序带来的结果错误。

7. 示例下面我们通过一些例子来说明四则混合运算的应用。

例子1计算表达式2 + 3 * 4 - (5 + 2)的结果。

首先按照运算顺序计算括号中的运算(5 + 2) = 7,然后计算乘法和除法的运算3 * 4 = 12。

接下来,将得到的结果代入原始表达式中,继续进行运算2 + 12 - 7 = 7。

所以,表达式2 + 3 * 4 - (5 + 2)的结果为7。

例子2计算表达式(8 + 4) / (2 * 3)的结果。

首先按照运算顺序计算括号中的运算(8 + 4) = 12和(2 * 3) = 6。

接下来,将得到的结果代入原始表达式中,继续进行运算12 / 6 = 2。

所以,表达式(8 + 4) / (2 * 3)的结果为2。

四则运算表达式计算前序遍历

四则运算表达式计算前序遍历前序遍历是二叉树遍历的一种方式,它的遍历顺序是根节点->左子树->右子树。

在四则运算表达式中,我们可以通过前序遍历的方式来计算表达式的结果。

四则运算表达式由操作数和操作符组成,操作数表示参与运算的数字,而操作符表示运算的方式(如加、减、乘、除等)。

在前序遍历中,我们首先遇到的是根节点,在四则运算表达式中根节点即为操作符。

根据前序遍历的顺序,我们可以得到以下算法来计算前序遍历的四则运算表达式:1.初始化一个操作数栈和一个操作符栈。

2.从右向左遍历表达式,逐字符读入。

3.如果当前字符是操作数,将其放入操作数栈中。

4.如果当前字符是操作符,将其放入操作符栈中。

5.如果当前字符是右括号')',则将操作符栈中的操作符弹出,直到遇到左括号'('.弹出后,将弹出的操作符和操作数栈中的两个操作数进行计算,并将结果加入操作数栈中。

6.继续遍历表达式的下一个字符,直到表达式中的所有字符都遍历完毕。

7.最后,操作数栈中剩余的操作数即为表达式的计算结果。

下面以一个具体的表达式为例,来说明如何通过前序遍历计算四则运算表达式:表达式:(+ (* 4 5) (- 6 3))1.初始化操作数栈和操作符栈为空。

2.从右向左遍历表达式,首先遇到的是右括号')',压入操作符栈中。

3.继续遍历,遇到左括号'(',压入操作符栈中。

4.下一个字符是操作符'*',压入操作符栈中。

5.继续遍历,下一个字符是操作数'4',压入操作数栈中。

6.继续遍历,下一个字符是操作数'5',压入操作数栈中。

7.继续遍历,下一个字符是右括号')',弹出操作符栈中的操作符'*'。

8.弹出操作数栈中的两个操作数,即为'4'和'5',进行计算,得到结果'20',将结果'20'压入操作数栈中。

表达式求值


问:为什么要设计队列?它有什么独特用途?
答: 1. 离散事件的模拟(模拟事件发生的先后顺序,例如
CPU芯片中的指令译码队列); 2. 操作系统中的作业调度(一个CPU执行多个作业); 3. 简化程序设计。
11
队的实现方式是本节重点,关键是掌握入队和出队操作。 具体实现依存储结构(链队或顺序队)的不同而不同。 重点是循环 顺序队
链队中任一 结点的结构
结点类型定义: typedef Struct QNode{ QElemType data; //元素 Struct QNode *next; //指向下一结点的指针 }Qnode , * QueuePtr ;
13
链队示意图:
rear Q front p
a1 (队首) 讨论: ① 空链队的特征? front=rear
front
a2
a3 ^
(队尾)
rear
S
D
^
② 链队会满吗?一般不会,因为删除时有free动作。除非内存不足!
^
③ 怎样实现链队的入队和出队操作?
入队(尾部插入):rear->next=S; rear=S; 出队(头部删除):front->next=p->next;
完整操作函数 见教材P62下
14
2.顺序队
3
问:教材P53表3.1中,1和2哪个对应栈顶元素, 哪个对应键盘输入值? 答:根据P53Precede()函数可知, 1对应栈顶元素
附:
由表3.1可看出,右括号 ) 和井号 # 作为2时级别最低;
由c 规则得出: * ,/, + ,-为1时的优先权低于 ‘(’,高于‘)’
由a规则得出:‘(’=‗)’ 表明括号内的运算已完成; ‘ # ‘=‗ # ‘ 表明表达式求值完毕。

实验三 运算符与表达式

实验三运算符与表达式练习实验目的:1、掌握C语言中各种运算符的使用方法。

2、巩固练习C语言中基本数据类型数据的声明和使用。

3、简单掌握基本输入输出函数的使用。

实验步骤:1、启动VC++6.02、文件—新建3、文件—C++ Source File,选择存储路径,输入文件名。

4、在工作窗口编辑程序5、编辑完成之后,选择编译(或者直接按F7),检查程序错误,如有错误,就行修改,编译通过之后,执行程序(或者直接按F5)。

实验内容:1、有两个整型变量a和b,它们的值分别是8和3,计算它们的和,差,积,商,余数。

2、编写程序,初始化变量x的值,分别输出变量y的值,并分析输出结果。

(要求变量x,y是int类型)y=2.4*x-1/2;y=x%2/5-x;y=x/3+x++;y=--x+2*x;y=(x-=x*10,x/=10);3、编写程序,实现求整数10,20和35的平均值。

4、完善下列程序,使之能够正确输出3个整数之和以及3个整数之积。

(至少使用两种方法实现,注意输入函数scanf()的用法,预习第四章格式化输入输出函数的使用)void main ( ){int a,b,c,s,p;printf(“Please enter 3 number:”);scanf(“%d,%d,%d”,&a,&b,&c);printf(“the sum of a b c is %d\n”, );printf(“the product of a b c is %d\n”, );}5、选做题(下面两题任选一题完成)(1)计算并输出表达式)bb-a+的值,其中a和b的值+/()2(2ba从键盘输入。

(2)从键盘输入圆锥体的半径r和高h,计算其底面积和体积。

圆的面积公式:s=r*r*∏圆锥体体积公式:v= r*r*∏*h/3(提示:用函数scanf()接收键盘输入,其用法参照第四题和预习第四章中格式化输入一节内容,求根号的函数为sqrt(),例如求x的根号,使用:y=sqrt(x);此函数的函数体包含在头文件math.h中)。

表达式求值算法

表达式求值算法表达式求值是一种将数学表达式转换为计算结果的算法。

在计算机程序中,表达式是由操作符和操作数组成的,操作符是执行特定计算操作的符号,操作数是参与计算的数值。

在表达式求值算法中,我们需要处理不同类型的表达式,例如算术表达式、逻辑表达式和位运算表达式等。

算术表达式包含加法、减法、乘法、除法等操作符,逻辑表达式包含与、或、非等操作符,位运算表达式包含位与、位或、位取反等操作符。

实现一个通用的表达式求值算法需要将所有这些操作符纳入考虑,并按照特定的规则进行计算。

在表达式求值算法中,首先需要对表达式进行解析,将其拆分为操作符和操作数。

通过使用逆波兰表达式或分析树等数据结构,我们可以更方便地对表达式进行计算。

逆波兰表达式是一种将操作符放在操作数后面的表达式表示方法。

例如,中缀表达式"3 + 4 * 2"可以转换为逆波兰表达式"3 4 2 * +"。

逆波兰表达式的好处是可以通过一个栈来进行计算。

遍历逆波兰表达式的每个元素,当遇到操作数时,将其压入栈中;当遇到操作符时,从栈中弹出相应数量的操作数进行计算,并将结果压入栈中。

最后,栈中剩下的唯一一个元素就是表达式的结果。

另一种求值算法是使用分析树。

分析树是一种用树结构表示表达式的方法,树的每个节点都是一个操作符,而叶子节点是操作数。

通过遍历分析树,从叶子节点开始计算,并将结果返回给父节点,直到整个树的根节点成为最终结果。

这种方法可以递归地处理任意复杂的表达式。

除了使用逆波兰表达式和分析树,我们还可以使用其他方法来实现表达式求值算法。

例如,我们可以使用栈来存储操作数,并在遍历表达式时进行计算。

当遇到操作符时,从栈中弹出相应数量的操作数进行计算,并将结果压入栈中。

在表达式求值算法中,需要注意处理运算符的优先级和结合性。

不同的运算符可能有不同的优先级,例如乘法和除法的优先级高于加法和减法。

结合性指的是同一级别的运算符如何进行计算,例如加法和减法是左结合的,而赋值运算符是右结合的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四则运算表达式求值学生姓名:陈旸浩学生学号:20110807220专业班级:智能科学与技术2班指导老师:骆嘉伟实验5四则运算表达式求值一、需求分析:1.本程序是利用二叉树后序遍历来实现表达式的转换,同时可以使用实验三的结果来求解后缀表达式的值。

2.输入:在字符界面上输入一个中缀表达式,回车表示结束。

3.输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。

4.测试数据输入:21+23*(12-6)输出:21 23 12 6 -*+运算结果为:149二、概要设计抽象数据类型为实现上述程序的功能,应以二叉树类BiTree存储用户的输入,以及计算出的结果。

算法的基本思想根据题目要求,利用栈计算,和二叉树存储,来计算表达式。

该算法的基本思想是:先利用栈进行计算,然后用二叉树进行存储,和实验三算法一样来计算逆波兰表达式的值。

程序的流程程序由三个模块组成:(1)输入模块:输入一个运算式(2)计算模块:利用栈进行表达式的计算,二叉树来存储。

(3 )输出模块:屏幕上显示出后缀表达式和运算结果。

三、详细设计物理数据类型用二叉树表示表达式:若表达式为数或简单变量,则相应二叉树中仅有一个根结点,其数据域存放该表达式信息;若表达式=(第一操作数)(运算符)(第二操作数),则相应的二叉树中以左子树表示第一操作数,右子树表示第二操作数,根结点的数据域存放运算符(若为一元算符,则左子树空)。

操作数本身又为表达式。

算法的具体步骤中序表达式转后序表达式*houxu(char *infix):从左到右遍历中序表达式的每一数字和符号,若是数字就输出,即成为后序表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后序表达式为止。

后序表达式计算结果qiuzhi(char *postfix):从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。

算法的时空分析时间复杂度:O(n);空间复杂度:O(n);输入和输出的格式输入:输入表达式:输出:后序表达式:后续表达式求值:四、测试结果五、附录#include <iostream>using namespace std;#include <stdio.h>#include <stdlib.h>#include <string.h>int PRI(char op) //设定算符的优先级{switch (op){case '+':case '-':return 1;case '*':case '/':return 2;default:return 0;}}char *houxu(char *infix) // 求后序表达式{int length=strlen(infix);char *stack,*buf,*p,flag;char op;int i,top=0;if(!(stack=(char *)malloc(sizeof(char)*length))) //作为栈内存空间{cout<<"内存分配失败!"<<endl;exit(0);}if(!(buf=(char *)malloc(sizeof(char)*length))) //保存后序表达式字符串{cout<<"内存分配失败!"<<endl;exit(0);}p=buf;for(i=0;i<length;i++){op=infix[i]; //获取表达式中一个字符switch(op) //根据字符进行入栈操作{case '(': //为左括号if(top<length) //若栈未满{top++; //修改栈顶指针stack[top]=op; //保存运算符到栈}flag=0;break;case '+':case '-':case '*':case '/':while(PRI(stack[top])>=PRI(op)) //判断栈顶运算符与当前运算符的级别{*p++=stack[top]; //将栈中的运算符保存到字符串top--; //修改栈顶指针flag=0;}if(top<length) //栈未满{top++; //修改栈顶指针stack[top]=op; //保存运算符到栈if(flag==1)*p++=' '; //添加一个逗号分隔数字flag=0;}break;case ')': //右括号while(stack[top]!= '(') //在栈中一直找到左括号{*p++=stack[top]; //将栈顶的运算符保存到字符串top--; //修改栈顶指针}flag=0;top--; //再将修改栈顶指针,将左括号出栈break;default: //其他字符(数字、字母等非运算符)*p++=op;flag=1;break;}}while (top>0) //若栈不为空{*p++=stack[top]; //将栈中的运算符出栈top--; //修改栈顶指针}free(stack);//释放栈占用的内存*p='\0';return (buf); //返回字符串}//表达式求值如下:double calc(double d1, char op, double d2) //计算函数{switch (op) //根据运算符进行操作{case '+':return d1 + d2;case '-':return d1 - d2;case '*':return d1 * d2;case '/':return d1 / d2;}return 0;}double qiuzhi(char *postfix) //计算表达式的值{double *stack,num,k=1.0; //k为系数int i,length,top=0,dec=0,flag;//dec为0表示整数,为1表示小数,flag=1表示有数据需入栈char token;length=strlen(postfix);if(!(stack=(double *)malloc(sizeof(double)*length))){cout<<"内存分配失败!"<<endl;exit(0);}num=0;for(i=0;i<length;i++){token=postfix[i]; //取出一个字符switch(token){case '+': //若是运算符case '-':case '*':case '/':if(top<length && flag==1) //若栈未满{top++; //修改栈顶指针stack[top]=(double)num; //将数字保存到栈中num=0;}stack[top-1]=calc(stack[top-1], token, stack[top]);//取出栈栈前两个元素进行运算,结果保存到栈中top--; //修改栈顶指针dec=0;//先设为整数flag=0;//下一步操作不将数入栈break;default: //不为运算符if(token==' ') //若为空格{if(top<length) //若栈未满{top++; //修改栈顶指针stack[top]=(double)num; //将数字保存到栈中num=0;dec=0;break;}}else if(token=='.'){k=1.0;dec=1;break;}if(dec==1) //小数部分{k=k*0.1;num=num+(token-'0')*k;}else{num=num*10+token-'0';}flag=1;//有数需要入库break;}}return stack[top]; //返回栈顶的结果}int main(){char zhongxu[80];cout<<"输入表达式:";cin>>zhongxu;cout<<"后序表达式:"<<houxu(zhongxu)<<endl;cout<<"后序表达式求值:"<<qiuzhi(houxu(zhongxu))<<endl;getchar();return 0;}。

相关文档
最新文档