利用棧完成算術表示式求值: 從鍵盤或檔案中輸入算術表示式,計算其結果並顯示。 (1)轉換為字尾表示式並輸出;
(2)對字尾表示式求值並輸出。
輸入的表示式中可以有整數、實數、括號,運算子包括+、-、*、/、#(代表單目負)。可以多次輸入不同的表示式進行計算,直到使用者選擇「退出」。
對於以上該計算器,我們可以先使用乙個棧暫時儲存操作符,最後用乙個陣列來儲存字尾表示式;之後根據字尾表示式利用棧計算即可得到最終的答案。ok,上**:
/**
* p_calc.h: 類的設計主要為內部介面函式的宣告
*/#ifndef _p_calc_h_
#define _p_calc_h_
#include
#include
#include
#include
#include //isdigit()
#include //atof()
using
namespace
std;
class calc
// 用來判斷字尾表示式是否能夠成功轉化
bool to_postfixexpression ();
// 計算
double pcalc();
double pcalc(double left, double right, char optr);
// 判斷是否是操作符:'+'、'-'、'*'、'/'
bool isp_optr(char c);
// 優先順序判斷
bool isp_notlow(char a, char b);
private:
string opers;
vector
pev;
};#endif // _p_calc_h_
/**
* p_calc.cpp: 標頭檔案中的介面的實現
*/#include "p_calc.h"
//轉化為字尾表示式
bool calc::to_postfixexpression ()
if(i < length && opers[i] == '.')
}pev.push_back(opers.substr(j, i-j));
//cout << "數字子串:" << opers.substr(j, i-j) << " j is: " << j << " i is: " << i << endl;
}else
if (isp_optr(opers[i]))
while (!pes.empty() && (isp_notlow(pes.top(), opers[i])))
pes.push(opers[i++]);
}else
if (opers[i] == '(')
else
if (opers[i] == ')')
pes.pop();
i++;
//cout << "i is: " << i << " ";
}else
if (opers[i] == '#')
}while (!pes.empty())
vector
:: iterator it;
cout
<< endl;
for (it = pev.begin(); it != pev.end(); it++)
cout
<< *it << " ";
cout
<< endl << endl;
return
true;
}利用字尾表示式來計算值
double calc::pcalc()
else
if ( *it == "#" )
}double final_answer = pcalcs.top(); pcalcs.pop();
if (pcalcs.empty())
return final_answer;
else
return0;}
double calc::pcalc(double left, double right, char optr)
return answer;
}bool calc::isp_optr(char c)
bool calc::isp_notlow(char a, char b)
/**
* main.cpp: 測試程式
*/#include
#include "p_calc.h"
using
namespace
std;
int main()
return
0;}
1.2+3.4*(5.6-7.8)/0.9
1.2 3.4 5.6 7.8 - * 0.9 / +ok, 以上完 :)final answer is: -7.11111
C 實現簡易計算器
include include include define fin cin define fo using namespace std bool isoperator char x int getpriority char x bool isbracket char x int dooperate...
實現簡易計算器
python 剛學python 老師帶著寫了乙個計算器。話不多說直接上 from tkinter import 匯入模組 top tk 設定視窗物件 top.title 計算器 設定視窗標題 v strin ar 接受使用者輸入的字元 v.set 0 設定字元預設值 isopera false 是否...
計算器簡易實現
testdlg.cpp 實現檔案 include stdafx.h include include test.h include testdlg.h include afxdialogex.h ifdef debug define new debug new endif define tag add...