栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

表达式求值(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

表达式求值(C语言)

目录

概述

算术的四则运算法则算式的组成形式 算法分析

基本思想优先级 代码

概述 算术的四则运算法则
    先乘除后加减;从左到右计算;先算括号里面,后算括号外面。
算式的组成形式

任何一个算式都是由操作数、运算符和界限符组成,称为单词。

操作数既可以是常数也可以是变量;运算符可以分为算术运算符、关系运算符和逻辑运算符三类;基本界限符是左右括号和表达式结束符等。 算法分析

使用两个工作栈,一个存储运算符,一个存储操作数或运算结果。

基本思想
    先初始化操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;依次读入表达式中的每一个字符,若是操作数则进操作数栈,若是运算符则和运算符栈的栈顶运算符比较优先级后再做对应操作。
优先级

a1是运算符栈 a2是表达式运算符先算括号内:a1中的所有运算符的优先级小于a2中的 ‘(’,但都小于a2中的’)’当a1=a2时,令a1>a2(等于是指优先级相等,而不是运算符相等)

其中底色为黄色的‘=’是括号内运算结束的等于;底色为橙色的‘=’是表达式运算结束的等于。(不懂没关系接着往下看)

当表达式中的运算符优先级小于运算符栈的栈顶运算符时,就将运算符栈的栈顶运算符出栈且操作数栈出栈两个元素,进行算术运算,将结果压入操作数栈中待用。

	case '>':
  	Pop(&OPTR, &theta); // 弹出运算符
     Pop(&OPND, &b);     // 弹出右边的操作数
     Pop(&OPND, &a);     // 弹出左边的操作数
     Push(&OPND, Operate(a, theta, b));//在运算符theta运算下a和b并将结果压入操作数栈中
     break;
代码

参考:数据结构-C语言版

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号