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

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

C++實現多功能計算器

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

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

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

一、功能設計

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

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

二、代碼實現

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

五、結論

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

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

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

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

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

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
Top 主站蜘蛛池模板: 定边县| 河北区| 常德市| 鄯善县| 苗栗市| 河津市| 中卫市| 枣阳市| 德令哈市| 潮州市| 合水县| 营口市| 来安县| 汉源县| 丘北县| 山阳县| 元江| 农安县| 保亭| 台湾省| 攀枝花市| 马边| 师宗县| 凤冈县| 汉川市| 集贤县| 天镇县| 华宁县| 洛宁县| 曲阳县| 蒲城县| 普宁市| 邮箱| 平顶山市| 乌海市| 东乡县| 且末县| 平潭县| 得荣县| 喜德县| 宁夏|