表示式求值

2021-07-05 12:07:23 字數 1938 閱讀 4838

問題描述:使用鍵盤輸入表示式,計算表示式的值並輸出;將表示式轉化成字尾表示式輸出,利用字尾表示式求表示式的值並輸出。

測試資料:

3*(7-2)

2*(6+2*(3+6*(6+6)))+(6+6)*3+2

8/(9-9)

#include#include#define max 30

typedef struct tagnodenode,*linklist;

//用結構體陣列實現順序棧

typedef struct tagstack1stack1; //儲存運算子

typedef struct tagstack2stack2; //儲存運算數

int sempty1(stack1 s) //判運算子棧空

//sempty1

int sempty2(stack2 s) //判運算數棧空

//sempty2

int push1(stack1 *s,char x) //運算子入棧

}//push1

int push2(stack2 *s,float x) //運算數入棧

}//push2

int pop1(stack1 *s,char *x) //運算子出棧

}//pop1

int pop2(stack2 *s,float *x) //運算數出棧

}//pop2

char precede(char a,char b) //優先順序判斷

; char h[7]=;

for(i=0;i<=6;i++)

return bijiao[c][d];

}//precede

char readtop1(stack1 s) //讀運算子棧頂元素

//readtop1

float readtop2(stack2 s) //讀運算數棧頂元素

//readtop1

float count(float m,char the,float n,int *d) //運算函式

//switch

return 0;

}//count

void operate1(linklist l)

//if

else//switch

}//else

}//while

if(d!=0)

else printf("=%.2f\n",readtop2(opnd));

}//operate1

void operate2(linklist l)

//if

else//while

optr1.top=j-1;

}//if

else

}//for

optr1.top=0;

}//else

if(p->data!=')')push1(&optr1,p->data);

if(p->data!='#')p=p->next;

break;

}//switch

}//else

}//while

if(d!=0)

else printf("=%.2f\n",readtop2(opnd3));

}//operate2

int main()

p->next=null;

p=l->next;

while(p->data!='#')

scanf("%c",&i);

operate1(l);

printf("轉化為字尾表示式並求值為(輸入y or n):\n");

scanf("%c",&i);

switch(i)

return 0;

}//main

表示式求值

程式的說明見清華大學出版社 資料結構 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 ...