当前位置:首页 > 科技  > 软件

C++实现多功能计算器

来源: 责编: 时间:2024-02-01 12:49:21 365观看
导读在现代编程实践中,C++以其高效性、可扩展性和面向对象的特性被广泛应用。本文旨在介绍如何使用C++编写一个功能更加丰富的计算器程序,该程序不仅能够执行基本的数学运算,还能处理更复杂的表达式,并提供用户友好的交互界面

在现代编程实践中,C++以其高效性、可扩展性和面向对象的特性被广泛应用。本文旨在介绍如何使用C++编写一个功能更加丰富的计算器程序,该程序不仅能够执行基本的数学运算,还能处理更复杂的表达式,并提供用户友好的交互界面。s4J28资讯网——每日最新资讯28at.com

s4J28资讯网——每日最新资讯28at.com

一、功能设计

多功能计算器将包含以下特性:s4J28资讯网——每日最新资讯28at.com

  • 支持加、减、乘、除四则运算。
  • 支持括号,以处理运算优先级。
  • 提供用户输入验证,确保输入的表达式合法。
  • 支持连续运算,即用户可以在一次输入中完成多个运算。
  • 显示运算结果和可能的错误信息。

二、代码实现

为了实现上述功能,我们需要编写一个能够解析和计算数学表达式的程序。下面是一个简化版的C++多功能计算器程序:s4J28资讯网——每日最新资讯28at.com

#include <iostream>  #include <stack>  #include <cctype>  #include <sstream>    using namespace std;    double compute(double a, double b, char op) {      switch (op) {          case '+': return a + b;          case '-': return a - b;          case '*': return a * b;          case '/': return (b != 0) ? a / b : throw invalid_argument("除数不能为0");          default: throw invalid_argument("无效的运算符");      }  }    double evaluateExpression(string s) {      stack<double> values;      stack<char> ops;        for (size_t i = 0; i < s.size(); ++i) {          if (isdigit(s[i])) {              size_t j = i;              while (j < s.size() && (isdigit(s[j]) || s[j] == '.')) j++;              double value = stod(s.substr(i, j - i));              values.push(value);              i = j - 1;          } else if (s[i] == ' ') {              continue;          } else if (s[i] == '(') {              ops.push(s[i]);          } else if (s[i] == ')') {              while (!ops.empty() && ops.top() != '(') {                  double val2 = values.top(); values.pop();                  double val1 = values.top(); values.pop();                  char op = ops.top(); ops.pop();                  values.push(compute(val1, val2, op));              }              if (!ops.empty()) ops.pop(); // 弹出'('          } else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {              while (!ops.empty() &&                     (s[i] == '+' || s[i] == '-' ||                     (s[i] == '*' || s[i] == '/') && (ops.top() == '*' || ops.top() == '/'))) {                  double val2 = values.top(); values.pop();                  double val1 = values.top(); values.pop();                  char op = ops.top(); ops.pop();                  values.push(compute(val1, val2, op));              }              ops.push(s[i]);          }      }        while (!ops.empty()) {          double val2 = values.top(); values.pop();          double val1 = values.top(); values.pop();          char op = ops.top(); ops.pop();          values.push(compute(val1, val2, op));      }        return values.top();  }    int main() {      string expression;      cout << "请输入一个数学表达式: ";      getline(cin, expression);        try {          double result = evaluateExpression(expression);          cout << "结果是: " << result << endl;      } catch (const invalid_argument& e) {          cout << "错误: " << e.what() << endl;      }        return 0;  } 

三、代码解析

  • compute函数:执行基本的数学运算。它接收两个double类型的操作数和一个char类型的运算符,然后根据运算符执行相应的运算并返回结果。
  • evaluateExpression函数:使用两个栈,一个用于值,一个用于运算符,来实现表达式求值。该函数按照运算符的优先级处理表达式,并正确处理括号。
  • main函数:程序的入口点。它首先提示用户输入一个数学表达式,然后调用evaluateExpression函数计算表达式的结果,并将结果打印到屏幕上。如果在计算过程中发生错误,程序会捕获异常并显示错误信息。

四、程序运行

用户可以在控制台中输入一个数学表达式,例如 "3 + 4 * (2 - 1) / 5",然后程序会计算表达式的结果并显示。如果用户输入了一个无效的表达式,程序会显示一个错误信息。s4J28资讯网——每日最新资讯28at.com

五、结论

这个C++多功能计算器程序展示了如何使用栈来处理复杂的数学表达式,并提供了用户友好的交互界面。通过扩展这个程序,可以添加更多的功能,比如支持更多的数学函数、提供图形用户界面等。s4J28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-70430-0.htmlC++实现多功能计算器

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 简述 packages.json 中 41 个常用的配置字段,了解一下还挺有用

下一篇: SpringBoot3虚拟线程 &amp; 反应式(WebFlux) &amp; 传统Tomcat线程池性能对比

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top