C 實現四則運算

2021-09-21 14:44:55 字數 1155 閱讀 6274

表示式計算思路:

1)準備兩個棧,乙個資料棧,乙個運算子棧。

反覆讀取表示式:(2、3、4)

2)如果是數,入數棧。

3)如果是左括號,入運算子棧。如果是右括號,反覆從運算子棧頂取運算符合從資料棧中取兩個資料進行計算,並把運算結果入資料棧,直到遇到棧頂或左括號為止。

4)如果是運算子,先跟棧頂的運算子比,只要不高於棧頂優先順序,就取出棧頂的運算子和資料棧中的兩個資料進行計算,把結果入資料棧,直到高於棧頂運算子優先順序或者遇到左括號或者運算子棧空為止。

5)處理棧中的運算子:取出棧頂的運算子和資料棧的兩個資料進行運算,並把結果入資料棧,直到運算子棧空為止。

6)這時資料棧中的資料就是計數結果。

#include#include#include#includeusing namespace std;

class exp

while(readop()); //讀取運算子

calremain();

return v;

}void readdata() //讀取資料可能遇到'('

ops.push(op);

}ds.push(v);

}void skipspace()

}bool readop() //讀取運算子可能遇到『)』或者『\n』

ops.pop(); //丟棄棧中的『(』

}if(op == '\n') return false;

if(strchr("+-*/",op) == null)

while(!ops.empty() && ops.top() != '(' && prior(op,ops.top()))

ops.push(op); //預算符入棧

return true;

}void calremain()

if(ds.size()!= 1)

v = ds.top();

ds.pop();

}double cal(double lh, char op, double rh)

bool prior(char op1, char op2) // op1的優先順序是否高於op2

};int main ()

catch(const string& e)

}

實現四則運算

總結最近在看資料結構,遇到第乙個實際棧的應用,記錄 將平時的四則運算表示式又稱為中綴表示式轉化為字尾表示式。遇數字輸出,遇符號進棧,符號優先順序低於棧當前符號則輸出,輸出直到同等優先順序符號。例 9 3 1 2 輸出 棧 9 in 9 in 9 3 9 3 in 9 3 1 9 3 1 in 右括號...

C 四則運算

一 問題及 檔名稱 兩個浮點數的四則運算 02.作 者 李欽 03.完成日期 2016 年 3 月 12 日 04.版 本 號 v1.0 05.對任務及求解方法的描述部分 06.輸入描述 07.問題描述 略 08.程式輸出 略 09.問題分析 略 10.演算法設計 略 11.includevoid ...

四則運算(C)

部落格班級 作業要求 homework 11376 作業目標 寫乙個能自動生成小學四則運算題目的程式 學號 3190704213 源 如下 int moshi int count void plus int first,int second else void minus int first,int...