本文实例讲述了PHP实现的简单四则运算计算器功能。分享给大家供大家参考,具体如下:

php实现一个简单的四则运算计算器(还不支持括号的优先级)。利用栈这种数据结构来计算表达式很赞。

这里可以使用栈的结构,由于php的数组“天然”就有栈的特性,这里直接就利用了数组。当然可以使用栈结构写,道理一样的。

前辈(波兰一位科学家)在计算带有括号的四则表达式,利用逆波兰算法(后缀表达法)。简直神了!!其实代码code并不难,难的是算法的指导,要先理解算法,才能编码。<?php $num_arr = array();// 声明数字栈$op_arr = array();// 声明符号栈$str = "10+6*2-18/2-2";preg_match_all("/./", $str, $arr);// 把运算串分解成每个字符到$arr数组$str_arr = $arr[0];$length = count($str_arr);$pre_num = "";// 开始入栈for($i=0; $i<$length; $i++){ $val = $str_arr[$i]; // 数字 if (is_numeric($val)){ $pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数) if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈 array_push($num_arr, $pre_num); $pre_num = ""; } // 符号判断优先级,选择是否入栈 } else if (isOper($val)){ if (count($op_arr)>0){ // 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈 while (end($op_arr) && priority($val) <= priority(end($op_arr))){ calc($num_arr, $op_arr); } } array_push($op_arr, $val); }}//echo "

";//print_r($num_arr);//print_r($op_arr);// 计算栈里剩余的while(count($num_arr)>0){  calc($num_arr, $op_arr);  if (count($num_arr)==1){    $result = array_pop($num_arr);    break;  }}echo $str," = ", $result;// 计算,获取数字栈的两个数,符号栈顶的运算符function calc(&$num_arr, &$op_arr){  if (count($num_arr)>0){    $num1 = array_pop($num_arr);    $num2 = array_pop($num_arr);    $op = array_pop($op_arr);    if ($op=="*") $re = $num1*$num2;    if ($op=="/") $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数    if ($op=="+") $re = $num2+$num1;    if ($op=="-") $re = $num2-$num1;    array_push($num_arr, $re);  }}// 获取优先级function priority($str){  if ($str == "*" || $str == "/"){    return 1;  } else {    return 0;  }}// 判断是否是运算符function isOper($oper){  $oper_array = array("+","-","*","/");  if (in_array($oper, $oper_array)){    return true;  }  return false;}

运行结果:10+6*2-18/2-2 = 11

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器:http://tools.jb51.net/jisuanqi/jsq

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》

希望本文所述对大家PHP程序设计有所帮助。

php四则运算出题器_PHP实现的简单四则运算计算器功能示例相关推荐

  1. php计算器按钮功能,PHP简单在线计算器功能示例

    PHP简单在线计算器功能示例 PHP可以被嵌入于HTML语言,它相对于其他语言.编辑简单,实用性强,更适合初学者.下面是小编分享的PHP简单在线计算器功能示例,一起来看一下吧. 简单的计算器(www. ...

  2. php 在线数据 计算器,PHP实现的简单在线计算器功能示例

    本文实例讲述了PHP实现的简单在线计算器功能.分享给大家供大家参考,具体如下: 简单的计算器 //如果用户单击了计算按钮才存在表单变量,才能接收表单数据和对数据进行验证 //以下if语句判断是否将表单 ...

  3. php四则运算出题器_php实现简单四则运算器

    本文实例为大家分享了php实现简单四则运算器的具体代码,供大家参考,具体内容如下 前端代码 : php计算器 请输入num1: 请选择运算符: + - * / % 请输入num2: 后台: php计算 ...

  4. php四则运算出题器_php 四则运算

    Php 四则运算算法 源代码 /** * php 实现四则运算 * author 李磊 */ $str = "+(2-1.2)/2*8"; if($str[0] == '+' || ...

  5. c语言自动出题器,c语言四则运算出题器

    c语言四则运算出题器,绝对的原创,绝对的无错误,绝对用最简单的知识完成难得问题. #include #include #include int a,n,nright=0,nwrong=0,flag5, ...

  6. php四则运算出题器

    php四则运算出题器 要求 1.可以将出题结果导出到EXCEL文件 2.用户可以指定题目的数量 3.用户可指定操作数的数目(至少二个.至多四个),如果指定的操作数超过2个,应该随机出现括号用于改变运算 ...

  7. C语言自动出十题四则运算,c语言四则运算出题器

    <c语言四则运算出题器>由会员分享,可在线阅读,更多相关<c语言四则运算出题器(16页珍藏版)>请在人人文库网上搜索. 1.include#include#includeint ...

  8. c# 算式 计算器_C#实现的简单整数四则运算计算器功能示例

    C#实现的简单整数四则运算计算器功能示例 发布时间:2020-08-24 00:11:14 来源:脚本之家 阅读:131 本文实例讲述了C#实现的简单整数四则运算计算器功能.分享给大家供大家参考,具体 ...

  9. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

最新文章

  1. 谷歌推出新模型「pQRNN」,少量参数下进行文本分类,性能堪比BERT
  2. C# linq创建嵌套组
  3. Lesson 16.2 图像的基本操作
  4. TextMate 通用快捷键
  5. c++STL容器的stack
  6. 关于 AfxSocketInit() 的使用
  7. ODB——基于c++的ORM映射框架尝试(使用)
  8. 利用Python爬取网易上证所有股票数据(代码
  9. jsp input maxlength无效_出现这3个现象, 说明你的孩子在无效学习! 家长们: 原来如此...
  10. 九、Linux的网络配置
  11. ffmpeg之vs编译
  12. 《剑指offer》面试题22——栈的压入、弹出序列(C++)
  13. mac安装PS cc2019 error问题汇总
  14. 经典网页设计:30个独具匠心的单页网站设计案例
  15. 优雅的解决Springboot:BindingException: Invalid bound statement (not found):异常
  16. 实现内网穿透的两种方式
  17. Android Project Butter 黄油计划
  18. ubuntu18.04添加网络共享文件夹
  19. 如何从抖音引流至微信小程序?
  20. 搭建基础后台框架及整合Swagger2及整合mybatisPlus代码器

热门文章

  1. Mysql中default分区,MySQL中的分区(六)KEY分区
  2. Homebrew 更换阿里云镜像源
  3. CentOS 搭建 Git 服务器
  4. Java中数据类型转换大全(个人总结)
  5. 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第23章 XWindows设定介绍 笔记
  6. 云计算学习(5-1)云平台产品介绍-华为的FusionCloud产品
  7. 一个小小的抽奖活动测试脚本(python2.7)
  8. javascript的内置对象
  9. js获取页面宽度给JS div设宽度
  10. Jaxb2 转换XML文档