女朋友学高数,我花了15分钟用栈给她写了一个计算器

前记

女朋友说:“高数好难,看我最近挺辛苦的,你送我一个礼物给我,让我开心一下吧。你猜猜我想要什么。”

我想了半天,从书到鞋子到电子产品最后到生活用品,感觉什么都不缺,然后和她说:“你说要送啥,我就送啥吧”

她坚持要我猜:“不行,你一定要说一个礼物,并且这个礼物要你亲手做的”

于是,我认真了起来,拿起手机,上淘宝逛了几分钟,但还是没能想出来缺点什么,最后实在没办法了:“这样吧,如果你实在想让我送东西,那我帮你写一个计算器吧”

文章的标题只是噱头,作为热爱交流技术的学习者,我们应该脚踏实地,所以我会保证文章的内容都是干货!

设计原理

根据输入中缀算术表达式,利用栈帧结构,实现转换成后缀表达式输出,再对该后缀表达式求值计算输出结果。最终设计出一个计算器。

适用范围:+ - * / % 整数 小数 负数

设计思想

逻辑设计

  1. 建立两个栈,栈stack和栈Node
  • stack栈用于储存字符数组,以字符形式存储中缀表达式的元素。
  • Node栈用于储存双精度浮点型的数组,用于存储中缀表达式的元素值和各元素运算操作后的值。
  1. 设计以下两个函数和相应的入栈出栈操作。
函数名参数作用
Mtf_function()char *p1,char *mid,char *final用于中缀转后缀
Caculate()stack *M,char *final计算后缀表达式值

Mtf_function()函数设计

(栈为stack)

Created with Raphaël 2.2.0 开始 如果遇到操作数,直接将其输出 左括号? 遇到左括号时将其放入栈中 右括号? 遇到右括号时将,弹出栈的操作符直到遇到左括号 从栈中弹出元素直到遇到更低优先级的元素 yes no yes no

(1)如果遇到操作数,直接将其输出。

(2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时将其放入栈中。

(3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。

(4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) “的情况下我们才弹出” ( “,其他情况我们都不会弹出” ( "。

(5)如果读到了输入的末尾,则将栈中所有元素依次弹出。

Caculate()函数设计

(栈为Node栈)

1)遍历表达式,遇到的数字首先放入栈中

2)接着读到运算操作符如“+”,则弹出栈顶元素和下一个元素,执行相应的运算操作,并将计算结果压入到栈中。

3)读到下一个元素,将其直接放入栈中。

4)读到下一个元素如“”,弹出栈顶元素和下一个元素,执行85,执行相应的运算操作,并将计算结果压入到栈中……以此类推。最后求的值存在栈顶上。

对于小数点的处理算法

  1. 原理:先将小数化为整数,然后除以10的相应权重。建立一个循环,令小数的值sum初始化0,10的相应权重j=0,判断小数点后的字符数组元素是否属于0-9,若是,将小数点后移,sum = sum * 10 + 元素所对应的值,10的相应权重j加一,直到下一个元素不属于0-9。
  2. 具体算法如下
    在这里插入图片描述

对于负号的处理

负号的出现位置是字符数组的第一个元素或左括号后面的元素。为避免与减号“-”混淆,通过判断字符数组的第一个元素或左括号后面的元素是否为“-”找出负号,并替换成“M”。中缀转后缀时若元素为“M”则输出“-”。计算后缀的值时若元素为“M”,则之后的元素值(包括小数)转换为相反数后进行操作。

主程序流程图和各模块调用关系

在这里插入图片描述

物理设计

  1. 基于在内存开辟连续存储空间数组实现,C声明定义字符栈帧结构,包含字符数组,用于中缀转后缀表达式
    在这里插入图片描述

  2. 相应的节点的含义
    在这里插入图片描述

  3. 进出栈操作
    在这里插入图片描述

  4. C声明定义整型栈帧结构,包含整型数组,用于计算后缀表达式求值。
    在这里插入图片描述

  5. 相应的节点的含义
    在这里插入图片描述

  6. 进出栈操作
    在这里插入图片描述

测试

  1. 测试用例
    在这里插入图片描述
    在这里插入图片描述
  2. 测试结果
    在这里插入图片描述

源代码(带注释)

代码写的是C语言版,后续有时间会补上java版
github代码链接

如果有收获?希望老铁们来个双连击,给更多的人看到这篇文章

1、老铁们,关注我的原创微信公众号「程序猿的进阶」,主要是IT与竞赛

2、创作不易,顺便点个赞呗,可以让更多的人看到这篇文章,激励一下我这个小白。

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

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

相关文章

【浅谈】游戏故事编写指南:10个基本步骤

Step1 一个点子/灵感 Step2 故事的起承转合 初步拟定起因、主角、敌人、事件、结局。 Step3 游戏流程图(迭代3~7) 关卡/场景 正式命名(关卡/场景名) 时间(游戏里设定的) 相关剧情 角色成长:这一关的主要玩法 大概通关时间 关卡/场景主…

【Pygame小游戏】剧情流推荐:什么样的游戏剧情能获得大家的喜爱?(决战紫禁之巅 )

前言 哈喽!大家好,我是栗子同学。 剧情是游戏的核心要素,也是游戏沉浸感的主要来源之一。 不论是何种类型游戏,不论其是否以剧情为主要玩点,优秀的剧情总能让一款游戏大放异彩。 我发现🎄 最近哪些剧情…

linux主机宕机排查问题方法

1 排查思路 1.1 查看宕机的时间记录和历史登陆还有重启时间 1)查看历史重启 last reboot last -F |grep crash 2)查看历史异常登录用户 last 1.2 首先查看系统日志 linux下的/var/log/下的log日志,包括message,内核报错日志…

