表示式求值

2021-08-14 17:19:58 字數 1770 閱讀 6982

1、問題描述

用棧來實現表示式求值 

(1) 輸入的形式:可以輸入數字、「+」「-」「*」「/」以及與其匹配的「(」「)」「[」「]」「」; 

(2) 輸出的形式:直接輸出數字答案; 

(3) 程式所能達到的功能:一般的四則混合運算;  

注意,這道題需要字首中綴字尾三種表示式求值,我們只需要求出中綴然後進行轉換就行

#include#include#include//系統功能

using namespace std;

char pause;

templateclass sqstack

templatet sqstack::pop() //出棧

templatet sqstack::gettop() //取棧頂元素

templateint sqstack::stackempty() //測棧空

templatevoid sqstack::stacktranverse() //輸出棧中元素

break;

case '=':switch(t1)

}return f;

}int in(char c) // 判斷c是否為運算子

}float operate(float a,char theta,float b) //運算子的運算

else if((c>='0'&&c<='9')||c=='.') //c是運算元

while((c>='0'&&c<='9')||c=='.');

z[i]='\0';

d=(float)atof(z); //將字串陣列轉為符點型存於d

od.push(d);

}else //c是非法字元

else if(in(c)) // 是7種運算子之一

}postexp[i]='\0';

}//while

cout<<"字尾表示式為:"c=*postexp++;

while(c!='\0')

while((c>='0'&&c<='9')||c=='.');

z[i]='\0';

d=(float)atof(z); // 將字串陣列轉為符點型存於d

od.push(d);

}if(in(c))//c為運算子

c=*postexp++;

}v=od.pop();//棧頂元素即為表示式的值

return v;

}void createpopexp(char *exp,char *&popexp)//由中綴式求字首式

if(in(c)) // 字串c是7種運算子之一

else if(c=='(')

}temp[i]=' ';

}//while

x=op.gettop();

for(;x!='=';)

i++;

int m;

for(m=0;i<20;m++,i++)

popexp[m]=temp[i];

popexp[m]='\0';//求輸出串的逆序

cout<<"字首表示式為:"<>choice;

switch(choice)

{case 1://建立表示式

cout<<"請輸入表示式,以=結束"<>exp;

cin.get(pause);

system("pause");

break;

case 2://表示式求值

v1=val_exp(exp) ;

cout<

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...