算術表示式求值 資料結構 C語言

2021-09-01 11:32:24 字數 1506 閱讀 3512

1.

實驗目的

熟練掌握棧的基本操作,深入了解棧的特性,能在實際問題的背景下靈活運用他們,並加深對這種結構的理解。

2.實驗內容

設計乙個程式,演示用算符優先法對算術表示式求值的過程。以字串行的形式從終端輸入語法正確的、不含變數的整數表示式。利用教科書表3.1給出的算符優先關係,實現對算術四則運算混合運算表示式的求值,並仿照教科書的例子3-1演示在求值中運算子棧、運算數棧、輸入字元和主要操作的變化。

#include#include#define ok 1 

#define error 0

#define stackincrement 5

#define stack_init_size 10

typedef char selemtype;

typedef int status;

typedef structsqstack;

char prior[7][7]=,,,

,,,};//定義算符之間優先關係的二維陣列

//構造乙個存放char型資料的空棧

status initstack(sqstack *s)

//入棧

status push(sqstack *s,selemtype e)

*s->top++ = e;

return ok;

}//出棧

status pop(sqstack *s,selemtype *e)

*e = *--s->top;

return ok;

}//得到棧頂元素

selemtype gettop(sqstack *s)

//確定輸入的字元如果是操作符的話判斷在二維陣列中的下標 若是數字的話就另外與操作符區分開 便於在輸入表示式時是入哪個棧

int index(char c)

}//判斷優先順序,返回大小 < > = !

char priority(char a,char b)

//簡單表示式求值

int reckon(int a,char theta,int b)

}//判斷是字元是否是數字

status isdigit(char ch)

//算術表示式求值

void getexpressionvalue()

for(int j=0;j':pop(&opnd,&b);

pop(&opnd,&a);

pop(&optr,&theta);

push(&opnd,reckon(a,theta,b));

break;//將結果入棧

case '=':pop(&optr,&theta);

c = getchar();

break;//說明括號相遇 刪除棧內括號即可

default:break;

}} }

pop(&opnd,&result);

printf("結果是:%d",result);

}main()

資料結構之 用C 實現算術表示式求值

基本功能 利用棧實現整數的加減乘除運算。使用方法 輸入表示式之後再輸入 表示表示式結束,如下圖 缺點 不能進行小數的運算 如下 include include include using namespace std define maxnum 50 class stack for number fl...

算術表示式求值(C語言棧)

題目描述 表示式計算是實現程式語言的基本問題之一,也是棧的應用的乙個典型例子。設計乙個程式,演示用運算子優先法對算數表示式求值的過程。基本要求 以字串行的形式從終端輸入語法正確的 不含變數的整數表示式。利用教科書表3.1給出的運算子優先關係,實現對算數四則混合運算表示式的求值,並仿照教科書的例3.1...

資料結構 實驗三 算術表示式求值演示

資料結構 實驗三 算術表示式求值演示 基本上已經ok了 測試用例 8 1 2 3 4 88 1 5 1024 4 8 1024 4 8 20 2 6 2 3 3 3 8 9 8 2 6 2 3 6 6 6 6 6 6 3 2 6 2 include include include using nam...