实验5-表达式求值算法

 要求:

优化表达式求值算法,使得该算法可实现多位整数甚至浮点数的四则运算,并写程序进行验证

一下代码由AI生成,这个作业我是实在不想做了,老师上课讲的时候也是一笔带过,然后就要求我们自己动手写......

代码:

#include <stdio.h>
#include <stdlib.h>typedef struct {double *base;double *top;int stacksize;
} SqStackOPND;typedef struct {char *base;char *top;int stacksize;
} SqStackOPTR;void initStackOPND(SqStackOPND *S) {S->base = (double *) malloc(100 * sizeof(double));S->top = S->base;S->stacksize = 100;
}void initStackOPTR(SqStackOPTR *S) {S->base = (char *) malloc(100 * sizeof(char));S->top = S->base;S->stacksize = 100;
}void pushOPND(SqStackOPND *S, double e) {if (S->top - S->base == S->stacksize) {S->base = (double *) realloc(S->base, (S->stacksize + 10) * sizeof(double));S->top = S->base + S->stacksize;S->stacksize += 10;}*(S->top) = e;(S->top)++;
}void pushOPTR(SqStackOPTR *S, char e) {if (S->top - S->base == S->stacksize) {S->base = (char *) realloc(S->base, (S->stacksize + 10) * sizeof(char));S->top = S->base + S->stacksize;S->stacksize += 10;}*(S->top) = e;(S->top)++;
}double popOPND(SqStackOPND *S) {(S->top)--;return *(S->top);
}char popOPTR(SqStackOPTR *S) {(S->top)--;return *(S->top);
}double getTopOPND(SqStackOPND S) {double e = *(S.top - 1);return e;
}char getTopOPTR(SqStackOPTR S) {char e = *(S.top - 1);return e;
}double calculate(double a, char theta, double b) {switch (theta) {case '+':return a + b;case '-':return a - b;case '*':return a * b;case '/':return a / b;default:exit(-1);}
}char precedence(char Aop, char Bop) {if ((Aop == '+' || Aop == '-') && (Bop == '+' || Bop == '-' || Bop == ')' || Bop == '#')) {return '>';} else if ((Aop == '+' || Aop == '-') && (Bop == '*' || Bop == '/' || Bop == '(')) {return '<';} else if ((Aop == '*' || Aop == '/') && (Bop == '+' || Bop == '-' || Bop == '*' || Bop == '/' || Bop == ')' || Bop == '#')) {return '>';} else if ((Aop == '*' || Aop == '/') && (Bop == '(')) {return '<';} else if (Aop == '(' && (Bop == '+' || Bop == '-' || Bop == '*' || Bop == '/' || Bop == '(')) {return '<';} else if (Aop == '(' && Bop == ')') {return '=';} else if ((Aop == '+' || Aop == '-' || Aop == '*' || Aop == '/' || Aop == ')') && Bop == '(') {return '<';} else if (Aop == '#' && Bop == '#') {return '=';} else {return '<';}
}
//测试(2.8+2.2)*(1.4+1.6)/5.0=3
int main() {SqStackOPND OPND;SqStackOPTR OPTR;double a, b, d;char c, theta;initStackOPND(&OPND);initStackOPTR(&OPTR);pushOPTR(&OPTR, '#');printf("Enter expression ended with '#':");scanf("%c", &c);// 读取多位数while (c != '#' || getTopOPTR(OPTR) != '#') {if ((c >= '0' && c <= '9') || c == '.') {ungetc(c, stdin);scanf("%lf", &d);pushOPND(&OPND, d);c = getchar();} else {switch (precedence(getTopOPTR(OPTR), c)) {case '<':pushOPTR(&OPTR, c);c = getchar();break;case '=':popOPTR(&OPTR);c = getchar();break;case '>':theta = popOPTR(&OPTR);b = popOPND(&OPND);a = popOPND(&OPND);pushOPND(&OPND, calculate(a, theta, b));break;}}}printf("%.2lf\n", getTopOPND(OPND));return 0;
}

