回 帖 发 新 帖 刷新版面

主题:整型表达式的计算,希望高手帮我改一下程序 急救啊~!!!

按这个思路 再加两个功能,求次方和绝对值^
下面是程序 呵呵 


#include<iostream.h>
#include<process.h>
#include<string.h>
#define MAX_SIZE  100 
template<class T>class Stack
{
T data[MAX_SIZE];
int top;

public:

Stack(void);
~Stack(void);
bool empty(void);
void push(T a);
T pop(void);
T GetTop(void);
};

template <class T>Stack<T>::Stack(void)//构造函数
{
top=-1;
}

template <class T>Stack<T>::~Stack(void)//析构函数
{
}

template <class T>bool Stack<T>::empty(void)//判断栈空操作
{
return top==-1?true :false;
}
template <class T>void Stack<T>::push(T a)//入栈操作
{
if(top==MAX_SIZE)
{
  cout<<"Stack is full!"<<endl;
  return;
}

data[++top]=a;
}

template <class T>T Stack<T>::pop(void)//出栈操作
{
if(top==-1)
{
  cout<<"Stack is underflow!"<<endl;
  return 0;
}
return data[top--];
}
template <class T>T Stack<T>::GetTop(void)//取栈头元素操作
{
if(top!=-1)
     return data[top];
else return false;
}
//计算表达式求值过程演示


#include<iostream.h>
#include<stdio.h>
#include<math.h>
//#include"tstack.h"



float Operate(float a,char theta,float b)
{
float s;
switch(theta)
{
case'+': s=a+b;break;
case'-': s=a-b;break;
case'*': s=a*b;break;
case'/': s=a/b;break;
}
return s;
}


char Precede(char a,char b)
{
char array[7][7]={'>','>','<','<','<','>','>','>','>','<','<','<','>','>','>','>','>','>','<','>','>','>','>','>','>','<','>','>','<','<','<','<','<','=','0','>','>','>','>','0','>','>','<','<','<','<','<','0','='};

    int i,j;

switch(a)
{
case'+': i=0;break;
case'-': i=1;break;
case'*': i=2;break;
case'/': i=3;break;
case'(': i=4;break;
case')': i=5;break;
case'#': i=6;break;
}

switch(b)
{
case'+': j=0;break;
case'-': j=1;break;
case'*': j=2;break;
case'/': j=3;break;
case'(': j=4;break;
case')': j=5;break;
case'#': j=6;break;
}

return(array[i][j]);
}

int main()
{
char array[100],x,theta;
char *p,*q,A='y';
float s;
int i;
float v=0.0,a=0.0,b=0.0;
cout<<'\t'<<'\t'<<"****************************************"<<endl;
cout<<'\t'<<'\t'<<"            算术表达式求值              "<<endl;
cout<<'\t'<<'\t'<<"****************************************"<<endl;
cout<<'\t'<<'\t'<<" ------------计算机04-03-------------- "<<endl;
cout<<'\t'<<'\t'<<"|            20042319                  |"<<endl;
cout<<'\t'<<'\t'<<"|______________________________________|"<<endl;

    while(A=='y')
{
  cout<<"请输入表达式(以#号键结束):"<<endl;
  p=array;
  cin>>array; 
     Stack<char>OPTR;
     Stack<float>OPND;
     OPTR.push('#');
     while((*p)!='#'||OPTR.GetTop()!='#')
  {
     if((*p)>='0'&&(*p)<='9')
     {
       v=0.0;
       q=p;
       i=-1;
          while((*q)>='0'&&(*q)<='9'&&(*q)!='.')
    {
         i++;
         q++;
    }
     
        
       for(;i>=0;i--)
    {
         s=pow(10,i);
      v+=((*p)-'0')*s;
         p++;
    }

          if((*p)=='.')
    {
      p++;
      while((*p)>='0'&&(*p)<='9')
     {
          s=pow(10,i);
    v+=((*p)-'0')*s;
          i--;
    p++;
     }
    }
       OPND.push(v);
     }
       else
    switch(Precede(OPTR.GetTop(),(*p)))
     {
             case '<':OPTR.push((*p));
             p++;break;
       case '=':x=OPTR.pop();
             p++;break;
       case '>':theta=OPTR.pop();
             b=OPND.pop();
          a=OPND.pop();
          OPND.push(Operate(a,theta,b));
          break;
     }
  }
     printf("%f\n",OPND.GetTop());
     cout<<"想继续吗(y/n)?";
     cin>>A;
}
     

}
[em16][em16][em16][em2][em12][em12][em13]

回复列表 (共3个回复)

沙发

我是新来的 看到这里有好多高手,真是厉害啊!

板凳

不知道你的编译器是什么版本
如果是.NET
那就把#include <iostream.h>删除
加上using namespace std;

3 楼

我用的是devcpp
不太懂你的意思 我要的是求次方和絕對值
不過還是謝謝你回我贴字

我来回复

您尚未登录,请登录后再回复。点此登录或注册