c 實現乙個小型算術表示式

2021-06-14 04:43:01 字數 1484 閱讀 4392

/*************

輸入表示式:

反覆 讀取乙個運算元存到運算元陣列中

讀取乙個運算子存到運算子陣列中

如果運算子是=就跳出反覆

計算: 在運算子陣列中找優先順序最低的運算子

從右向左找有沒有+-

如果沒有再從右向左找有沒有*/

如果沒有運算子,運算元陣列第乙個元素就是結果,計算完畢

以它為界把運算子陣列分成兩半

位址相減確定元素個數

同時把運算元陣列也相應分成兩半

計算左右兩半的結果

再按這個運算子進行運算得到最後結果,計算完畢

輸出:*************/

#include using namespace std;

bool cal(double d, char op, int n, double* pval);

bool cal(double* pval);

bool cal(double lv, double rv, char op, double* pval);

int main()

bool cal(double* pval)

//讀取乙個運算子存到運算子陣列中

cin >> op[n];

//如果運算子是=就跳出反覆

if(op[n]=='='||op[n]==')')

break;

n++;

}//計算:

return cal(d,op,n+1,pval);

}//計算

bool cal(double d, char op, int n, double* pval)

//在運算子陣列中找優先順序最低的運算子

int i;

//從右向左找有沒有+-

for(i=n-2; i>=0&&op[i]!='+'&&op[i]!='-'; i--){}

//如果沒有再從右向左找有沒有*/

if(i<0) i=n-2;

//以它為界把運算子陣列分成兩半,同時把運算元陣列也相應分成兩半,計算左右兩半的結果

double lv, rv;

if(!cal(d,op,i+1,&lv)||!cal(d+i+1,op+i+1,n-(i+1),&rv))

return false;

//再按這個運算子進行運算得到最後結果,計算完畢

return cal(lv,rv,op[i], pval);

}bool cal(double lv, double rv, char op, double* pval)

return false;

}

計算結果如下:

簡單算術表示式C 實現

輸入的算術表示式是中綴表示式,由於操作符的優先順序不同,不能直接進行求解,而字尾表示式的計算不需要判別操作符的優先順序,所以我實現算術表示式的思路是 1 應用堆疊將中綴表示式轉化為字尾表示式,2 用堆疊實現字尾表示式求值。用堆疊實現字尾表示式求值的過程 從左到右讀入字尾表示式的各項,並根據讀入的物件...

c語言算術表示式

c語言基本算數運算子如下表 加法運算子 雙目運算子,即應有兩個量參與加法運算。如a b,4 8等。具有右結合性。減法運算子 雙目運算子。但 也可作負值運算子,此時為單目運算,如 x,5等具有左結合性。乘法運算子 雙目運算子,具有左結合性。除法運算子 雙目運算子,具有左結合性。參與運算量均為整型時,結...

語法分析 算術表示式 C 實現

我用的是遞迴下降法,當我得到這個 分析表後,我為每個非終結符設計乙個函式,在內部通過判斷讀入的非終結符判斷該用哪乙個產生式進行替換,而主程式中就是最左推導,通過呼叫最左邊的非終結符的遞迴子程式,讓整個過程鏈式執行下去,最後能得到輸入的算術表示式,則識別成功 include include defin...