⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evaluatem.txt

📁 一本数据结构的经典书籍-数据结构算法程序集里
💻 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 + -