设计程序计算的后缀表达式

简介: 设计程序计算的后缀表达式
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 25
 typedef enum{OK=1,ERROR=0}Status;
 typedef double ElmType;
 typedef struct{
       ElmType data[MAXSIZE];
       int top;
 }SqStack;
 Status Push(SqStack* s, ElmType e) {
      if (s->top == MAXSIZE - 1) {
      return ERROR;//满
 }
      s->top++;
      s->data[s->top] = e;
      return OK;
 }
 ElmType Pop(SqStack* s, ElmType e) {
      if (s->top == -1) {
          return ERROR;//栈空
    }
      e = s->data[s->top];
      s->top--;
      return e;
 }
 ElmType com(char* zfc) {
       ElmType a, b, c, d, e=0;
       SqStack* s=(SqStack*)malloc(sizeof(SqStack));
       s->top = -1;
       while(*zfc!='\0'){
           switch (*zfc){
               case'+':{
                a= Pop(s, a);
                b= Pop(s, b);
                c = b + a;
                Push(s, c);
                break;
            }
            case'-':{
                a= Pop(s, a);
                b= Pop(s, b);
                c = b - a;
                Push(s, c);
                break;
            }
            case'*':{
                a= Pop(s, a);
                b= Pop(s, b);
                c = b * a;
                Push(s, c);
                break;
            }
            case'/':{
                a= Pop(s, a);
                b= Pop(s, b);
                if (a!= 0){
                    c = b/a;
                    Push(s, c);
                    break;
                }
                else{
                    printf("除零错误\n");
                    return ERROR;
                }
            }
            default:{
                while(*zfc>= '0' && '9'>=*zfc) {
                    d = *zfc-'0';
                    Push(s, d);
                    break;
                }    //while的
            }    //default的
        } // switch 的
        zfc++;
    } //while
    return Pop(s,e);
 }
int main() {
    ElmType a;
    char zfc[]="";
    gets(zfc);
    a=com(zfc);
    printf("表达式的值:%f\n", a);
    return 0;
 }
相关文章
|
5月前
|
Java uml
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。
|
5月前
|
Java uml
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
该博客文章展示了如何使用简单工厂模式设计一个程序,该程序能够根据用户输入的运算符(加、减、乘、除)对两个数进行计算,并提供了相应的UML类图和Java源码实现。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
|
8月前
|
算法 搜索推荐 程序员
第五十练 请以递归方式实现计算给定数字的幂的函数
第五十练 请以递归方式实现计算给定数字的幂的函数
42 4
|
8月前
|
算法 搜索推荐 程序员
第五十一练 请以递归方式实现计算两个整数的最大公约数的函数
第五十一练 请以递归方式实现计算两个整数的最大公约数的函数
46 0
|
8月前
|
C语言
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
135 0
|
设计模式 Java Spring
这个无敌设计,可以解析并运算任意数学表达式
下面用解释器模式来实现一个数学表达式计算器,包含加、减、乘、除运算。 首先定义抽象表达式角色IArithmeticInterpreter接口。
162 0
|
8月前
|
算法 搜索推荐 程序员
第四十四练 请以递归方式实现计算阶乘的函数
第四十四练 请以递归方式实现计算阶乘的函数
59 1
|
8月前
|
算法 搜索推荐 程序员
第四十六练 请以递归方式实现计算整数列表的和
第四十六练 请以递归方式实现计算整数列表的和
52 2