c语言:表达式求值实现(包含加减乘除括号) 您所在的位置:网站首页 c语言的计算题加减乘除顺序 c语言:表达式求值实现(包含加减乘除括号)

c语言:表达式求值实现(包含加减乘除括号)

#c语言:表达式求值实现(包含加减乘除括号)| 来源: 网络整理| 查看: 265

   这道题不难,但是当你认真去编代码的时候,还是要考虑好多细节,所以不能只停留在看懂的层面上,不去实践你永远不知道你到底掌握了没有,加油!

  之前的表达式求值不包括括号运算,现将改进后的代码和源代码粘在上面,便于以后的复习。

一.不包括括号运算

#include #include #include #include #include #define STACK_INIT_SIZE 100 using namespace std; typedef struct { char date[STACK_INIT_SIZE]; int top; }OptrStack; //操作符结构体 typedef struct { double date[STACK_INIT_SIZE]; int top; }OpndStack; //操作数结构体 //操作符相关操作 OptrStack *Init_OptrStack(); //置栈空 int Empty_OptrStack(OptrStack *s);//判空栈 int Push_OptrStack(OptrStack *s, char x);//入栈(注意:判断栈是否已满) char Pop_OptrStack(OptrStack *s, char x);//出栈(注意:判断栈是否已空) char GetTop_OptrStack(OptrStack *s, char x);//取栈顶元素,先判空 //操作数相关操作 OpndStack *Init_OpndStack();//置栈空 int Empty_OpndStack(OpndStack *t);//判空栈 int Push_OpndStack(OpndStack *t, double y);//入栈(注意:判断栈是否已满) double Pop_OpndStack(OpndStack *t, double y);//出栈(注意:判断栈是否已空) double GetTop_OpndStack(OpndStack *t, double y);//取栈顶元素 //表达式求值函数 void Error(char *s); //错误处理函数 int Judge_optr(char ch); //用于判断字符ch是否是运算符 int Operate(int a, int b, char top); //用于计算当前的值,并将该值返回 void Jsbds_operate(char str[]); //读入一个简单算术表达式的值 //操作符函数实现部分 OptrStack *Init_OptrStack() { OptrStack *s; s = (OptrStack *)malloc(sizeof(OptrStack)); s->top = -1; return s; } int Empty_OptrStack(OptrStack *s)//判空栈 { if (s->top != -1) return 1; else return 0; } int Push_OptrStack(OptrStack *s, char x)//入栈(注意:判断栈是否已满) { if (s->top == (STACK_INIT_SIZE - 1)) { return 0; } else s->date[++s->top] = x; return 1; } char Pop_OptrStack(OptrStack *s, char x)//出栈(注意:判断栈是否已空) { if (!Empty_OptrStack(s)) { return 0; } else x = s->date[s->top]; s->top--; return x; } char GetTop_OptrStack(OptrStack *s, char x)//取栈顶元素,先判空 { if (!Empty_OptrStack(s)) { return 0; } else x = s->date[s->top]; return x; } //操作数函数实现部分 OpndStack *Init_OpndStack()//置栈空 { OpndStack *t; t = (OpndStack*)malloc(sizeof(OpndStack)); t->top = -1; return t; } int Empty_OpndStack(OpndStack *t)//判空栈 { if (t->top != -1) return 1; else return 0; } int Push_OpndStack(OpndStack *t, double y)//入栈(注意:判断栈是否已满) { if (t->top == (STACK_INIT_SIZE - 1)) { return 0; } else t->date[++t->top] = y; return 1; } double Pop_OpndStack(OpndStack *t, double y)//出栈(注意:判断栈是否已空) { if (!Empty_OpndStack(t)) { return 0; } else y = t->date[t->top]; t->top--; return y; } double GetTop_OpndStack(OpndStack *t, double y)//取栈顶元素 { if (!Empty_OpndStack(t)) { return 0; } y = t->date[t->top]; return y; } //表达式求值函数实现 void Error(char *s) //错误处理函数 { std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有