表示式求值

2021-08-09 01:46:24 字數 3950 閱讀 2713

表示式是資料運算的基本形式。人們的書寫習慣是中綴式,如: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 ...