最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)計算器功能

 更新時間:2022年02月07日 16:05:46   作者:積木41  
這篇文章主要為大家詳細介紹了C++實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)計算器功能的具體代碼,供大家參考,具體內(nèi)容如下

說明:

前面簡單嘗試過計算器,只能支持加減乘除,這次完善了計算器的功能:
支持帶括號的表達式;
支持±*/ (加減乘除)基本運算;
支持^(指數(shù))運算;
支持取負號運算(-num);
支持階乘!。

輸入格式及結(jié)果:

括號和基本運算:

指數(shù)運算:

取負和混合運算:

階乘:

代碼:

//支持帶括號的表達式,支持+-*/、^(指數(shù))、取負、!(階乘)
#include <iostream>
#include <stack>
#include <math.h>

using namespace std;

double inStack(); ? //核心函數(shù),將操作符有序的入棧計算, 最后返回結(jié)果
void calculate(stack<char>& Ope, stack<double>& Num); ?//用來計算加減乘除, 結(jié)果放在數(shù)字棧頂
void factorial(stack<double>& Num); ? //用來計算階乘
int priority(char ope_); ? //用來計算操作符的優(yōu)先級

int main() {
?? ?double result; ? //最后的結(jié)果

?? ?cout << "請輸入:\n";
?? ?result = inStack(); ? //將緩沖區(qū)的操作符和數(shù)字壓入棧?

?? ?cout << "結(jié)果是:\n" << result;

?? ?return 0;
}

double inStack() {
?? ?stack<char> Ope;
?? ?stack<double> Num;
?? ?char ope_;
?? ?double num_;

?? ?while (1) {
?? ??? ?if (cin.peek() >= '0' && cin.peek() <= '9') { ?//判斷下一個是否是數(shù)字
?? ??? ??? ?cin >> num_;
?? ??? ??? ?Num.push(num_); ? //數(shù)字直接入棧
?? ??? ?}
?? ??? ?else {
?? ??? ??? ?cin >> ope_;
?? ??? ??? ?if (ope_ == '=') {
?? ??? ??? ??? ?while (!Ope.empty()) calculate(Ope, Num); //如果符號棧不空,就一直計算
?? ??? ??? ??? ?return Num.top(); ?//如果是等號且符號棧頂為空,就返回數(shù)字棧頂元素
?? ??? ??? ?}
?? ??? ??? ?else if (ope_ == '!') factorial(Num); ?//如果是!就階乘
?? ??? ??? ?else if (ope_ == '(' ||Ope.empty()) Ope.push(ope_); ? ?//如果符號是左括號或符號棧為空直接壓入
?? ??? ??? ?else if (ope_ == ')') { ?//如果是右括號
?? ??? ??? ??? ?while (Ope.top() != '(') calculate(Ope, Num); //一直計算完括號里的
?? ??? ??? ??? ?Ope.pop(); ?//左括號出棧
?? ??? ??? ?}
?? ??? ??? ?else if (priority(Ope.top()) >= priority(ope_)) { ?//如果棧頂符號的優(yōu)先級大于等于當前
?? ??? ??? ??? ?calculate(Ope, Num); ? //計算結(jié)果壓入數(shù)字棧,取出當前棧頂
?? ??? ??? ??? ?Ope.push(ope_); ?//壓入當前符號
?? ??? ??? ?}
?? ??? ??? ?else Ope.push(ope_); ?//否則就壓入符號棧
?? ??? ?}
?? ?}
}

void calculate(stack<char>& Ope, stack<double>& Num) {
?? ?double a, b;

?? ?if (Ope.top() == '-') {
?? ??? ?a = Num.top(); Num.pop();
?? ??? ?Ope.pop(); ? //取出負號
?? ??? ?Num.push(-a); ?//壓入負值
?? ??? ?if (!Num.empty()) {
?? ??? ??? ?if(Ope.empty() || Ope.top() != '(')
?? ??? ??? ??? ?Ope.push('+'); ?//如果前面還有數(shù)字,就壓入+,即變成加負值
?? ??? ?}
?? ?}
?? ?else {
?? ??? ?a = Num.top(); Num.pop();
?? ??? ?b = Num.top(); Num.pop();

?? ??? ?if (Ope.top() == '+') Num.push(b + a);
?? ??? ?else if (Ope.top() == '*') Num.push(b * a);
?? ??? ?else if (Ope.top() == '/') Num.push(b / a);
?? ??? ?else if (Ope.top() == '^') Num.push(pow(b, a));

?? ??? ?Ope.pop();
?? ?}
}

