问题标题:
【4.计算表达式的值求用C++类做的代码对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值.基本要求:从键盘输入一个】
问题描述:

4.计算表达式的值求用C++类做的代码

对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值.

基本要求:从键盘输入一个正确的中缀表达式,将中缀表达式转换为对应的后缀表达式,计算后缀表达式的值.

测试数据:任意选取一个符合题目要求的表达式.

提高要求:(1)对于表达式中的简单错误,能够给出提示;

(2)不仅提示错误,也能给出错误信息

(3)表达式中可以包括单个字母表示的变量

(4)能够处理多种操作符

(5)实现包含简单运算的计算器

(6)实现一个包含简单运算和函数运算的计算器

高广颖回答:
  #include <iostream>   #include <vector>   using namespace std;   bool isoperator(char op);x09x09x09x09x09x09 // 判断是否为运算符   int priority(char op);x09x09x09x09x09x09 x09 // 求运算符优先级   void postfix(char pre[] , char post[],int &n); // 把中缀表达式转换为后缀表达式   double read_number(char str[],int *i);x09x09x09 // 将数字字符串转变成相应的数字   double postfix_value(char post[]);x09x09x09x09 // 由后缀表达式字符串计算相应的中值表达式的值x09   template <class ElemType> class MyStack   {   public:   x09const static int MAXSIZE =100;   x09ElemType data[MAXSIZE];   x09int top;   public:   x09void init();x09x09x09// 初始化栈   x09bool empty();x09x09x09// 判断栈是否为空   x09ElemType gettop();x09 // 读取栈顶元素(不出栈)   x09void push(ElemType x);x09// 进栈   x09ElemType pop();x09x09x09// 出栈   };   template<class T> void MyStack<T>::init()   {   x09this->top = 0;   }   template<class T> bool MyStack<T>::empty()   {   x09return this->top == 0? true : false;   }   template<class T> T MyStack<T>::gettop()   {   x09if(empty())   x09{   x09x09cout << "栈为空!n";   x09x09exit(1);   x09}   x09return this->data[this->top-1];   }   template<class T> void MyStack<T>::push(T x)   {   x09if(this->top == MAXSIZE)   x09{   x09x09cout << "栈已满!n";   x09x09exit(1);   x09}   x09this->data[this->top] =x;   x09this->top ++;   }   template<class T> T MyStack<T>::pop()   {   x09if(this->empty())   x09{   x09x09cout << "栈为空! n";   x09x09exit(1);   x09}   x09T e =this->data[this->top-1];   x09this->top --;   x09return e;   }   int main()   {   x09MyStack<int> stack ;   x09stack.init();   x09//char pre[] ="22/(5*2+1)#";   x09char exp[100];   x09cout << "输入表达式(中缀,以#结束):";   x09cin >> exp;   x09char post[100] ;   x09//cout <<"中缀表达式为:"<< pre << endl;   x09int n =0;x09x09x09// 返回后缀表达式的长度   x09postfix(exp,post,n);   x09cout <<"后缀表达式为:";   x09for( int i =0 ;i < n ;i++)   x09x09cout << post[i] ;   x09cout << "n由后缀表达式计算出的数值结果: ";   x09cout << postfix_value(post) << endl;   x09system("pause");   x09return 0;   }   bool isoperator(char op)   {   x09switch(op)   x09{   x09case '+':   x09case '-':   x09case '*':   x09case '/':   x
丁建强回答:
  负数的怎么处理呢,谢谢
高广颖回答:
  char exp[100] ;   x09int z=0;   x09 for(int i =0;i<100;i++){   x09x09if(i==0 && a[0] == '-'){   x09x09 x09exp[0]='(';   x09x09 x09exp[1]='0';   x09x09 x09exp[2]=a[0];   x09x09 x09exp[3]=a[1];   x09x09 x09exp[4]=')';   x09x09 x09i++;   x09x09 x09z= 5;   x09x09 }else if(a[i]=='-' && (a[i-1] == '+')|(a[i-1] == '-')|(a[i-1] == '*')|(a[i-1] == '/')){   x09x09x09exp[z]='(';   x09x09x09exp[z+1]='0';   x09x09 x09exp[z+2]=a[i];   x09x09 x09exp[z+3]=a[i+1];   x09x09 x09exp[z+4]=')';   x09x09x09i++;   x09x09x09z+=5;   x09x09}else{   x09x09 x09exp[z]=a[i];   x09x09 x09z++;   x09x09 }   x09}将输入的字符窜变成-3+6*-5 ---> (0-3)+6*(0-5)   x09这是取巧的办法,谁让你只有5分啊,你赚大发了,5分没人做的
查看更多
其它推荐
热门其它推荐