• 大小: 1.48 KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-08-11
  • 语言: 其他
  • 标签: 课程设计  

资源简介

和数据结构数上的要求一样.作业和课程设计的的要求都达到,有注西,包你满意(请下载修正版,解决关于括号问题.谢谢)

资源截图

代码片段和文件信息

#include 
#include 
#include  //栈也可以自己写只要写出的栈和下面的函数名一样即可 
#include 
using namespace std;

double Evalucateexpression(); //表达示计算 
double ConverNum(stack &num); //转化为操作数 
double Evalucate(double b char c double a); //计算 
char Precede(stack &OPTR char c); //运算符优先级 
int GetPos(char c); //取下标 

int main(int argc char *argv[])
{
    
    cout << Evalucateexpression() << endl;
    system(“PAUSE“);
    return EXIT_SUCCESS;
}

double Evalucateexpression()
{
    stack OPND;//操作数栈 
    stack OPTR; //操作符栈 
    stack num; //多位数栈 
    OPTR.push(‘=‘); 
    char c = getchar();
    bool T = true;
    
    while (c != ‘=‘ || OPTR.top() != ‘=‘)
    {
          if (isdigit(c) || c == ‘.‘)  //操作数入num栈等待转换 
          {
                num.push(c);              
                c = getchar();         
          }
          else
          {  
              if (T) //转换操作数后入OPND栈 
              {
                  OPND.push(ConverNum(num));
              }
              else
              {
                  T = true;
              }
              char ch = Precede(OPTR c); //判断操作符优先级            
              switch (ch)
              {
               double a b;
               case ‘<‘: //优先级小则操作符入栈 
                    OPTR.push(c);
                    c = getchar();
                    break;
               case ‘=‘: //优先级相等则去掉操作符(其实就是去符号) 
                    OPND.pop();
                    c = getchar();
                    break;
               case ‘>‘: //优先级大则进行两数计算 
                    a = OPND.top();
                    OPND.pop();
                    b = OPND.top();
                    OPND.pop();
                    OPND.push(Evalucate(b OPTR.top() a));   //计算后入栈                
                    OPTR.pop();
                    T = false;
                    break; 
               default:
                    cout << “ERROR1!“;
                    system(“pause“);
                    exit(0);  
              }
          }
    }
    return OPND.top();
}

double Evalucate(double b char c double a)
{
    
    switch(c)
    {
    case ‘+‘:
         return b + a;
    case ‘-‘:
         return b - a;
    case ‘*‘:
         return b * a;
    case ‘/‘:
         return b / a;
    default:
         cout << “ERROR2!“;
         system(“pause“);
         exit(0);                                 
    }
}

double ConverNum(stack &num)//先计算总说再除以多少位小数 
{
    int temp = 1;
    int m = 1;
    int size = num.size();
    int point = 0; //计算多少小数位 
    double sum = 0;
    for (int i = 0; i != size; ++i)
    {
        if (num.top() != ‘.‘)
        {
            sum += temp * (num.top() - 48);
            temp *= 10;
            num.pop();
        }
        else
        {
            point = i;//计算有多少位小数 
            num.pop();
        }
    }
    while (point != 0)
    {
         m *=

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4333  2009-02-28 15:20  main.cpp

     文件         67  2009-02-28 16:25  使用前看.txt

----------- ---------  ---------- -----  ----

                 4400                    2


评论

共有 条评论