不知道哪些点没过,大佬可以提醒我这个垃圾。

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:

  1. 从 S1​ 中弹出两个数字,顺序为 n1​ 和 n2​;
  2. 从 S2​ 中弹出一个运算符 op;
  3. 执行计算 n2​ op n1​;
  4. 将得到的结果压回 S1​。

直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。

输入格式:

输入首先在第一行给出正整数 N(1<N≤103),为 S1​ 中数字的个数。

第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +-*/ 这四种运算。一行中的数字和符号都以空格分隔。

输出格式:

将输入的数字和运算符按给定顺序分别压入堆栈 S1​ 和 S2​,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 109。

如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。

输入样例 1:

5
40 5 8 3 2
/ * - +

结尾无空行

输出样例 1:

2

结尾无空行

输入样例 2:

5
2 5 8 4 4
* / - +

结尾无空行

输出样例 2:

ERROR: 5/0

结尾无空行

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ERROR -1
typedef int ElementType;
typedef int Position;
struct SNode
{ElementType *Data;Position Top;int MaxSize;
};
typedef struct  SNode *Stack;
Stack CreateStack(int MaxSize)
{Stack S = (Stack)malloc(sizeof(struct SNode));S->Data=(ElementType *)malloc(MaxSize * sizeof(ElementType));S->Top=-1;S->MaxSize=MaxSize;return S;
};bool isFull(Stack S)
{return (S->Top==S->MaxSize-1);
}bool Push(Stack S, ElementType X)
{if(isFull(S)){printf("堆栈满\n");return false;}else {S->Data[++(S->Top)]=X;return true;}
}bool IsEmpty (Stack S)
{return (S->Top==-1);
}ElementType Pop(Stack S){if(IsEmpty(S)){printf("堆栈空\n");return ERROR;}else{return (S->Data[(S->Top)--]);}
}int main()
{ElementType X;Stack S;int n,result;int i,j;scanf("%d", &n);char Op[n];S = CreateStack(n);for(i=0;i<n;i++){scanf("%d",&X);Push(S,X);}//处理末尾的\nchar rubbsh;scanf("%c", &rubbsh);for(j=0;j<n-1;j++){scanf(" %c",&Op[j]);}// for ( i = n-2; i >=0; i--)// {//     printf("%c",Op[i]);// }j=n-2;while(j>=0){int n1,n2;n1=Pop(S);n2=Pop(S);if(Op[j]=='+'){n2=n1+n2;Push(S,n2);}else if(Op[j]=='-'){n2=n2-n1;Push(S,n2);}else if(Op[j]=='*'){n2=n2*n1;Push(S,n2);}else if(Op[j]='/'){if (n1==0){printf("ERROR: X/0\n");return 0;}else{n2=n2/n1;Push(S,n2);}}j--;}result = Pop(S);printf("%d", result);return 0;
}

7-1 简单计算器 (25 分)相关推荐

  1. L2-1 简单计算器 (25 分)详解c语言 模拟堆栈

    L2-1 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S​1存放数字,另一个堆栈 S​2 存放运算符.计算 ...

  2. 7-13 简单计算器 (25 分)

    7-13 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符.计 ...

  3. PTA7-1 简单计算器 (25 分)

    PTA7-1 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符 ...

  4. 7-4 简单计算器 (25 分)

    7-4 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符.计算 ...

  5. L2-033 简单计算器 (25 分)-PAT 团体程序设计天梯赛 GPLT

    本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1存放数字,另一个堆栈 S2存放运算符.计算器的最下方有一个等号键,每次按下这个键,计 ...

  6. 7-2 简单计算器 (25分)

    模拟简单运算器的工作.假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算. 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数. ...

  7. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  8. 银行业务队列简单模拟 (25 分)c语言c++

    7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...

  9. 7-4 二叉树的遍历!(简单) (25 分)

    7-4 二叉树的遍历!(简单) (25 分) 二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握! 这是一道简单的二叉树问题! 我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序 ...

最新文章

  1. 使用 HTML5 时如何改进移动 Web 应用开发
  2. VMware Server 2.0简单学习!
  3. PHPExcel读取excel的多个sheet存入数据库
  4. 去除IE10自带的清除按钮
  5. hibernate cascade的真正含义
  6. python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...
  7. Idea插件——Translation 翻译插件安装与使用
  8. php正则匹配域名不包含端口_3分钟短文 | PHP极速匹配子字符串,你是怎么做的?...
  9. vmware view由哪些组件组成?
  10. python中function函数的用法_Python中Function(函数)和methon(方法)
  11. 【转载】socket as an IPC
  12. Vim安装使用和配置
  13. Tess4J和TesseractOCR简易使用教程
  14. 卡巴斯基互联网安全套装KIS 2010 Beta汉化特别版下载(无需注册码)
  15. EndNote无法修改参考文献格式
  16. 【PYTHON】【requests】【自定义authen,requests.auth AuthBase】
  17. 我们管理20人团队的方法
  18. k8s免fq下载镜像
  19. 使用Arcmap将WGS84坐标转换成国家大地坐标系2000
  20. 【数据库】Redis

热门文章

  1. 安卓2.3.6一键root_一键查询qq历史头像2.0安卓下载-一键查询qq历史头像软件2.0版下载免root版...
  2. Scyther tools 协议形式化分析帮助文档翻译
  3. 计算机本地用户删除后怎么恢复,大神面对win7系统计算机管理本地用户和组不见了的还原步骤...
  4. java hadoop mahout_hadoop 之Mahout 数据挖掘
  5. 金蝶云星空与聚水潭系统对接方案项目经验分享(聚水潭主管库存)
  6. 直播软件源码如何实现直播flash插件
  7. t460p和t470p对比评测_T460P和T470P请问各位大侠哪个好,优缺点各在哪?谢谢
  8. 自动转换15位身份证号码位18位
  9. 2020年的第二周 | 关于赚钱 ——《副业赚钱》、基金定投
  10. linux备份当前目录压缩,Linux备份压缩命令:tar详解