版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include #include #include #include using namespace std; enum types DELIMITER = 1, VARIABLE, NUMBER; /定義枚舉類型把DELIMITER初試化為后面的相應(yīng)的是前面值+1 int error_type = -1; class calculator char *cal_p; / 定義一個指向表達式的指針 char token80; / 存儲表達式中的字符變量 char tok_type; / 存儲具體是什么類型 void cal_p2(double &result); void cal_p3(dou
2、ble &result); void cal_p4(double &result); void cal_p5(double &result); void cal_p6(double &result); void atom(double &result); /把字符串轉(zhuǎn)換為浮點數(shù) void get_token(); /取得下一個字符 void error(int err); /顯示打印出錯信息 int isdelim(char c); /判斷是否為分隔符public: calculator();/類的構(gòu)造函數(shù) double cal(char *exp); int error_type; / 存儲
3、錯誤信息; / 類構(gòu)照函數(shù)的具體實現(xiàn)calculator:calculator() cal_p = NULL;/把exp_ptr的指針初始化為空 error_type = -1; / 方法eval_exp的具體實現(xiàn)過程double calculator:cal(char *p) double result; cal_p = p;/把傳遞過來的參數(shù)p賦給cal_p get_token(); if(!*token) error(2); /輸出沒有任何表達式的錯誤信息 return 0.0; cal_p2(result); if(*token)error(0); / last token must
4、be null return result; / 兩個變量字符是加或者減操作void calculator:cal_p2(double &result) register char op; double temp; cal_p3(result); while(op = *token) = +|op = -) get_token(); cal_p3(temp); switch(op) case -: result = result - temp; break; case +: result = result + temp; break; / 兩個變量是乘或者除操作或者是取余void calcul
5、ator:cal_p3(double &result) register char op; double temp; cal_p4(result); while(op = *token) = * |op = / | op = %) get_token(); cal_p4(temp); switch(op) case *: result = result * temp; break; case /: if (temp = 0) error(3);elseresult = result / temp; /除數(shù)為零的情況要考慮進去 break; case %: result = (int) resu
6、lt % (int) temp; break; / 進行運算void calculator:cal_p4(double &result) double temp, ex; register int t; cal_p5(result); if(*token= ) get_token(); cal_p4(temp); ex = result; if(temp=0.0) result = 1.0; return; for(t=(int)temp-1; t0; -t) result = result * (double)ex; void calculator:cal_p5(double &result
7、) register char op; op = 0; if(tok_type = DELIMITER) & *token=+ | *token = -) op = *token; get_token(); cal_p6(result); if(op=-) result = -result; / 進行有括號的算法void calculator:cal_p6(double &result) if(*token = () get_token(); cal_p2(result); if(*token != ) error(1); get_token(); else atom(result); / 取
8、得數(shù)值void calculator:atom(double &result) switch(tok_type) case NUMBER: result = atof(token); /atof()把字符串轉(zhuǎn)換成浮點數(shù)double atof( const char *str ); get_token(); return; default: error(0); / 輸出出錯信息. void calculator:error(int err) error_type = err; static char *e= 語法錯誤!請核對后重新輸入, 缺少一個括號!請核對后再輸入, 您沒有輸入任何表達式!,
9、除數(shù)不能為!請核對后重新輸入 ; cout eerr endl; / 取得下一個token值void calculator:get_token() register char *temp; /register修飾符暗示編譯程序相應(yīng)的變量將被頻繁地使用,如果可能的話,應(yīng)將其保存在CPU的寄存器中,以加快其存儲速度 tok_type = 0; temp = token; *temp = 0; /空字符 if(!*cal_p) return; / 如果到表達式末尾則返回 while(isspace(*cal_p) +cal_p; / 若參數(shù)c為空格字符,則返回TRUE,否則返回NULL(0) if(
10、strchr(+-*/%=(), *cal_p) /用strchr函數(shù)在字符串+-*/%=()中查找*exp_ptr指向的字符所在位置,判斷返回值(非為真就執(zhí)行)以便是否執(zhí)行以下語句 tok_type = DELIMITER;/把tok_type置為DELIMITER / advance to next char *temp+ = *cal_p+; else if(isalpha(*cal_p) /當參數(shù)c為大寫英文字母(A-Z)時,返回非零值,否則返回零 while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判斷是否是分隔符,當*exp_ptr指向
11、的字符不為分隔符時把值賦給*temp tok_type = VARIABLE;/把tok_type置為VARIABLE else if(isdigit(*cal_p) / isdigit判斷*exp_ptr指向的字符是否為數(shù)字 while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判斷是否是分隔符,當*exp_ptr指向的字符不為分隔符時把值賦給*temp tok_type = NUMBER; *temp = 0; /空格 / isdelim函數(shù)的具體實現(xiàn),如果參數(shù)是一個分隔符則返回真int calculator:isdelim(char c) if(strchr( +-/*%=(), c) /把+-/*%=()09r定義非分隔符,/r回車 return 1; return 0; /strchr(const char *s,char c),返回首次出現(xiàn)c的位置的指針,如果s中不存在c則返回NULL。int main() char calchar80; calculator ob; / 創(chuàng)建一個calculator類型的實例 double result; fo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024中外合資企業(yè)教育培訓(xùn)與經(jīng)營合同書
- 2024廣州市房地產(chǎn)中介服務(wù)合同(賣方出租方使用)
- 2024個人民間借款合同范例
- 2024年信息安全保密協(xié)議
- 2024年合伙人分伙協(xié)議書
- 2024果樹苗木定購合同范本
- 跨境電商商品銷售合同
- 承包商土地使用權(quán)贈與合同模板
- 精裝修室內(nèi)工程合同
- 2024英文合同范本
- 2024年代工生產(chǎn)機密保護協(xié)議
- 2023-2024學(xué)年湖北省武漢市洪山區(qū)九年級(上)期末物理試卷(含答案)
- 2024年新人教版五年級數(shù)學(xué)下冊《第4單元第7課時 最大公因數(shù)(1)》教學(xué)課件
- 小學(xué)生感恩節(jié)國旗下講話稿(35篇)
- 一年級新生家長會課件(共25張課件)
- 品牌經(jīng)理招聘面試題與參考回答(某大型集團公司)2024年
- 五年級上冊道德與法治說課稿-3 主動拒絕煙酒與毒品 部編版
- 術(shù)后譫妄的預(yù)防及護理
- 二次函數(shù)專題知識點-???典型)題型-重難點題型(含詳細答案)
- 2024年壓電陶瓷傳感片項目可行性研究報告
- 統(tǒng)編四上《中國古代神話故事》導(dǎo)讀課教學(xué)設(shè)計含反思
評論
0/150
提交評論