linux主机宕机排查问题的方法

原因分析 服务器分类,web服务器,数据库服务器,文件服务器,中间件,其它服务器。 web服务器分析:常见的web应用apache,nginx,IIS等。 宕机原因很多,cpu,内存&am…

笔记本计算机上安装软件是什么软件,电脑上如何使用剪映App软件_教你在电脑上使用剪映App软件的方法...

剪映App是一款非常实用的轻松制作短视频的软件,有着强大的视频处理功能,可以对视频进行切割、变速、倒放、画布、转场等视频处理。但是剪映APP同在只是应用于智能手机端,电脑端不能够直接使用,那么有什么办法在电脑上使用剪映App&…

TimesNet 代码阅读

主函数 ./run.py args parser.parse_args() args.use_gpu True if torch.cuda.is_available() and args.use_gpu else Falseif args.use_gpu and args.use_multi_gpu:args.dvices args.devices.replace( , )device_ids args.devices.split(,)args.device_ids [int(id_) f…

回归分析处理

线性回归 最小二乘法 对于某数据量 有呈线性关系的输出量 ,且 ,现有对这些数据量的采集序列,这些采集量会存在随机误差,线性回归的目的便是找到保证使误差最小的情况下的回归系数 。 即通过下列方程组求 可利用最小二乘法&a…

Stata作回归分析

Stata将回归分析结果直接导出到Word里 ssc install asdoc, replace写每个命令时前面加上asdoc就可将生成的结果存在word 中 将图片保存成.emf格式,可在word中直接插入。 导入数据 数据描述 . sum#描述数据Variable | Obs Mean Std. Dev. M…

[DataAnalysis]回归分析细节

1、不可解释变差与可解释变差:SSTSSESSR 2、原假设与备择假设 3、回归常见的问题 4、R方和调整后的R方

stata行logistic回归交互项(交互作用)的可视化分析(1)

交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技,几乎在高分的SCI中必出现,因为把人群分为亚组后再进行统计可以增强文章结果的可靠性,不仅如此,交互作用还可以使用来进行数据挖掘。在既往文章中,我们已…

EMGU.CV进阶 (一、银行卡识别)

一、效果 识别出银行卡上的数字,并显示 注:本文所用所有知识,均在入门系列提到过 原图: 效果: 二、模板制作 目的,将10个数分成10个模板 2.1 加载模板 var imgTemplate new Mat("NumberTemplat…

OpenCV之识别银行卡号

一、简介 利用OpenCV所学的简单基础(点我进入),制作一个识别银行卡号的程序。 也可以由深度学习来完成这个任务,具体可以参考: 项目1. PPOCRLabel半自动工具标注自制身份证数据集项目2. 基于OCR身份证号码识别全流程 结果输出如…

Coremail专家观点:如何应对当前AI技术对邮件安全的影响

近日,ChatGPT在互联网上掀起了一阵热潮,目前月活用户超过 1 亿,注册用户之多导致服务器一度爆满。 人工智能的话题遍地可见,如“ChatGPT会取代哪些行业?”、“ChatGPT的实现原理”、“ChatGPT的玩转攻略”等等&#x…

对话式AI系列:任务型多轮对话的实践与探索

移动互联网带来了大数据的普及,摩尔定律预言了计算机硬件的发展,深度学习则借助这阵东风实现了技术上的突破,人工智能成功进入大众视野,并改变了人们的日常生活。 “小X同学,请打开电视”、“小X小X,请播放…

晋飞碳纤科创板IPO被终止:曾拟募资近6亿 凯辉基金是股东

雷递网 雷建平 5月9日 上海晋飞碳纤科技股份有限公司(简称:“晋飞碳纤”)日前IPO被终止。晋飞碳纤是2022年12月底递交招股书,曾准备在科创板上市。 晋飞碳纤原计划募资5.89亿元,其中,3.2亿元用于高性能复合…

三大部门七场面试,终拿字节AI NLP 算法offer

作者 | Maxxiel 编辑 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中 后台回复『面试』加入讨论组交流噢 写在前面 背景美本cs英硕ai在读,无paper无实习无研究无比赛。方向是深度学习、nlp,项目主要是情感分析 和模型蒸馏。leetcode 刷了…

【论文阅读】空间圆形拟合检测新方法

目录 1、空间圆拟合模型1.1、空间平面拟合1.2、空间圆拟合 2、参考文献3、算法伪码4、算法结果 摘 要 根据空间圆中任意两条弦所对应的中垂面与空间圆所处的平面必然相交且交点即为圆心这一空间圆特性,利用空间向量按照最小二乘法推导出圆心计算方程,按照…

海外硕士苏明哲回国后哀叹:我美本英硕,找不到工作很难受

推荐阅读: 欢迎加入我们的架构师社群 阿里跳槽拼多多,80万年薪涨到160万,值不值得去? 一名海外留学生回国后找工作,却屡受打击,感慨自己美本英硕,却找不到工作,内心真的很难受&#…

玩转AI绘图 电脑配置怎么选?

大家好,我是网媒智星,很多小伙伴留言想了解一下AI绘图相关知识,那么,想要玩转AI绘图,电脑配置该怎么选呢? 首先我们了解一下什么叫AI绘图? AI绘图指的是利用人工智能技术实现的自动绘图&#x…

chatgpt赋能python:Python做图:一个强大而灵活的工具

Python做图:一个强大而灵活的工具 Python是一个流行的编程语言, 越来越多的人开始使用它进行数据分析和可视化。 Python做图的功能非常强大,使得它成为许多人的首选工具。在这篇文章中, 我们将讨论 Python做图及其SEO优化。 Python做图的优势 Python做…