SampleInput

(2.8+2.2)*(1.4+1.6)/5.0+2+5*2#

SampleOutput

Enter expression ended with '#':(2.8+2.2)*(1.4+1.6)/5.0+2+5*2#
15.00

最后,AI真tm香啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis的List详细介绍

Redis的列表&#xff08;List&#xff09;是一个由字符串组成的双向链表。以下是关于Redis列表的一些详细介绍&#xff1a; 基本概念&#xff1a; Redis的列表数据构造模式是一个双向链表&#xff0c;这意味着你可以在表头或表尾追加元素&#xff0c;从表头或表尾弹出元素。每个…

Java实现ATM机模拟系统(Week2)

目录 前言 项目规划&#xff08;第二周&#xff09; 具体实现 用户大类 AccountOperations接口 UserOperations接口 Operations类&#xff08;实现类&#xff09; Account类 User类 Area类 &#xff08;父类&#xff09; 货币大类 Money类&#xff08;抽象类&…

redis的Set详细介绍

Redis的集合&#xff08;Set&#xff09;是由字符串组成的无序集合&#xff0c;和列表&#xff08;List&#xff09;不同的是&#xff0c;集合中的元素是唯一的&#xff0c;不存在重复的元素。以下是关于Redis集合的一些详细介绍&#xff1a; 基本概念&#xff1a; Redis的集合…

vue + koa + Sequelize + 阿里云部署 + 宝塔:宝塔数据库连接

之前文章已经介绍了宝塔上传前后端代码并部署&#xff0c;不清楚的请看这篇文章&#xff1a; vue koa 阿里云部署 宝塔&#xff1a;宝塔前后端部署 下面是宝塔创建数据库&#xff1a; 我用的 koa Sequelize 连接的数据库&#xff0c;Sequelize 非常适合前端使用&#xf…

【Python】字符串处理技巧大揭秘:从基础到高级

欢迎来CILMY23的博客 本篇主题为 字符串处理技巧大揭秘&#xff1a;从基础到高级 个人主页&#xff1a;CILMY23-CSDN博客 Python系列专栏&#xff1a;http://t.csdnimg.cn/HqYo8 上一篇博客&#xff1a; http://t.csdnimg.cn/5NRlT C语言专栏&#xff1a; http://t.csdnim…

5543: 【J1】【vector】【pair】星空时代大比武

题目描述 星空时代人类发明了很多太空母舰用来开拓家园&#xff0c;现有2n&#xff08;n≤10&#xff09;艘太空母舰进行战斗力大小比较&#xff0c;角逐出谁是最强太空母舰。比赛规则如下&#xff1a;1 号太空母舰和 2 号太空母舰比赛&#xff0c;胜者晋级。3 号太空母舰和 4…

虚幻UE5智慧城市全流程开发教学

一、背景 这几年&#xff0c;智慧城市/智慧交通/智慧水利等飞速发展&#xff0c;骑士特意为大家做了一个这块的学习路线。 二、这是学习大纲 1.给虚幻UE5初学者准备的智慧城市/数字孪生蓝图开发教程 https://www.bilibili.com/video/BV1894y1u78G 2.UE5数字孪生蓝图开发教学…

Docker 安装 Linux 系统可视化监控 Netdata

docker 安装 netdata 前提准备Docker 两种方式部署 Netdata1、使用 docker run 命令运行 netdata 服务2、使用 docker compose 运行 netdata 服务 Netdata 服务可视化界面Netdata 汉化处理 前提准备 说明&#xff1a;此处使用 windows11 安装的 docker desktop & wsl2/apli…

大语言模型LLM《提示词工程指南》学习笔记01

文章目录 大语言模型LLM《提示词工程指南》学习笔记01以下是使用不同LLM提供程序时会遇到的常见设置&#xff1a;标准提示词应该遵循以下格式&#xff1a;提示词要素 大语言模型LLM《提示词工程指南》学习笔记01 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新…

