成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++實現多功能計算器

開發 前端
本文旨在介紹如何使用C++編寫一個功能更加豐富的計算器程序,該程序不僅能夠執行基本的數學運算,還能處理更復雜的表達式,并提供用戶友好的交互界面。

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

一、功能設計

多功能計算器將包含以下特性:

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

二、代碼實現

為了實現上述功能,我們需要編寫一個能夠解析和計算數學表達式的程序。下面是一個簡化版的C++多功能計算器程序:

#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",然后程序會計算表達式的結果并顯示。如果用戶輸入了一個無效的表達式,程序會顯示一個錯誤信息。

五、結論

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

責任編輯:趙寧寧 來源: 鯊魚編程
相關推薦

2022-07-11 16:19:22

css屬性鴻蒙

2015-08-05 09:30:32

C#下拉式計算器

2010-02-05 18:09:28

C++ Doxygen

2019-03-20 10:47:04

DNS服務器Python

2011-09-16 14:13:15

Windows7計算器

2010-02-03 15:52:55

C++ clock()

2010-02-05 16:25:10

C++ strtok(

2016-12-12 13:41:37

iOS簡易加法開發

2010-01-21 09:11:38

C++編譯器

2010-01-11 11:02:59

Visual C++

2019-03-23 10:26:31

微軟開源圖形

2020-08-12 08:22:37

Python開發個稅

2022-08-09 16:01:24

應用開發鴻蒙

2022-04-01 13:10:20

C++服務器代碼

2009-12-03 11:11:57

2024-05-07 14:40:49

Python兒童計算器

2009-11-19 14:13:37

邊緣路由器

2017-09-05 16:43:47

Electron桌面計算器

2009-12-08 15:51:12

多功能寬帶路由器

2012-10-25 14:52:25

商務簡報器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品黄色 | 97成人精品 | 夜夜骚视频 | 欧美一区二区三区 | 男女免费视频网站 | 国产激情免费视频 | 青娱乐一区二区 | 精品一区二区久久久久久久网站 | 国内精品久久精品 | 国产乱肥老妇国产一区二 | 久久一区二区视频 | 日本亚洲欧美 | 一区二区三区观看视频 | 国产精品综合久久 | 99视频在线免费观看 | 精品日韩在线观看 | 欧美日日 | 成人精品一区二区 | 国产精品久久精品 | 久久av网 | 欧美激情综合五月色丁香小说 | 成人欧美一区二区 | 日韩电影一区二区三区 | 国产精品爱久久久久久久 | 日韩成人精品一区二区三区 | 久久久久久国产精品 | 99视频在线免费观看 | 夜夜久久 | 欧美一区二区三区在线播放 | 欧美高清视频 | 超级乱淫av片免费播放 | 精品国产18久久久久久二百 | 亚洲第一av | 亚洲欧美日韩网站 | 亚洲国产一区二区三区在线观看 | 欧美精品一区二区三区一线天视频 | 婷婷在线视频 | 成人免费一区二区三区视频网站 | www.天天操.com | 亚洲成人精品国产 | 激情五月综合 |