• 大小: 277KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 计算器类  

资源简介

计算器类: 设计一个计算器类模板,适用各类型表达式的“+、-、×、/” 数学四则运算以及“>、>=、<、<=、!=、==”等关系运算。数学四则运算表达式中可含有加、减、乘、除运算符以及各型数据的运算对象。程序可以直接输入数学表达式以及关系表达式,不需要任何转换,就可以直接输出数学四则运算和逻辑运算的结果。并且操作简单、界面清晰、灵活、实用、方便等。(系统功能可充分自由发挥)。 扩展功能:三角运算、进制转换、开方、幂指数等。

资源截图

代码片段和文件信息

#include
#include
#include
#include
using namespace std;

//判断是否为括号
bool isPra(char c)
{
    if(c==‘(‘||c==‘)‘)
        return true;
    else
        return false;
}

//获得符号的优先性
int getPri(char c)
{
    switch(c)
    {
    case ‘+‘:
    case ‘-‘:
        return 0;   //如果是加减,返回0
        break;
    case ‘*‘:
    case ‘/‘:
        return 1;   //如果是乘除,返回1
        break;
    case ‘(‘:
    case ‘)‘:
        return -1;  //注意,这里将括号设为最低优先级,因此括号不会被弹出,除非遇到右括号
        break;
     }
}

//判断符号的优先性
void check(char c stack& coll2 deque& coll3)
{
    if(coll2.empty())
    {
        coll2.push(c);
        return;
    }

    if(isPra(c))
    {
        if(c==‘(‘)
            coll2.push(c);
        else
        {
            //弹出所有元素直到遇到左括号
            while(coll2.top()!=‘(‘)
            {
                char ch = coll2.top();
                coll3.push_back(ch);
                coll2.pop();
            }

            //当遇到左括号时,弹出但不加入coll3(后缀表达式中)
            coll2.pop();
        }
    }
    else    //如果不是括号
    {
        //取出栈顶元素,与当前符号进行优先性比较
        char sym = coll2.top();

        //比较两符号的优先性
        if(getPri(c)<=getPri(sym))
        {
            //如果c的优先性比栈顶符号小或等于,弹出栈顶元素
            coll2.pop();
            //并将其压入coll3(后缀表达式)中
            coll3.push_back(sym);
            //递归调用check比较当前符号c与下一个栈顶符号的优先性
            check(ccoll2coll3);
        }
        else
        {
            //如果c比栈顶符号优先级大,那将c压入coll2(操作符栈)中
            coll2.push(c);
        }
    }
}

//从coll中取出元素,分配元素到coll2和coll3中
void allocate(deque& coll1 stack& coll2 deque& coll3)
{
    while(!coll1.empty())
    {
        char c = coll1.front();
        coll1.pop_front();

        if(c>=‘0‘&&c<=‘9‘)
        {
            coll3.push_back(c);
        }
        else
        {
            //调用check函数,针对不同情况作出不同操作
            check(ccoll2coll3);
        }

    }

    //如果输入结束,将coll2的元素全部弹出,加入后缀表达式中
    while(!coll2.empty())
    {
        char c = coll2.top();
        coll3.push_back(c);
        coll2.pop();
    }
}

//计算后缀表达式
void calculate(deque& coll3 stack& coll4)
{
    while(!coll3.empty())
    {
        char c = coll3.front();
        coll3.pop_front();

        //如果是操作数,压入栈中
        if(c>=‘0‘&&c<=‘9‘)
        {
            //减去‘0‘得出偏移值,即为真实数值(如果直接转换成int,结果不对,因为char 转换为int是其编码值,例如‘1‘的编码值为49
            int op = c-‘0‘;
            coll4.push(op);
        }
        else     //如果是操作符,从栈中弹出元素进行计算
        {
            int op1 = coll4.top();
            coll4.pop();
            int op2 = coll4.top();
            coll4.pop();
            switch(c)
            {
            case ‘+‘:
                coll4.push(op2+op1);
                break;
            case ‘-‘:
                coll4.push(op2-op1);
                break;
            case ‘*‘:
                coll4.push(op2*op1);
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-07-06 21:28  计算器类\
     文件        4154  2015-06-18 13:03  计算器类\calculate.cpp
     文件     1006134  2015-07-06 21:28  计算器类\calculate.exe
     文件       74339  2015-07-06 21:28  计算器类\calculate.o

评论

共有 条评论

相关资源