C 表示式求值

2021-07-27 21:55:28 字數 1480 閱讀 1767

1 問題描述

輸入為四則運算表示式如(2+3)*(5+7)+9/3,僅由

+ - * / ( )

構成,沒有空格,要求其值。

2 問題分析

有兩種方法,一是用遞迴,將表示式分解為項和因子,再通過遞迴逐塊解決。其中,我們需要清楚的是,表示式為項的加減,項為因子的乘除,因子為數值或帶括號的表示式。

第二種方法是通過堆疊,先將表示式轉化成字尾表示式,利用棧依次求解。

3 完整**

① 方法一:

#include#include#includeusing namespace std;

int expression_value();//表示式的值

int factor_value();//因子的值

int term_value();//項的值

int expression_value()

else

more = false;

} return result;

}int factor_value()

else }

return result;

}int term_value()

else

break;

} return result;

}int main()

② 方法二:

#include#include#include#include#includeusing namespace std;	

stackst;//用來儲存操作符

//先寫乙個運算子優先順序比較的函式,按返回值,3最高,1最低

int priority(char a)

return -1;

}vectors;

//這是乙個將中綴表示式轉化為字尾表示式的函式

void change(string str)

st.pop();

}else

st.push(str[i]);

}else

while(priority(st.top()) >= priority(str[i] ) )

char b;

b = st.top();

st.pop();

s.push_back(b);

if(st.size() == 0)

} } i++;

} while(!st.empty()) }

int main()

else

temp.pop();

temp.push(result);

} }cout << endl << "運算結果為:" << result << endl;

return 0;

}

表示式求值

程式的說明見清華大學出版社 資料結構 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 ...