問題描述:使用鍵盤輸入表示式,計算表示式的值並輸出;將表示式轉化成字尾表示式輸出,利用字尾表示式求表示式的值並輸出。
測試資料:
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 ...