计算机混合运算(计算器)

news2024/11/15 20:02:11

学习贺利坚老师,计算机混合运算, 做出处理混合运算

数据结构例程——表达式求值(用栈结构)_用栈表达式求值-CSDN博客文章浏览阅读1.5w次,点赞14次,收藏61次。本文针对数据结构基础系列网络课程(3):栈和队列中第5课时栈的应用1-表达式求值。例:用户输入一个包含“+”、“-”、“*”、“/”、正整数和圆括号的合法数学表达式,计算该表达式的运算结果。 解答:#include #include #define MaxOp 100#define MaxSize 100struct //设定运算符优先级{_用栈表达式求值https://blog.csdn.net/sxhelijian/article/details/48464683本人详细解析博客:

        用后缀式解决混合运算

计算器的混合运算_wnt-2135计算器复合运算-CSDN博客文章浏览阅读1.4k次,点赞8次,收藏12次。我们日常生活中 , 处处离不开计算 ,简单的买菜 , 去超市购物等 , 都需要计算消费的金额 , 我们一次性买了很多种类的菜 , 同一种饮料买了好几瓶 . 如果用手算的话 , 我们当然不可能傻到一个算式一个算式的去计算结果 . 我们一般会列一个混合运算的式子 , 然后再计算.这时候 ,如果让一个一年级的小学生来算的话 ,他会感到一头雾水 , 到底先算哪一个 ,因为他现在只学了加减法 ,只会逐步计算.我们学过算术优先级的同学 , 当然知道 , 我们要先算乘除, 再算加减 , 然后括号里的要优先运算 ._wnt-2135计算器复合运算https://blog.csdn.net/qq_57484399/article/details/127230655       由混合算式求后缀式

将混合运算表达式,转化为后缀表达式_将表达式 转为后缀表达式-CSDN博客文章浏览阅读757次,点赞4次,收藏5次。后缀式后缀式即逆波兰式,是逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于x:=(a+b)*(c+d),其后缀式为xab+cd+*:=。原表达式:a*(b*(c+d/e)-f)# /* # 为表达式结束符号*/后缀式:abcde/+*f-*#为运算符定义优先级:# ( + - * / **_将表达式 转为后缀表达式https://blog.csdn.net/qq_57484399/article/details/127249659

更新日志:

v1.0: 实现基本运算功能

V1.0

#include <stdio.h>
#include <stdlib.h>

#define MaxOperate 7   //运算符数量
#define MaxSize 100


struct MyStructType
{
    char symbol;    //运算符
    char priority;  //优先级
};

//左运算符(进栈运算符)
MyStructType left_symbol[] =  {{'=',0},{'(',1},{'+',3},{'-',3},{'*',5},{'/',5},{')',6}};
//右运算符(待栈运算符)
MyStructType right_symbol[] = {{'=',0},{'(',6},{'+',2},{'-',2},{'*',4},{'/',4},{')',1}};

//求左运算符的优先级
int leftsymbol_priority(char seek_symbol)
{
    int counter;
    int result = 0;
    for(counter = 0; counter < MaxOperate; counter++)
    {
        if(left_symbol[counter].symbol ==  seek_symbol)
        {
            result = left_symbol[counter].priority;
        }

    }
    return result;
}


//求右运算符的优先级
int right_symbol_priority(char seek_symbol)
{
    int counter;
    int result = 0;
    for(counter = 0; counter < MaxOperate; counter++)
    {
        if(right_symbol[counter].symbol ==  seek_symbol)
        {
            result = right_symbol[counter].priority;
        }

    }
    return result;
}



bool judging_Type(char judge_char)
{
    if( judge_char == '(' ||
        judge_char == ')' ||
        judge_char == '+' ||
        judge_char == '-' ||
        judge_char == '*' ||
        judge_char == '/'  )
    {
        return true;    //是运算符
    }
    else
    {
        return false;   //不是运算符
    }

}

