C语言利用栈计算算式(表达式) 您所在的位置:网站首页 medical英文读音 C语言利用栈计算算式(表达式)

C语言利用栈计算算式(表达式)

2023-12-12 07:46| 来源: 网络整理| 查看: 265

本文介绍如何通过栈来实现计算算式。

首先

我们要通过多个栈对算式进行操作和计算得出答案,在计算前,我们需要先明确整个计算的流程:

获取用户输入并保存判断算式是否合理一些预处理…(例如:删除空格,大括号中括号全部转为小括号等)并把处理后的式子存入另一个地方根据优先级进行计算,先乘除括号,再加减输出答案

而这其中,至关重要的便是计算这部分了,继续看计算的原理:

通过栈计算算式的原理 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 实验室设备网 版权所有