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

當前位置:首頁 > 科技  > 軟件

C++實現多功能計算器

來源: 責編: 時間:2024-02-01 12:49:21 243觀看
導讀在現代編程實踐中,C++以其高效性、可擴展性和面向對象的特性被廣泛應用。本文旨在介紹如何使用C++編寫一個功能更加豐富的計算器程序,該程序不僅能夠執行基本的數學運算,還能處理更復雜的表達式,并提供用戶友好的交互界面

在現代編程實踐中,C++以其高效性、可擴展性和面向對象的特性被廣泛應用。本文旨在介紹如何使用C++編寫一個功能更加豐富的計算器程序,該程序不僅能夠執行基本的數學運算,還能處理更復雜的表達式,并提供用戶友好的交互界面。qhF28資訊網——每日最新資訊28at.com

qhF28資訊網——每日最新資訊28at.com

一、功能設計

多功能計算器將包含以下特性:qhF28資訊網——每日最新資訊28at.com

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

二、代碼實現

為了實現上述功能,我們需要編寫一個能夠解析和計算數學表達式的程序。下面是一個簡化版的C++多功能計算器程序:qhF28資訊網——每日最新資訊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",然后程序會計算表達式的結果并顯示。如果用戶輸入了一個無效的表達式,程序會顯示一個錯誤信息。qhF28資訊網——每日最新資訊28at.com

五、結論

這個C++多功能計算器程序展示了如何使用棧來處理復雜的數學表達式,并提供了用戶友好的交互界面。通過擴展這個程序,可以添加更多的功能,比如支持更多的數學函數、提供圖形用戶界面等。qhF28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-70430-0.htmlC++實現多功能計算器

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

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

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

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 深度探索 Elasticsearch 8.X:function_score 參數解讀與實戰案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數和函數讓我們可以根據需求靈活地進行設置。近期
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 四年持續更迭堅持探索行業無人之境,HarmonyOS 4帶來五大升級多項創新

    除了華為每年新發布的旗艦手機系列,上億花粉更加期待鴻蒙系統每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式發布,這也是該系統歷經四年的再
  • 榮耀Magicbook V 14 2021曙光藍版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
Top 主站蜘蛛池模板: 犍为县| 宝清县| 曲水县| 屯昌县| 开化县| 台安县| 白玉县| 镇平县| 武清区| 萨迦县| 芜湖市| 农安县| 湟中县| 泰顺县| 攀枝花市| 望奎县| 合阳县| 博湖县| 冷水江市| 宜兰市| 汝州市| 色达县| 读书| 乌审旗| 宁海县| 乌拉特前旗| 卫辉市| 调兵山市| 虎林市| 台中市| 舞阳县| 泰顺县| 西乌| 会同县| 新巴尔虎左旗| 台中市| 长丰县| 城固县| 郎溪县| 维西| 新民市|