1.平時我們所接觸到的四則運算都是中序表示式,而要進行程式設計計算時要考慮符號優先順序神馬的很麻煩,故通常將其轉換為前序表示式或者後序表示式:
中序表示式:
2*3/(2-1)+3*(4-1)
前序表示式:
+/*23-21*3-41
後序表示式:23*21-/341-*+
2.中序轉前序:
1.將中序表示式逆**)1-4(*3
+)1-
2(/3
*2
2.處理逆轉後的字串:
1.如果是運算元,直接輸出;
2.如果是運算子
1.如果是「)」,直接入棧;
2.如果是「(」,連續出棧,直至遇到「(」;
3.如果既不是「)」,也是不是「(」
1.棧空,則入棧;
2.棧頂為「)」,則入棧;3.如果此時符號優先順序》=棧頂元素優先順序,則入棧;否則出棧,直到棧中的符號優先順序大於此時符號或者棧為空;
3.處理完字串後,如果棧不為空,將棧中的符號輸出; //14-3*12-32*/+
4.然後將字元從左到右遍歷,不斷的將離符號最近的兩個數進行進行運算(比如:912-),直到結尾;(按理論是將該字串逆轉變成前序表示式,然後在從右到左進行處理,後序表示式是從左到右進行處理);
3.程式如下:
#include #include #include #include using namespace std;
int stringint(string &a)
double charint(vector&vec)
//1.反轉表示式
void reserve(char *p)
sta1.pop(); //刪除')'
p++;
} else if(*p<='9' && *p>='0') //表示數字
vec1.push_back(vec11);
} else if(*p!='(' && *p!=')') //表示其他符號
; for( ; iterrow!=vec1.end(); iterrow++)
else if(i>2) //表示三個數以上連續乙個符號的情況,易錯點
}else
}return a[0];
}void calculate() //測試
; vector> vec1;
reserve(str);
getresult(str, vec1);
double result = calculate(vec1);
coutreturn 0;
}
參考文獻:
資料結構 四則運算
1 c語言實現科學計算器 2 c語言實現四則運算 小型計算器 3 經典演算法 算術表示式求值 4 棧 的典型應用 表示式求值 c語言實現 5 利用c語言 easyx圖形設計 製作簡易計算器 6 從鍵盤上輸入乙個字尾表示式,試編寫演算法計算表示式的值。規定 逆波蘭表示式的長度不超過一行,以符作為 輸入...
python四則運算程式 四則運算(Python)
四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...
資料結構 棧的四則運算實現
請各位大佬們賜教,目前該程式支援非負整數的四則運算僅支援 和 可以疊加多層。include include using namespace std bool isdigit char a intfd char a else if a a else if a else if a else if a i...