//operation1 和 operation2 运算符优先级的比较结果
int Comparative_priority(char operation1, char operation2)
{
    int result;
    if(leftsymbol_priority(operation1) == right_symbol_priority(operation2))
    {
        result = 0;
    }
    else
    if(leftsymbol_priority(operation1) < right_symbol_priority(operation2))
    {
        result = -1;
    }
    else
    {
        result = 1;
    }
    return result;

}

//将算数表达式 Mixed_operator 转换成后缀表达式 Suffix_expression
void Conversion_expression(char *Mixed_operator,char Suffix_expression[])
{
    int counter = 0;

    struct
    {
        char data[MaxSize];//存放运算符
        int top;            //栈指针
    }Operator_stack;

    Operator_stack.top = -1;
    Operator_stack.top++;
    Operator_stack.data[Operator_stack.top] = '=';

    //处理混合运算式
    while(*Mixed_operator != '\0')
    {
        //遍历到的字符为数字
        if(!judging_Type(*Mixed_operator))
        {
            while(*Mixed_operator >= '0' && *Mixed_operator <= '9') //把数字加入(从而过滤掉空格)
            {
                Suffix_expression[counter++] = *Mixed_operator;
                Mixed_operator++;
            }
            Suffix_expression[counter++] = '#'; //数字分隔符
        }
        else    //遍历到的字符为运算符
        {
            //比较栈顶运算符和此运算符
            switch(Comparative_priority(Operator_stack.data[Operator_stack.top],*Mixed_operator))
            {
                case -1://栈顶运算符优先级低:进栈
                    Operator_stack.top++;
                    Operator_stack.data[Operator_stack.top] = *Mixed_operator;
                    Mixed_operator++;
                    break;
                case 0: //只有括号满足这种情况,退栈,继续扫描
                    Operator_stack.top--;
                    Mixed_operator++;
                    break;
                case 1: //栈顶运算符高,则退栈并输出到 Suffix_expression
                    Suffix_expression[counter++] = Operator_stack.data[Operator_stack.top];
                    Operator_stack.top--;
                    break;
            }
        }
    }
    //把运算符栈内符号一次性出栈
    while(Operator_stack.data[Operator_stack.top] != '=')
    {
        Suffix_expression[counter] = Operator_stack.data[Operator_stack.top];
        counter++;
        Operator_stack.top--;
    }

    Suffix_expression[counter] = '\0';//为后缀式末尾增加结束符号
}

//计算后缀表达式的值
float Calculate_value(char Suffix_expression[])
{
    struct
    {
        float data[MaxSize];
        int top;
    }data_stack;//存储运算空间的栈
    //遍历字符串
    int counter = 0;
    //遍历字符串
    char visit_char = Suffix_expression[counter];
    //初始栈顶 -1
    data_stack.top = -1;
    //数字字符 转 数值中间变量
    float numerical_value;

    //根据后缀式,进行计算
    while(visit_char != '\0')
    {
        switch(visit_char)
        {
            case '+':
                data_stack.data[data_stack.top - 1] = data_stack.data[data_stack.top - 1] + data_stack.data[data_stack.top];
                data_stack.top--;
                counter++;
                break;
            case '-':
                data_stack.data[data_stack.top - 1] = data_stack.data[data_stack.top - 1] - data_stack.data[data_stack.top];
                data_stack.top--;
                counter++;
                break;
            case '*':
                data_stack.data[data_stack.top - 1] = data_stack.data[data_stack.top - 1] * data_stack.data[data_stack.top];
                data_stack.top--;
                counter++;
                break;
            case '/':
                if(data_stack.data[data_stack.top] != 0)
                {
                    data_stack.data[data_stack.top - 1] = data_stack.data[data_stack.top - 1] / data_stack.data[data_stack.top];
                    data_stack.top--;
                    counter++;
                }
                else    //除零错误
                {
                    printf("\n\t除零错误!\n");
                    exit(0);    //异常退出
                }
                break;
            default:
                numerical_value = 0;//将数字字符转换成数值存放在 numerical_value 中
                while(visit_char >= '0' && visit_char <= '9')
                {
                    numerical_value = 10 * numerical_value + visit_char - '0';
                    counter++;
                    visit_char = Suffix_expression[counter];
                }
                //处理数字入数据处理栈
                data_stack.top++;
                data_stack.data[data_stack.top] = numerical_value;
                counter++;//跳过后缀式数字后的'#'
                break;
        }
        //选中要处理的字符
        visit_char = Suffix_expression[counter];
    }

    //返回计算结果
    return data_stack.data[data_stack.top];
}


