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 ...