void factorial(stack<double>& Num) {
?? ?int a = static_cast<int>(Num.top());
?? ?int result=1;

?? ?for (int i = 1; i <= a; i++) result *= i;

?? ?Num.push(static_cast<double>(result));
}

int priority(char ope_) {
?? ?if (ope_ == '(') return 0;
?? ?else if (ope_ == '+' || ope_ == '-') return 1;
?? ?else if (ope_ == '*' || ope_ == '/') return 2;
?? ?else if (ope_ == '^') return 3;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++程序代碼的五大內(nèi)存分區(qū)方式

    C++程序代碼的五大內(nèi)存分區(qū)方式

    這篇文章主要介紹了C++程序代碼的五大內(nèi)存分區(qū)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • C++數(shù)據(jù)結(jié)構哈希表詳解

    C++數(shù)據(jù)結(jié)構哈希表詳解

    C++標準庫中使用的unordered_map底層實現(xiàn)是哈希表,下面這篇文章主要給大家介紹了關于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以參考下
    2022-07-07
  • C語言指針的圖文詳解

    C語言指針的圖文詳解

    這篇文章主要為大家介紹了C語言指針,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • CreateCompatibleDC()函數(shù)案例詳解

    CreateCompatibleDC()函數(shù)案例詳解

    這篇文章主要介紹了CreateCompatibleDC()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言詳解實現(xiàn)猜數(shù)字游戲步驟

    C語言詳解實現(xiàn)猜數(shù)字游戲步驟

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來實現(xiàn)這個游戲案例
    2022-07-07
  • 簡單談談C++ 頭文件系列之(bitset)

    簡單談談C++ 頭文件系列之(bitset)

    我們要使用bitset,首先需要包含頭文件bitset。和vector對象不一樣的是bitset類型對象的區(qū)別僅在其長度而不在其類型。在定義bitset的時候,要明確bitset包含了多少位,須在尖括號內(nèi)給出它的長度值。長度值必須定義為整形字面值常量或是已用常量值初始化的整型的const對象
    2017-02-02
  • Qt無邊框窗口拖拽和陰影的實現(xiàn)方法

    Qt無邊框窗口拖拽和陰影的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Qt無邊框窗口拖拽和陰影的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • c++快速排序詳解

    c++快速排序詳解

    快速排序總體思想:先找到一個樞軸,讓他作為分水嶺,通過一趟排序?qū)⒋判虻挠涗浄指畛蓛刹糠?前面一部分都比樞軸小,后面一部分樞軸大,然后又分別對這兩部分記錄繼續(xù)進行遞歸的排序,達到整個序列有序的目的
    2017-05-05
  • PTA刷題C語言編程順序顛倒輸出實現(xiàn)

    PTA刷題C語言編程順序顛倒輸出實現(xiàn)

    本篇文章是在刷PTA題目是遇到的一道題,給定一句話,要求將句中所有單詞順序顛倒輸出,本文來帶你解答,有需要的朋友可以借鑒參考下
    2021-09-09
  • C++特性:迭代器

    C++特性:迭代器

    這篇文章主要介紹了C++特性:迭代器,本文主要通過介紹迭代器,迭代器和指針的區(qū)別,容器迭代器的使用等方面,需要的朋友可以參考下
    2021-06-06

最新評論

乌什县| 呼图壁县| 昌乐县| 巢湖市| 扎鲁特旗| 绿春县| 凤山县| 疏附县| 义乌市| 博罗县| 华容县| 万源市| 商南县| 抚宁县| 镇宁| 屯留县| 平武县| 金阳县| 天祝| 汉沽区| 红河县| 内黄县| 家居| 新源县| 邹城市| 义乌市| 融水| 建昌县| 南投市| 松溪县| 达孜县| 洪泽县| 同仁县| 贵溪市| 罗田县| 曲麻莱县| 永新县| 张掖市| 讷河市| 桓台县| 梨树县|