int main()
{
    //混合运算式
    char Mixed_operator[] = "(56-20)/(4+2)-33+9*32";//改为单片机输入
    //后缀表达式
    char Suffix_expression[MaxSize];
    //转换表达式(混合运算式 ==> 后缀表达式)
    Conversion_expression(Mixed_operator,Suffix_expression);
    printf("\n中缀表达式:%s\n",Mixed_operator);
    printf("\n后缀表达式:%s\n",Suffix_expression);
    printf("\n表达式的值:%g\n",Calculate_value(Suffix_expression));

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业异常检测

工业异常检测在业界和学界都一直是热门&#xff0c;近期其更是迎来了全新突破&#xff1a;与大模型相结合&#xff01;让异常检测变得更快更准更简单&#xff01; 比如模型AnomalyGPT&#xff0c;它克服了以往的局限&#xff0c;能够让大模型充分理解工业场景图像&#xff0c;判…

与 Apolo 共创生态:Apolo 7周年大会我的启示与心得分享

文章目录 前言一、Apolo加速企业自动驾驶解决方案落地二、应用X企业预制套件&#xff1a;启示与心得三、Studio X企业协同工具链&#xff1a;共创心得分享 前言 本篇文章我将围绕Apolo 7周年来给大家分享我所学习到的内容和一些心得。 Apolo 7周年活动链接&#xff1a;https:…

2024年【陕西省安全员C证】报名考试及陕西省安全员C证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员C证报名考试为正在备考陕西省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的陕西省安全员C证考试资料祝您顺利通过陕西省安全员C证考试。 1、【多选题】下列做法正确的有&#…

模块化兼容性

模块化兼容性 由于webpack同时支持CommonJS和ES6 module&#xff0c;因此需要理解它们互操作时webpack是如何处理的 同模块化标准 如果导出和导入使用的是同一种模块化标准&#xff0c;打包后的效果和之前学习的模块化没有任何差异 不同模块化标准 不同的模块化标准&#x…

Vue入门到关门之计算属性与监听属性

一、计算属性 1、什么是计算属性 计算属性是基于其它属性计算得出的属性&#xff0c;就像Python中的property&#xff0c;可以把方法/函数伪装成属性&#xff0c;在模板中可以像普通属性一样使用&#xff0c;但它们是基于响应式依赖进行缓存的。这意味着只有在依赖的响应式数…

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

新闻稿的正文应该怎样写?纯干货

新闻稿作为传播信息的重要载体&#xff0c;正文的撰写至关重要。新闻稿的正文应该怎样写&#xff1f;伯乐网络传媒来给大家揭秘高质量新闻稿的写作结构与技巧&#xff01; 一、新闻稿正文的结构 1. 导语 a. 概括新闻事件的核心内容&#xff1a;导语是新闻稿的开篇&#xff0c;…

纯血鸿蒙APP实战开发——预渲染实现Web页面瞬开效果

介绍 为了便于大家在使用本案例集时能够更详细的了解各个案例&#xff0c;本案例基于Web预渲染实现了案例介绍功能&#xff0c;即应用右下角的问号icon。 效果图预览 使用说明 因为直接加载的线上README&#xff0c;因此本功能需联网使用点击icon&#xff0c;即会弹出对应案…

跟TED演讲学英文:The secret ingredient of business success by Pete Stavros

The secret ingredient of business success Link: https://www.ted.com/talks/pete_stavros_the_secret_ingredient_of_business_success? Speaker: Pete Stavros Date: April 2024 文章目录 The secret ingredient of business successIntroductionVocabularyTranscriptSu…

前端框架技术调研

目前程序员使用前端框架最多的是哪一个&#xff1f;

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似SEGGER RTT打印功能 简单分析

参考&#xff1a; 有关于 SDI printf 更多的信息和资料吗&#xff1f; 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf SDI (Serial Data Interface) 是沁恒微电子 RISC-V 内核的私有外设接口,CH32 RISC-V 系列目前提供了…

最佳WordPress外贸主题推荐(2024)

WordPress是一个非常受欢迎的建站平台&#xff0c;它具有易用性&#xff0c;并提供了许多功能强大的主题和插件。如果你计划建立一个外贸独立站商城&#xff0c;选择一个适合的WordPress外贸主题至关重要。以下是一些外贸主题应具备的特点&#xff1a; 1. 欧美风格&#xff1a…

一套JAVA语言开发的:危大工程智慧一体化工地系统源码,(后台管理端+APP+可视化大屏端)

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术&#xff0c;提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平&#xff0c;实现工程施工可视化智能管理&#xff0c;并逐步实现绿色生态建造。 相关技术&#xff1a;微…

【MATLAB源码-第200期】基于matlab的鸡群优化算法(CSO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 鸡群优化算法&#xff08;Chicken Swarm Optimization&#xff0c;简称CSO&#xff09;是一种启发式搜索算法&#xff0c;它的设计灵感来源于鸡群的社会行为。这种算法由Xian-bing Meng等人于2014年提出&#xff0c;旨在解决…

【第 8 节】大模型微调数据构造(补充课程)

1 简介 视频课程 | 操作文档 | OpenDataLab 2 课程内容 2.1 大模型训练数据 2.2 微调 pretrain数据集 - 万卷 SFT 微调相关 TO-DO&#xff1a;2024.5左右会开源一个LLM标注工具。 密切关注opendatalab 2.3 微调数据构造 数据质量判断 tips&#xff1a; 弱智吧&#xff1a…

【论文】关于网页上能打开的文章下载PDF“显示无效或损坏的 PDF 文件”的解决办法

1. 遇到的问题 今天我在 dl.acm.org/doi 下载论文时发现下载后的pdf打开出现“显示无效或损坏的 PDF 文件” 可是在原网址是可以打开并显示的 2. 解决方案 这里我用到了和之前【论文】去除PDF论文行号的完美解决方案 的相似的解决办法 就是下载的时候不直接下载&#xf…

【兼职宝典】七大靠谱手机兼职副业平台,让你乐在其中,轻松实现财务自由!

数字化时代已经到来&#xff0c;互联网的普及与技术的飞速发展让越来越多的人开始关注兼职工作&#xff0c;以此增加收入、锻炼能力或追求兴趣爱好。本文将为您详细解读几种热门的兼职方式&#xff0c;助您找到最适合自己的兼职岗位。 一&#xff0c;自媒体运营&#xff1a;创…

python使用opencv对图像的基本操作(3)

17.颜色空间的转换 17.1.rgb图像转gray图像 from skimage import io,color img io.imread(lbxx.jpg) img_gray color.rgb2gray(img) #将rgb图像转换成gray图像 io.imshow(img_gray)运行结果&#xff1a; 17.2.rgb图像转hsv图像 from skimage import io,color img io.im…

Python多线程编程深度探索:从入门到实战

title: Python多线程编程深度探索&#xff1a;从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 tags: 多线程并发编程线程安全Python异步IO性能优化实战项目 第1章&#xff1a;Python基础知识与多线程概念 Python简介&#xff1a…