前记

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

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

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

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

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

设计原理

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

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

设计思想

逻辑设计

  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、创作不易,顺便点个赞呗,可以让更多的人看到这篇文章,激励一下我这个小白。

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

  1. 女朋友学高数,我花了 15 分钟用栈给她写了一个计算器 | 原力计划

    作者 | 天才程序YUAN 责编 | 夕颜 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 前记 女朋友说:"高数好难,看我最近挺辛苦的,你送我一个礼物给 ...

  2. AI学高数达到MIT本科水平,学了微积分线性代数概率论等6门课,不光能做题还能出题...

    梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 让语言模型做数学题,有多难? 强如GPT-3,在9-12岁的小学数学上,第一次才考20多分. 去年底GPT-3用上新方法努力了很久终于拿到5 ...

  3. 大学计算机专业学高数吗,数学差‍的学生,大学最好别选这几个专业,不然将来恐难毕业...

    文/妮妮 高考"三分考,七分报",填报志愿的重要性不言而喻,而报考最重要两项就是大学和专业. 在高考之前,同学们有想过自己想学什么专业,或是对哪方面比较感兴趣的吗?大多数学生选择专 ...

  4. 计算机专业不用学数学的有什么,大学里不用学数学的专业,不想学高数的看过来,你的专业是哪个...

    语文.数学和英语是从小到大的学科里不可缺少的存在,不管是小学.初中还是高中,这三个学科都是最基本的学科,尤其是到了高中的时候,语数英三个学科更加成了重中之重. 但是,很多学生并不是每个学科都能学好的, ...

  5. 学高数b能考计算机吗,经验 | 辞职考研上岸中南计算机

    原标题:经验 | 辞职考研上岸中南计算机 1.学长自述 a.2017辞职考研,负债上万.2018.2.3开始准备,20192.29上岸. b.初试400,政治77,英语76,高数117,数据结构130 ...

  6. 大专的计算机专业要学高数吗,普通本、专科“数学”不好,3个专业不建议报,“没出路”!...

    原标题:普通本.专科"数学"不好,3个专业不建议报,"没出路"! 很多高考生来说数学是一个老大难的科目.有很多同学反映,当初以为报这个专业再也不用学数学,可是没 ...

  7. python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)

    栏目「有学问」是UBook知识在线的趣味科普专栏,专注于分享有趣好玩的科普知识,旨在发现更多有趣好玩的冷知识,发掘更多生活中的趣味. 自从上了大学以后,各种高数线代数学课防不胜防,有人说,如果你觉得高 ...

  8. 从封面开始学高数 #1

    那个  大家好哇 好的我们直接开始 首先我用的是这一版高数书 同济大学数学系编的 第七版 高等数学上册 是十二五普通高等教育本科国家级规划教材 定价47.60一本 给你们看一眼条形码 封面是环保的绿色 ...

  9. 从封面开始学高数 #2

    不废话直接开始 今天的高数书摸起来依旧那么有感觉 让我们继续看看映射之后又讲了什么 ################################ 函数 函数,大家肯定都听过,但是要具体描述是个啥, ...

最新文章

  1. try-catch-finally中的4个巨坑,老程序员也搞不定!
  2. LeetCode Largest Divisible Subset(动态规划)
  3. 数据中心SDN技术发展应用之MP-BGP
  4. 以 B2C 和 B2B 方式启动 SAP Spartacus 的批处理文件
  5. 算法题目——Problem A 二进制(北邮机试)
  6. WordPress 多功能响应式-CorePress博客主题
  7. Python String:一文彻底粉碎字符串
  8. 10个JavaScript常见BUG及修复方法
  9. 国产操作系统之优麒麟安装
  10. Python常用的19个工具包汇总
  11. 2.4G超低功耗射频芯片NRF24L01P和SI24R1和CI24R1的区别
  12. 密码算法测试向量——Cipher MAC SM4
  13. 金叉和死叉看哪几条线?股票macd金叉和死叉怎么看?
  14. 清华软院保研机试总结
  15. iOS/Mac OS X 汉字转拼音
  16. 宁德时代与蔚来签署全面战略合作协议;中国通信服务委任闫栋为公司总裁 | 美通企业日报...
  17. k3cloud开发实例
  18. 《WinForm开发系列之控件篇》Item2 BindingNavigator
  19. 生态 | 南大通用GBase 8a与Suma完成兼容性互认证
  20. 研招网官方:关于考研报名的提醒!

热门文章

  1. eNSP 错误代码40解决办法
  2. 多因子选股模型python_多因子选股模型构建初尝试(更新中)
  3. 初探多因子选股:多因子筛选与因子正交化
  4. XJOI 3879 怪兽繁殖
  5. FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perfo
  6. 【B类竞赛】第十一届山东省大学生程序设计竞赛 比赛经历
  7. Word中公式与序号对齐
  8. 【校招VIP】产品经理面试之回答技巧
  9. Reverse Engineering AI Algorithms with XAI
  10. 企业微信社群运营案例拆解:瑞幸咖啡