表示式是資料運算的基本形式。人們的書寫習慣是中綴式,如:11+22*(7-4)/3。中綴式的計算按運算子的優先順序及括號優先的原則,相同級別從左到右進行計算。表示式還有字尾式(如:22 7 4 - * 3 / 11 +)和字首式(如:+ 11 / * 22 – 7 4 3)。字尾表示式和字首表示式中沒有括號,給計算帶來方便。如字尾式計算時按運算子出現的先後進行計算。本設計的主要任務是進行表示式形式的轉換及不同形式的表示式計算。
基本要求
從檔案或鍵盤讀入中綴表示式。
設計運算元為多位整數,操作符為加、減、乘、除、求模的中綴表示式求值演算法。
設計將中綴表示式轉換為字尾表示式的演算法。
設計將中綴表示式轉換為字首表示式的演算法。
設計字尾表示式求值演算法。
設計字首表示式求值演算法。
輸出各種形式的表示式。
md這就有點難度了
主要是剛剛學了一些類還處於一臉懵逼的狀態中
不過馬馬虎虎的呃
寫了下
**如下
類的設計
就是這樣蠻繁瑣的呃#ifndef class_h_
#define class_h_
#include
#include
template
class stck
; t items[max];
int top;
public:
stck();
bool push(const t &item);
bool pop();
bool pop1(t &item);
char gettop();
double operat(const
char s);
double operat1(const
char s);
void show(int n);
void showall();
void showlla();
};int judge(char c1,char c2);
int judge1(char c1,char c2);
int judge2(char c1,char c2);
template
stck::stck()
template
bool stck::push(const t&item)
else
return
false;
}template
bool stck::pop()
else
return
false;
}template
bool stck::pop1(t &item)
return
false;
}template
char stck::gettop()
template
double stck::operat(const
char s)
template
double stck::operat1(const
char s)
template
void stck::show(int n)
}template
void stck::showlla()
std::cout}}
}int judge(char c1,char c2)
int judge1(char c1,char c2)
int judge2(char c1,char c2)
#endif // class_h_
主函式
呃 新手畢竟#include
#include
#include
#include
#include
#include"class.h"
using
namespace
std;
void zhongzhui()
; cout
<
cin>>l;
int cc=l.size();
cin.get();
cout
<
string lc="#";
lc+=l;
opr.push('#');
while(opr.gettop()!='#'||l[n]!='#')
i11=i;
for(i1=0;i1pow(10,i1)*nu[i-1]+aa;
i--;
}num.push(aa);
}else
}} num.show(0);
cout
<
cout
<
stcks1;
char item;
s1.push('#');
n=0;
while(l[n]!='#')
i11=i;
for(i1=0;i1pow(10,i1)*nu[i-1]+aa;
i--;
}cout
}else
else
if(l[n]==')')
n++;
}else}}
}s1.showall();
cout
<
stcks4;
stcks3;
string res,res1,res2,res4;
char item11,oprtop11;
s4.push('#');
n=cc;
while(lc[n]!='#')
i11=i;
for(i1=0;i1pow(10,i-1)*nu[i-1]+aa;
i--;
}ss1<>res1;
ss1.clear();
res+=res1;
}else
else
if(lc[n]=='(')
n--;
}else}}
}s4.showlla();
int size1=res.size();
for(int i=size1-2;i+1;i--)
; cout
<
getline(cin,l1);
n=0;
double result1;
stck num1;
while(l1[n]!='#')
i11=i;
for(i1=0;i1pow(10,i1)*nu[i-1]+aa;
i--;
}num1.push(aa);
}else
if(l1[n]==' ')
n++;
else
}cout
<
num1.show(0);
cout
; cout
<
getline(cin,l);
n=l.size();
l1="#";
l1+=l;
double result1;
stck num1;
while(l1[n]!='#')
i11=i;
for(i1=0;i1pow(10,i1)*nu[i-1]+aa;
i--;
}num1.push(aa);
}else
if(l1[n]==' ')
n--;
else
}cout
<
num1.show(0);
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 ...