表示式求值是進行資料處理的最基本操作。請編寫程式完成乙個簡單算術表示式的求值。要求如下:
(1) 運算子包括:+、-、*、-、^(乘方)、括號
(2)運算量為數值常量,根據自己的能力可以對運算量做不同的約束,例如1位整數、多位整數、實數等(會有不同的測試用例);
輸入:一行,即表示式,以「=」結束。例如:
5*(8-3)+6/5=
輸出:一行,即表示式的值。結果值為整數時輸出為整數,如果有小數時保留5位小數。
26.20000
#define stack_init_size 100
#define stack_add 10
#include #include #include #include #include #include using namespace std;
typedef struct
sqstack1;
typedef struct
sqstack2;
void initstack(sqstack1 &s)
void initstack(sqstack2 &s)
void push(sqstack1 &s,char e)
*s.top++=e;
return;
}void push(sqstack2 &s,double e)
*s.top++=e;
return;
}bool pop(sqstack1 &s,char &e)
bool pop(sqstack2 &s,double &e)
char gettop(sqstack1 &s)
double gettop(sqstack2 &s)
bool in(char c)
double todouble(char s)
if(s[i] == '.')
i++;
for(power = 1.0; isdigit(s[i]); i++)
return sign * val / power;
}double power(double a,double b)
; char ch[8]= ;
int i,j;
for(i=0; i<8; i++)
if(m==ch[i])
break;
for(j=0; j<8; j++)
if(n==ch[j])
break;
return prior[i][j];
}void perfect(char s)
s1[j++]=s[i++];
}s1[j]='\0';
i=0;
while(s1[i])
s[i]='\0';
}double evaluateexpression()
push(opnd,todouble(z[k]));
k++;
}else
switch(precede(gettop(optr),s[j]))
}return gettop(opnd);
}int main()
棧 中綴 字尾表示式
利用棧計算字尾表示式 include include include using namespace std int main s.push num i cout i else if str i str i str i str i s.push res cout result 0 利用棧,把中綴表示...
中綴表示式轉為字尾表示式 棧
題目 給乙個中綴表示式 即標準形式的表示式 列印該表示式的字尾表示式。中綴表示式最大的不同就是去掉了表示運算子優先順序的括號。運算元為26個小寫或大寫的英文本母 注意不包括數字和其他字元 操作符為 一共八個。具體見例子見下圖 如下 include include include using name...
棧 中綴表示式轉字尾表示式
中綴轉字尾的演算法 遍歷中綴表示式中的數字和符號 對於數字 直接輸出 對於符號 左括號 進棧 運算符號 與棧頂符號進行優先比較 若棧頂符號優先順序低 此符號進棧 預設棧頂若是左括號,則左括號的優先順序最低 若棧頂符號優先順序高 將棧頂符號彈出 並輸出 直到棧頂的符號優先順序低,然後進棧 右括號 將棧...