/*************
輸入表示式:
反覆 讀取乙個運算元存到運算元陣列中
讀取乙個運算子存到運算子陣列中
如果運算子是=就跳出反覆
計算: 在運算子陣列中找優先順序最低的運算子
從右向左找有沒有+-
如果沒有再從右向左找有沒有*/
如果沒有運算子,運算元陣列第乙個元素就是結果,計算完畢
以它為界把運算子陣列分成兩半
位址相減確定元素個數
同時把運算元陣列也相應分成兩半
計算左右兩半的結果
再按這個運算子進行運算得到最後結果,計算完畢
輸出:*************/
#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...