📄 evaluatem.txt
字号:
//计算后缀表达式值的文件Evaluate.cpp
const int SM=40;
#include"linearStack2.cpp"
float Evaluate(char* str)
//计算由str字符串所表示的后缀表达式的值,
//表达式要以'@'字符结束.
{LinStack S;//创建对象S
S.InitStack(SM);//初始化栈
istrstream ins(str);//把str定义为输入字符串流对象ins
char ch; //用于输入字符
float x; //用于输入浮点数
ins>>ch; //从ins流对象(即str字符串)中顺序读入一个字符
while(ch!='@')
{//扫描每一个字符并进行相应处理
switch(ch)
{case '+':x=S.Pop()+S.Pop();break;
case '-':x=S.Pop(); // Pop(S)弹出减数
x=S.Pop()-x; //Pop(S)弹出的是被减数
break;
case '*':x=S.Pop()*S.Pop();break;
case '/':x=S.Pop(); // Pop(S)弹出除数
if(x!=0.0)
x=S.Pop()/x;//Pop(S)弹出的是被除数
else { //除数为0时终止运行
cerr<<"除数为0!"<<endl;exit(1);}
break;
default://读入的必为一个浮点数的最高位数字
ins.putback(ch); //把它重新回送到输入流中
ins>>x;} //从字符串输入流中读入一个浮点数
//把读入的一个浮点数或进行相应运算的结果压入到S栈中
S.Push(x);
ins>>ch; //输入下一个字符,以便进行下一轮循环处理
}
if(!S.StackEmpty())
{//若栈中仅有一个元素,则它是后缀表达式的值,否则为出错
x=S.Pop();
if(S.StackEmpty()) return x;
else {cerr<<"表达式出错!"<<endl;exit(1);}
}
else {//若最后栈为空,则终止运行
cerr<<"栈为空!"<<endl;exit(1);}
return x;}
//计算后缀表达式的值Evaluatem.cpp
#include<iostream.h>
#include<stdlib.h>
#include<strstrea.h>
#include<iomanip.h>
#include<stdio.h>
typedef float ElemType;
#include "Evaluate.cpp"
void main()
{char p[40];
float y;
cout<<"Evaluatem.cpp运行结果:\n";
cout<<"输入后缀表达式:";
gets(p);
y=Evaluate(p);
cout<<"后缀表达式的值:";
cout<<y<<endl;cin.get();}
两次运行程序:
Evaluatem.cpp运行结果:
输入后缀表达式:3.5 5.6 2.6 - * 7.5 + @
后缀表达式的值:18
Evaluatem.cpp运行结果:
输入后缀表达式:9.9 5.5 2.2 - / 7 + @
后缀表达式的值:10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -