📄 countexpression.h
字号:
#ifndef COUNTEXPRESSION_H_
#define COUTNEXPRESSION_H_
/*
*************************************计算后缀式************************************************
**/
#include<iostream>
using namespace std;
#include "stack.h"
/*
*运用后缀表达式进行计算的具体做法:
*建立一个栈Numbers
*从左到右读后缀表达式,读到数字就将它压入栈Numbers 中,读到运算符则从栈中依次弹出两个数分别到X和y,然后以'y 运算符 x'的形式计算机出结果,再压加栈S中
*如果后缀表达式未读完,就重复上面过程,最后输出栈顶的数值则为结束
*
*例如,对于下列各中缀表达式:
*(2)18-9*(4+3)=
*对应的后缀表达式为:
*(2)18 9 4 3 + * - =
*计算步骤先将18 9 4 3压到Numbers
*读到运算符‘+’,提出x=3,y=4,运算y+x=7,7压到Numbers
*读到运算符‘*’,提出x=7,y=9,运算y*x=63,63压到Numbers
*读到运算符‘-’,提出x=63,y=18,运算y-x=-43,-43压到Numbers
*读到运算符‘=’,直接提出Numbers中的-43就为后缀式的运算结果
*返回-43,运算结束
*/
/* 函数名:Account_Suffixal
* 作用 :计算后缀表达式的结果
* 返回类型: 浮点型
*/
float Operate(float,char ,float) ;
//对后缀表达式进行计算
float Account_Suffixal(stackList<float> & expression)
{
float x,y;
float return_value=0;//中间返回值
float result=0;//最后结果
char op;
stackList<float>Numbers;//栈存放临时运算数
while((expression.getLength() > 0))
{
//计算式中的加法运算
if((expression.getType() == 1)&&(expression.getTop() == '+'))
{
//
x=Numbers.getTop(); Numbers.pop();
y=Numbers.getTop(); Numbers.pop();
op='+';
//加法返回计算值
return_value=Operate(y,op,x);
//将返回值压到Numbers栈中
Numbers.push(return_value);
Numbers.setType(0) ;
expression.pop();
continue;
}
//计算式中的减法运算
if((expression.getType() == 1)&&(expression.getTop() == '-'))
{
x=Numbers.getTop(); Numbers.pop();
y=Numbers.getTop(); Numbers.pop();
op='-';
//减法返回计算值
return_value=Operate(y,op,x);
//将返回值压到Numbers栈中
Numbers.push(return_value);
Numbers.setType(0) ;
expression.pop();
continue;
}
//计算式中的乘法运算
if((expression.getType() == 1)&&(expression.getTop() == '*'))
{
x=Numbers.getTop(); Numbers.pop();
y=Numbers.getTop(); Numbers.pop();
op='*';
//乘法返回计算值
return_value=Operate(y,op,x);
//将返回值压到Numbers栈中
Numbers.push(return_value);
Numbers.setType(0) ;
expression.pop();
continue;
}
//计算式中的除法运算
if((expression.getType() == 1)&&(expression.getTop() == '/'))
{
x=Numbers.getTop(); Numbers.pop();
y=Numbers.getTop(); Numbers.pop();
op='/';
if(x == 0)
{
cout<<"被除数不能为0 返回错误值 -1"<<endl;
return -1 ;
}
//除法返回计算值
return_value=Operate(y,op,x);
//将返回值压到Numbers栈中
Numbers.push(return_value);
Numbers.setType(0) ;
expression.pop();
continue;
}
//若原后缀式只有等号,此时Numbers中只有一个数字,就是后缀式所要求的结果,直接从栈取出结果
if((expression.getType() == 1)&&(expression.getTop() == '='))
{
result=Numbers.getTop();
Numbers.pop();
expression.pop();
}
//将数字保存进栈Numbers
else
{
float number;
number = expression.getTop();
Numbers.push(number);
Numbers.setType(0);
expression.pop();
}
}//-while- end
return result;
}
//中间值计算函数
float Operate(float a,char b,float c)
{
float mul;
switch(b)
{
case '+':mul=a+c;break;
case '-':mul=a-c;break;
case '*':mul=a*c;break;
case '/':mul=a/c;break;
}
return mul;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -