c語言實現表示式求值

2021-10-03 21:06:39 字數 2274 閱讀 9323

用c語言實現表示式求值演算法。要求從鍵盤輸入任意的包含加減乘除的算術四則運算表示式,都能求值。運算元型別可以設定為double。

陣列棧進行操作

加減乘除和括號運算

#include 

#include

#include

#define max_size

50double stacks[

max_size];

char stacky[

max_size];

int tops =

0, bases =

0, topy =

0, basey =0;

//運算元的操作

void

initials()

;void

pushs

(double x)

;void

pops()

;double tops_data()

;//操作符的操作

void

initialy()

;void

pushy

(char x)

;void

popy()

;char topy_data()

;//運算操作

int judge_optr

(char top)

;double yun

(double b, double a, char top)

;void

operate

(char str)

;void

initials()

//初始化

void

pushs

(double x)

//進棧

void

pops()

//出棧

double tops_data()

//棧頂元素

void

initialy()

void

pushy

(char x)

void

popy()

char topy_data()

int judge_optr

(char top)

//返回優先順序

return x;

}double yun

(double b, double a, char top)

//運算

else

c = b / a;

break

;default

:printf

("error\n");

break;}

return c;

}void

operate

(char str)

break

;case

'*':

case

'/':if(

(topy_data()

=='#')||

((judge_optr

(str[i]))

>

judge_optr

(topy_data()

))||(str[i]

=='('))

pushy

(str[i]);

//當操作符棧為空或者該操作符的優先順序大於棧頂元素的優先順序是入棧儲存

else

break

;case

')':

pushy

(str[i]);

break

;default

://處理小數和多個數字字元

j =0;

dowhile

(str[i]

>=

'0'&& str[i]

<=

'9'|| str[i]

=='.');

//可存入乙個或多個數字字元

d[j]

='\0'

;//將輸入的連續多個數字字元拼成了字串

i--; f =

atof

(d);

//呼叫庫函式atoi()將字元數轉換為浮點數

pushs

(f);

//將轉換後的數壓入運算元棧中

break;}

}while

(topy_data()

!='#'

)else}}

int main()

順序棧實現表示式求值(C語言實現) 棧

表示式求值一定會出現表示式中運算子的優先順序問題。運算規則 先乘除,後加減 從左算到右 先括號內,後括號外 運算子優先表 上面 中有一些比較特殊的位置 相等 左括號遇到右括號相等說明左右括號匹配。和 遇到的時候也是 我們在表示式的左邊人為的加上乙個 在表示式掃瞄完成之後再加上乙個 表示表示式掃瞄完了...

表示式求值(c 實現)

今天寫了乙個表示式求值的程式。基本功能為 輸入乙個表示式比如23 34 21 56 45 1 然後程式求出結果。而且按照四則運算的優先順序,同時支援括號。下面是程式執行的畫面 程式的難點在於把乙個字串分解為運算元和操作符並能正確處理各個操作符的優先順序,特別是有括號的情況。本程式主要採用了傳統的方法...

棧的操作和c語言實現算術表示式求值

棧是一種特殊的線性表,按照 後進先出 的原則處理資料。棧的基本操作有兩種 一種是入棧 push 即把資料儲存到棧頂,注意在入棧前應該先檢查棧是否已滿,如滿則不能入棧操作,未滿則修改棧頂指標,使其向上移動乙個元素的位置,然後將資料儲存到棧頂指標所指的位置。一種是出棧 pop 即把棧頂資料彈出,注意在出...