c语言实现应用栈实现四则运算

时间: 2023-08-17 07:08:13 浏览: 85
可以使用栈来实现四则运算表达式的计算。具体步骤如下: 1. 定义一个栈结构,用于存放运算符和数字。 2. 读入表达式字符串,逐个字符进行处理。 3. 遇到数字字符时,将其转换为数字并压入栈中。 4. 遇到运算符时,从栈中弹出两个数字进行计算,并将结果压入栈中。 5. 最后栈中只剩下一个数字,即为表达式的计算结果。 下面是使用C语言实现的应用栈实现四则运算的示例代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 50 typedef struct { int top; int data[MAX_SIZE]; } Stack; void push(Stack *stack, int value) { if (stack->top == MAX_SIZE) { printf("Error: stack overflow\n"); exit(1); } stack->data[++stack->top] = value; } int pop(Stack *stack) { if (stack->top == -1) { printf("Error: stack underflow\n"); exit(1); } return stack->data[stack->top--]; } int calculate(char *expr) { Stack stack = {-1}; char *p = expr; while (*p != '\0') { if (*p >= '0' && *p <= '9') { int num = 0; while (*p >= '0' && *p <= '9') { num = num * 10 + (*p - '0'); p++; } push(&stack, num); } else if (*p == '+' || *p == '-' || *p == '*' || *p == '/') { int b = pop(&stack); int a = pop(&stack); switch (*p) { case '+': push(&stack, a + b); break; case '-': push(&stack, a - b); break; case '*': push(&stack, a * b); break; case '/': if (b == 0) { printf("Error: divide by zero\n"); exit(1); } push(&stack, a / b); break; } p++; } else { printf("Error: invalid character '%c'\n", *p); exit(1); } } if (stack.top != 0) { printf("Error: invalid expression\n"); exit(1); } return pop(&stack); } int main() { char expr[100]; printf("请输入四则运算表达式:"); scanf("%s", expr); int result = calculate(expr); printf("计算结果:%d\n", result); return 0; } ``` 在程序中,我们定义了一个栈结构 Stack,包含一个指向栈顶的 top 指针和一个数组 data 用于存放栈中的元素。push 函数实现元素的入栈,pop 函数实现元素的出栈。calculate 函数接收一个字符串类型的表达式,逐个字符进行处理,并使用栈来计算表达式的值。 使用示例: ``` 请输入四则运算表达式:3+4*2/(1-5)^2 计算结果:3 ```

相关推荐

用C语言栈结构实现:编程实现四则运算表达式的运算。 输入说明:通过控制台输入四则运算表达式,表达式不超过40个字符,以“=”作为结束符,例如:3 + 2 *(5+2)=。 输入假设:所有操作数均为正数。 输出说明:计算结果从控制台输出给用户,结果精确到小数点后2位。或者输出错误ERROR。 1、创建运算符优先级静态表,并实现运算符优先级查找函数Precede(x, y)。参数x,y是四则运算符,包括+、-、*、\、(、)、=。 2、应用Precede()函数,编写程序计算中缀表达式(一般表达式)的值。 三、问题分析 采用中缀表达式求解过程中,首先需要按照顺序读取数字和操作符,将它们分别保存。如果最先保存的操作符优先级不大于接下来保存的操作符,将一直不被调用指导上一级操作符被调用,满足先进后出的数据结构,所以用栈来保存操作符(本实验称之为符号栈)。对于保存的数字,每次调用操作符时,同时将最后保存的两位数字调用,满足先进后出的数据结构,所以用栈来保存操作符(本实验称之为数字栈)。运算先后由下一个操作符和栈顶操作符的优先级确定,当发现下一个符号的优先级小于栈顶符号的优先级,则需要先进行栈顶符号的运算,此时数字栈的最上面两个数字恰好是该符号的运算数。 测试用例 输入(2.3*4+1.6/2)*2.1-1.3+2.1*2= 输出 The result is:23.9

最新推荐

recommend-type

Scrapy-1.8.2.tar.gz

文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

search-log.zip

搜索记录,包括时间、搜索关键词等,用于PySpark案例练习
recommend-type

6-12.py

6-12
recommend-type

2-6.py

2-6
recommend-type

Scrapy-0.24.5-py2-none-any.whl

文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。