linux E: You don‘t have enough free space in /var/cache/apt/archives/. 空间不足

问题&#xff1a; 在ubuntu的亚马逊云计算机平台上&#xff0c;apt install的时候&#xff0c;报错&#xff0c;空间不足 解决方法&#xff1a; 查看磁盘情况&#xff1a; 设置自动清理&#xff1a; sudo apt-get autoclean sudo apt-get clean 解决&#xff1a;

RabbitMQ3.13.x之十_流过滤的内部结构设计与实现

RabbitMQ3.13.x之十_流过滤的内部结构设计与实现 文章目录 RabbitMQ3.13.x之十_流过滤的内部结构设计与实现1. 概念1. 消息发布2. 消息消费 2. 流的结构1. 在代理端进行过滤2. 客户端筛选3. JavaAPI示例4. 流过滤配置5. AMQP上的流过滤6. 总结 3. 相关链接 1. 概念 流过滤的思…

前端与后端协同:实现Excel导入导出功能

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

[实战经验]Mybatis的mapper.xml参数#{para}与#{para, jdbcType=BIGINT}有什么区别?

在MyBatis框架中&#xff0c;传入参数使用#{para}和#{para, jdbcTypeBIGINT}的有什么区别呢&#xff1f; #{para}&#xff1a;这种写法表示使用MyBatis自动推断参数类型&#xff0c;并根据参数的Java类型自动匹配数据库对应的类型。例如&#xff0c;如果参数para的Java类型是Lo…

RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)

我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客&#xff1a;RSIC-V工具链介绍及其安装教程 - 风正豪 &#xff08;大佬的博客写的非常详细&#xff0c;唯一不足就是 sudo make linux -jxx 是全部小写。&#xff09; 工具链前前后后我装了…

非关系型数据库--------------------Redis 群集模式

目录 一、集群原理 二、集群的作用 &#xff08;1&#xff09;数据分区 &#xff08;2&#xff09;高可用 Redis集群的作用和优势 三、Redis集群的数据分片 四、Redis集群的工作原理 五、搭建redis群集模式 5.1启用脚本配置集群 5.2修改集群配置 5.3启动redis节点 5…

自动化运维(八)Ansible 之核心模块

Ansible 的核心模块是 Ansible 默认提供的一组最基本和常用的模块。这些模块涵盖了各种常见的任务,如文件管理、包管理、系统配置等。以下是一些 Ansible 的核心模块: 1、命令执行模块: command: 用于在远程主机上执行简单的命令。它不支持管道、重定向和通配符等 shell 功能…

Django--admin 后台管理站点

Django最大的优点之一&#xff0c;就是体贴的提供了一个基于项目model创建的一个后台管理站点admin。这个界面只给站点管理员使用&#xff0c;并不对大众开放。虽然admin的界面可能不是那么美观&#xff0c;功能不是那么强大&#xff0c;内容不一定符合你的要求&#xff0c;但是…

dm8 备份与恢复

dm8 备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…

非关系型数据库——Redis基本操作

目录 一、Redis数据库常用命令 1.Set——存放数据 2.Get——获取数据 3.Keys——获取符合条件的键值 4.Exists——判断键值是否存在 5.Del——删除指定键值 6.Type——获取键值对应的类型 7.Rename——对已有键值重命名&#xff08;覆盖&#xff09; 8.Renamenx——对…

【蓝桥杯嵌入式】13届程序题刷题记录及反思

一、题目分析 考察内容&#xff1a; led按键&#xff08;短按&#xff09;PWM输出&#xff08;PA1&#xff09;串口接收lcd显示 根据PWM输出占空比调节&#xff0c;高频与低频切换 串口接收&#xff08;指令解析&#xff09;【中断接收】 2个显示界面 led灯闪烁定时器 二…