C语言利用栈计算算式(表达式) | 您所在的位置:网站首页 › medical英文读音 › C语言利用栈计算算式(表达式) |
本文介绍如何通过栈来实现计算算式。 首先我们要通过多个栈对算式进行操作和计算得出答案,在计算前,我们需要先明确整个计算的流程: 获取用户输入并保存判断算式是否合理一些预处理…(例如:删除空格,大括号中括号全部转为小括号等)并把处理后的式子存入另一个地方根据优先级进行计算,先乘除括号,再加减输出答案而这其中,至关重要的便是计算这部分了,继续看计算的原理: 通过栈计算算式的原理 1.优先级高的先算以算式9+8*2-(3+1)为例 正常计算时,应该先乘除后加减,括号内的要先算。那么就是: 9+8*2-(3+1) =9+16-4计算完优先级高的之后,再计算优先级低的。就是: 9+16-4 =21为了让电脑能够计算出9+8*2-(3+1)=21,我们现在可以开始使用栈。 根据栈的特性(后入先出),我们可以把算式中的字符逐个导入栈,然后根据算数的优先级,先算掉乘除和括号,然后留下加减运算,再把加减算掉,就可以了。 那么,应该怎么做呢? 首先,要创建一个数组来模拟栈,像: char Stack[512];但是,算式中有运算符和数字,怎么区分他们呢? 我们可以定义一个结构体,像: struct Stack { int who; //存储存储在单个结构体内的数据类型是数字(int)还是运算符(char), //0为数字(Int),1为运算符(char) int num; //存储数字 char word; //存储运算符 }假如有一个数字3,那么它放在结构体内,就是: struct Stack A; //创建一个结构体A A.who = 0; //类型为0,即数字 A.num = 3; //数字的值是3 A.word = NULL; //因为不是字符,存储字符的变量可以是空再假如是运算符+,那么它在结构体里就是: struct Stack B; //创建一个结构体B B.who = 1; //类型为1,即符号 B.num = 0; //因为不是数字,存储数字的变量可以是空 B.word = '+'; //字符是+那又因为我们需要一个栈,栈要有长度,我们可以创建一个结构体数组来模拟栈: struct Stack compute[512];我们同样需要一个int变量来存储现在栈顶的位置: int top = 0;在使用栈之前,应该要对栈进行初始化,即清空: for(int i=0;i |
CopyRight 2018-2019 实验室设备网 版权所有 |