题目描述

为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为后缀{运算符在后,如X/Y写为XY/表达式。在这样的表示中可以不用括号即可确定求值的顺序,如:(P+Q)*(R-S) → PQ+RS-*。后缀表达式的处理过程如下:扫描后缀表达式,凡遇操作数则将之压进堆栈,遇运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。

输入

输入一行表示后缀表达式,数与数之间一定有空格隔开(可能不只一个空格),最后输入@表示输入结束。

数据保证每一步的计算结果均为不超过100000的整数。

输出

输出一个整数,表示该表达式的值.

样例输入

14  3 20 5 / *8 - + @

样例输出

18

#include<stdio.h>

typedef struct STRACK                                              //定义结构体
{
    double a[100];
    int top;
} STRACK;

int main()
{
    double totle=0,e=0;
    char s[100];
    int i;

STRACK L;
    L.top=-1;
    gets(s);
    for(i=0; s[i]!='@'; i++)
    {
        if(s[i]<='9'&&s[i]>='0')
        {
            L.top++;
            int temp=s[i]-'0';
            int k=i+1;
            while(s[k]!='@')                                          //利用while循环得到由多位由字符组成的数值
            {
                if(s[k]<='9'&&s[k]>='0')
                {
                    temp=10*temp+(s[k]-'0');
                    i++;
                    k++;
                }
                else break;
            }
            L.a[L.top]=temp;
        }
        else  if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')        //遇到运算符进行计算
        {
            switch(s[i])
            {
            case '+':
                e=L.a[L.top-1]+L.a[L.top];
                break;
            case '-':
                e=L.a[L.top-1]-L.a[L.top];
                break;
            case '*':
                e=L.a[L.top-1]*L.a[L.top];
                break;
            case '/':
                e=L.a[L.top-1]/L.a[L.top];
                break;
            }
            L.a[L.top-1]=e;                                          //往前一位存储
            L.a[L.top]=0;
            L.top--;
        }
    }
    printf("%.0lf",L.a[L.top]);                                    //输出最后结果
    return 0;
}

后缀表达式的求值(c语言)相关推荐

  1. 中缀表达式转后缀表达式并求值

    因为在学校实在是太闲了,所以写了一个表达式求值的C语言程序,希望大佬可以多多指正. 基本思路: 就像把大象装进冰箱一样,我们需要三步进行表达式的求值工作. 输入一个中缀表达式(就是平常我们见的表达式) ...

  2. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)

    // 后缀表达式转中缀表达式,同时求值,O(n)// 数值栈 vector<int> nums; // 运算符栈 vector<char> ops;// 优先级 int gra ...

  3. 中缀表达式转换为前缀及后缀表达式并求值【摘】

    它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) ...

  4. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...

    程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...

  5. 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现

    #!/usr/bin/env python # -*- coding: utf-8 -*-# learn <<Problem Solving with Algorithms and Dat ...

  6. 中缀转后缀表达式并求值

    通过栈将中缀表达式转换为后缀表达式并根据后缀表达式求解,包含的Header.h为之前发过的栈操作相关函数实例程序,改成头文件就行.练习+记录,高手无视. OutPut: The init formul ...

  7. c语言中缀表达式求值_[源码和文档分享]基于C++的表达式计算求值

    一.使用说明 1.1 项目简介 表达式求值是程序设计语言编译中的一个最基本的问题,就是将一个表达式转化为逆波兰表达式并求值.具体要求是以字符序列的形式从终端输入语法正确的.不含变量的整数表达式,并利用 ...

  8. C/C++ 语言中表达式的求值

    作者:裘宗燕    北京大学数学学院信息科学系    本文基本内容发表于<编程高手>杂志 2004 年第 12 期 经常可以在一些讨论组里看到下面的提问:"谁知道下面 C 语句给 ...

  9. c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言研究性学习的路线 现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常"误导"读者,于是,"死记 ...

最新文章

  1. 刷题两个月,从入门到字节offer,这是我的模板 | GitHub 1.2k星
  2. 单片机C语言拉高1位,第二讲 单片机C语言之12864液晶显示
  3. Linux脚本中$#、$0、$1、$@、$*、$$、$?
  4. Bugku-CTF之你必须让他停下+头等舱
  5. 20145227鄢曼君《网络对抗》Web安全基础实践
  6. 使用Spectre.Console创建漂亮的控制台应用程序
  7. SPS2003升级到MOSS2007相关资料及问题总结
  8. Linux笔记-centos安装elasticsearch7版本
  9. 无心剑中译罗素《此生何求?》
  10. C#初学的一些注意点
  11. 长串英文数字强制折行解决办法css
  12. 自学python考哪些证书-自学Python半年的姑娘告诉我,她这半年只值8元
  13. linux磁盘健康监控,MegaCli监控RAID磁盘健康信息
  14. Shiro框架的搭建与使用
  15. PS 批量导入图片制作 gif
  16. ai怎么做波普风圆点_AI绘画教程,绘画波普艺术风格人像
  17. 如何基于TwinCAT3实现伺服电机控制(一)
  18. 麦克风和扬声器选型介绍
  19. 计算机组成原理选择题题库
  20. 如何利用Pspice仿真C-V特性

热门文章

  1. 从数据库中查询列表倒序排列(按照时间顺序)
  2. vulnhub-Brainpan (考点:windows exe和linux elf下的两种缓冲区溢出)
  3. Linux云计算运维之Shell
  4. 沅有芷兮:类型系统的数学之美
  5. FTP服务器传输文件
  6. kdj超卖_最全的KDJ(超买超卖)指标实用技巧(图解)
  7. 白领沉迷EXCEL式生存
  8. CentOS7 无法启动
  9. MNL(使用自己的数据集)
  10. 360智能摄像头 android,360智能摄像机app