欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

表达式求值(C语言)

时间:2023-04-29
目录

概述

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

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

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

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

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

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

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语言版

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。