日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

C++實(shí)現(xiàn)多功能計(jì)算器

來源: 責(zé)編: 時間:2024-02-01 12:49:21 242觀看
導(dǎo)讀在現(xiàn)代編程實(shí)踐中,C++以其高效性、可擴(kuò)展性和面向?qū)ο蟮奶匦员粡V泛應(yīng)用。本文旨在介紹如何使用C++編寫一個功能更加豐富的計(jì)算器程序,該程序不僅能夠執(zhí)行基本的數(shù)學(xué)運(yùn)算,還能處理更復(fù)雜的表達(dá)式,并提供用戶友好的交互界面

在現(xiàn)代編程實(shí)踐中,C++以其高效性、可擴(kuò)展性和面向?qū)ο蟮奶匦员粡V泛應(yīng)用。本文旨在介紹如何使用C++編寫一個功能更加豐富的計(jì)算器程序,該程序不僅能夠執(zhí)行基本的數(shù)學(xué)運(yùn)算,還能處理更復(fù)雜的表達(dá)式,并提供用戶友好的交互界面。pHT28資訊網(wǎng)——每日最新資訊28at.com

pHT28資訊網(wǎng)——每日最新資訊28at.com

一、功能設(shè)計(jì)

多功能計(jì)算器將包含以下特性:pHT28資訊網(wǎng)——每日最新資訊28at.com

  • 支持加、減、乘、除四則運(yùn)算。
  • 支持括號,以處理運(yùn)算優(yōu)先級。
  • 提供用戶輸入驗(yàn)證,確保輸入的表達(dá)式合法。
  • 支持連續(xù)運(yùn)算,即用戶可以在一次輸入中完成多個運(yùn)算。
  • 顯示運(yùn)算結(jié)果和可能的錯誤信息。

二、代碼實(shí)現(xiàn)

為了實(shí)現(xiàn)上述功能,我們需要編寫一個能夠解析和計(jì)算數(shù)學(xué)表達(dá)式的程序。下面是一個簡化版的C++多功能計(jì)算器程序:pHT28資訊網(wǎng)——每日最新資訊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("除數(shù)不能為0");          default: throw invalid_argument("無效的運(yùn)算符");      }  }    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 << "請輸入一個數(shù)學(xué)表達(dá)式: ";      getline(cin, expression);        try {          double result = evaluateExpression(expression);          cout << "結(jié)果是: " << result << endl;      } catch (const invalid_argument& e) {          cout << "錯誤: " << e.what() << endl;      }        return 0;  } 

三、代碼解析

  • compute函數(shù):執(zhí)行基本的數(shù)學(xué)運(yùn)算。它接收兩個double類型的操作數(shù)和一個char類型的運(yùn)算符,然后根據(jù)運(yùn)算符執(zhí)行相應(yīng)的運(yùn)算并返回結(jié)果。
  • evaluateExpression函數(shù):使用兩個棧,一個用于值,一個用于運(yùn)算符,來實(shí)現(xiàn)表達(dá)式求值。該函數(shù)按照運(yùn)算符的優(yōu)先級處理表達(dá)式,并正確處理括號。
  • main函數(shù):程序的入口點(diǎn)。它首先提示用戶輸入一個數(shù)學(xué)表達(dá)式,然后調(diào)用evaluateExpression函數(shù)計(jì)算表達(dá)式的結(jié)果,并將結(jié)果打印到屏幕上。如果在計(jì)算過程中發(fā)生錯誤,程序會捕獲異常并顯示錯誤信息。

四、程序運(yùn)行

用戶可以在控制臺中輸入一個數(shù)學(xué)表達(dá)式,例如 "3 + 4 * (2 - 1) / 5",然后程序會計(jì)算表達(dá)式的結(jié)果并顯示。如果用戶輸入了一個無效的表達(dá)式,程序會顯示一個錯誤信息。pHT28資訊網(wǎng)——每日最新資訊28at.com

五、結(jié)論

這個C++多功能計(jì)算器程序展示了如何使用棧來處理復(fù)雜的數(shù)學(xué)表達(dá)式,并提供了用戶友好的交互界面。通過擴(kuò)展這個程序,可以添加更多的功能,比如支持更多的數(shù)學(xué)函數(shù)、提供圖形用戶界面等。pHT28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-70430-0.htmlC++實(shí)現(xiàn)多功能計(jì)算器

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 簡述 packages.json 中 41 個常用的配置字段,了解一下還挺有用

下一篇: SpringBoot3虛擬線程 &amp; 反應(yīng)式(WebFlux) &amp; 傳統(tǒng)Tomcat線程池性能對比

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機(jī)將會在第三季度上市,如今隨著時間臨近,新機(jī)的各種消息也開始浮出水面。據(jù)悉,這款新機(jī)將會被命名為&ldquo;On
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯,每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來隨著數(shù)字經(jīng)濟(jì)的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對用戶核心關(guān)切的增長問題等則沒有提供更好的解法。在Saa
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • iQOO Neo8 Pro搶先上架:首發(fā)天璣9200+ 安卓性能之王

    經(jīng)過了一段時間的密集爆料,昨日iQOO官方如期對外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級性能調(diào)校的作品。隨著發(fā)布時
  • 質(zhì)感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機(jī)型都保持著較為均衡的產(chǎn)品體驗(yàn),歷來都是2K價位的明星機(jī)型,去年推出的OPPO K10和OPPO K10 Pro兩款機(jī)型憑借各自的出色配置,堪稱有
  • 上海舉辦人工智能大會活動,建設(shè)人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發(fā)展盛典人工
Top 主站蜘蛛池模板: 芦溪县| 锦屏县| 西丰县| 凤台县| 惠水县| 南皮县| 永修县| 沂南县| 虹口区| 囊谦县| 花垣县| 明光市| 辽中县| 大渡口区| 如皋市| 岳西县| 弥勒县| 大余县| 哈密市| 博野县| 三明市| 连城县| 电白县| 叙永县| 巴里| 彰武县| 三明市| 平果县| 洱源县| 咸丰县| 阳西县| 玉溪市| 桂平市| 淮安市| 兰州市| 象州县| 深水埗区| 刚察县| 湘乡市| 延长县| 汉寿县|