版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 計算機(jī)科學(xué)與技術(shù)學(xué)部C+課程設(shè)計題 目 科學(xué)計算器 學(xué) 部 計算機(jī)科學(xué)與技術(shù) 班 級 計科 1103 指 導(dǎo) 教 師 李 軍 姓 名 劉 明 學(xué) 號 11430421817667 2012 年 6 月 27 日科學(xué)計算器 摘 要 摘 要計算器的產(chǎn)生和發(fā)展是建立在電子計算機(jī)基礎(chǔ)之上的。硬件方面,自 1946 年第一臺電子計算機(jī)誕生以來,計算機(jī)技術(shù)的發(fā)展可謂日新月異,從龐大的只能在實驗室里供研究使用的計算機(jī)到如今能適應(yīng)不同環(huán)境滿足不同需求的各種各樣的計算機(jī);運(yùn)算速度從每秒幾千次到每秒幾百億次;處理器從焊有上百萬個電子管的大的驚人的電子板到只有指甲大小的集成電路;現(xiàn)在計算機(jī)在硬件方面的發(fā)展已達(dá)到了
2、每三個月更新?lián)Q代一次的驚人速度。軟件方面,也已從機(jī)器語言、匯編語言、高級語言發(fā)展到現(xiàn)如今的第四代語言非結(jié)構(gòu)化、面向?qū)ο?、可視化的語言。在這個計算器里面,我們實現(xiàn)了簡單的四則運(yùn)算以及更高功能的科學(xué)計算,它的外觀簡潔美觀,使人們能快捷簡單的操作。能準(zhǔn)確的得到計算結(jié)果,大大減少了數(shù)字計算所需要的時間,為人們的生活帶來便利。此系統(tǒng)在 Windows 7 環(huán)境下,使用 VC+ 6.0 進(jìn)行編寫。簡單計算器包括雙目運(yùn)算和單目運(yùn)算功能,雙目運(yùn)算符包含基本的四則運(yùn)算及乘冪功能,單目運(yùn)算符包含正余弦,對數(shù),開方,階乘,倒數(shù),進(jìn)制轉(zhuǎn)換等運(yùn)算??蓪ζ漭斎肴我獠僮鲾?shù),包括小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運(yùn)算并能連
3、續(xù)運(yùn)算。并且包含清除,退格功能等。我們所做的計算器其功能較 Windows 7 下的計算器還是很不夠多,沒有其菜單的實現(xiàn)功能項,沒有其小巧的標(biāo)準(zhǔn)計算器。關(guān)鍵詞: 計算器;運(yùn)算;VC+等科學(xué)計算器 摘 要 科學(xué)計算器 分配表 課程設(shè)計任務(wù)分配表: 表 1 分配信息表姓名姓名主要工作主要工作組長組長劉 明程序設(shè)計和編寫舒兆月實驗報告書的制作組員組員凡力強(qiáng)實驗報告書的制作課程設(shè)計成績表:表 2 成績表姓名姓名學(xué)號學(xué)號班級班級成績成績組長組長劉 明11430421817667計科 1103舒兆月11430727814558計科 1103組員組員凡力強(qiáng)11430426154534計科 1103科學(xué)計算器
4、采用的數(shù)據(jù)類型 采用的類的數(shù)據(jù)類型:class CCalculatorDlg : public CDialogpublic:void clean_aliter();CString OLD_ANSWER;void out_change(int system);CCalculatorDlg(CWnd* pParent = NULL); / standard constructor int Sel,EndSel; /定義輸入或插入時光標(biāo)的位置int Expr_pos; /詞法分析表達(dá)式時,標(biāo)記當(dāng)前字符位置int OS_pos ; /操作數(shù)棧頂位置int old_pos; /歷史表達(dá)式的位置int o
5、ld_head; /歷史表達(dá)式數(shù)組中最最前位置int old_back; /歷史表達(dá)式數(shù)組中最最后位置int error_mark; /標(biāo)記表達(dá)式錯誤int parentheses_count; /記錄表達(dá)式中括號的個數(shù)double operand_Stack200; /操作數(shù)棧CString old_expression20; /表達(dá)式歷史記錄void getword(WordType & w_type ,Operator& Fun_Ope,int system); /詞法分析函數(shù)int getword16(); int getword10(); int getword8(); int ge
6、tword2(); /將用字符表示的 N(2,8,10,16)進(jìn)制轉(zhuǎn)為浮點型void E_AddSub(); /加減 void T_MulDiv(); /乘除void F_Power(); /乘方 void L_Function(); /函數(shù)void H_Digit(); /數(shù)字 void Factorial(); /階乘void P_expression(); /括號 void compute(Operator Op); /計算 void error(int ); /錯誤標(biāo)記函數(shù) void clean_all(); /清空表達(dá)式和計算結(jié)果protected:HICON m_hIcon;DEC
7、LARE_MESSAGE_MAP();程序中所用到相關(guān)專業(yè)知識:類,對象數(shù)組,友元函數(shù),繼承與派生,指針, 枚舉,,數(shù)棧,算法科學(xué)計算器目 錄 目 錄前 言.1第一章 系統(tǒng)需求.21.1 簡介說明.21.1.1 系統(tǒng)要求 .21.1.2 具體任務(wù) .21.1.3 研究目的 .21.2 設(shè)計分析.31.2.1 可行性分析 .31.2.2 需求分析 .31.2.3 設(shè)計結(jié)構(gòu) .31.3 開發(fā)環(huán)境.31.3.1 運(yùn)行環(huán)境 .31.3.2 開發(fā)工具 .31.3.3 關(guān)于 Visual C+ 6.0 .4第二章 系統(tǒng)設(shè)計.52.1 功能說明 .52.1.1 系統(tǒng)總體功能分析 .52.1.2 系統(tǒng)功能 .
8、52.1.3 課程設(shè)計內(nèi)容 .62.2 設(shè)計大概 .62.2.1 設(shè)計思路 .62.2.2 控件定義 .72.2.3 變量的定義以及初始化 .8第三章 系統(tǒng)實現(xiàn).93.1 窗體設(shè)計 .93.1.1 設(shè)計步驟 .93.1.2 控件定義 .93.1.3 一部分操作截圖 .103.2 程序核心代碼.11科學(xué)計算器目 錄 3.2.1 數(shù)字鍵和字母鍵核心代碼 .113.2.2 計算類型函數(shù)的核心代碼 .113.2.3 提示錯誤的核心代碼 .133.2.4 進(jìn)制轉(zhuǎn)換的核心代碼 .143.2.5 八進(jìn)制單選按鈕消息響應(yīng)函數(shù)代碼 .163.2.6 二進(jìn)制單選按鈕消息響應(yīng)函數(shù) .17第四章 系統(tǒng)運(yùn)行.204.1
9、 測試以及運(yùn)行界面 .204.1.1 程序主界面測試 .204.1.2 運(yùn)行的計算結(jié)果 .204.1.3 轉(zhuǎn)換進(jìn)制計算 .214.2 測試.224.2.1 測試研究與選擇 .224.2.2 測試環(huán)境 .22總 結(jié).23參考文獻(xiàn).24科學(xué)計算器 前 言 0前 言Visual C+(簡稱 VC)是 Microsoft 公司推出的目前使用極為廣泛的基于Windows 平臺的 C+可視化開發(fā)環(huán)境。為了方便計算,我們編寫了計算器。本報告在李軍老師的指導(dǎo)下,并且形成了比較完善的體系,本設(shè)計報告具體包含以下內(nèi)容:第一章直接介紹了基于 C+語言,熟悉 Visual 6.0 的開發(fā)環(huán)境和 C+控制臺方式的調(diào)試和
10、運(yùn)行,使學(xué)生熟悉 Visual C+ 6.0 更自然。以及我們編程的背景與意義及目的,主要介紹我們編寫這個程序用來做什么。第二章介紹了我們編程的怎么去做,設(shè)計時的一些想法。第三章介紹了我們編程實用的一些技術(shù)與核心代碼,設(shè)計時的具體做法。第四章介紹我們運(yùn)行時的一些具體操作,以及我們給出的總結(jié)與參考文獻(xiàn)。本程序編寫一個程序來實現(xiàn)算術(shù)計算器。通過數(shù)組和指針以及枚舉來存放輸入的每一數(shù)字或運(yùn)算符號函數(shù)的記錄(包括 1、2、3 等數(shù)字,+、-、*、等運(yùn)算符號)中。通過一些單擊按鈕實現(xiàn)一些標(biāo)準(zhǔn)與科學(xué)的操作混合運(yùn)算,然后顯示出結(jié)果。本報告由劉明、凡力強(qiáng)、舒照月編寫,由李軍老師對全報告進(jìn)行修改,以及很多同學(xué)以及
11、網(wǎng)絡(luò)朋友提供幫助,在此表示感謝。由于水平有限,不當(dāng)之處在所難免,懇請讀者批評指正。編 者2012.6科學(xué)計算器 第一章 系統(tǒng)需求 1第一章第一章 系統(tǒng)需求系統(tǒng)需求1.1 簡介說明1.1.1 系統(tǒng)要求1、用 C+語言實現(xiàn)程序設(shè)計;2、利用 MFC 進(jìn)行相關(guān)信息處理;3、畫出總模塊的流程圖;4、系統(tǒng)的各個功能模塊要求用函數(shù)的形式實現(xiàn);5、界面友好(良好的人機(jī)互交) ,程序要有注釋;1.1.2 具體任務(wù)1、定義以及初始化,輸入 09,AF,運(yùn)算符等信息;2、輸入簡單的運(yùn)算符計算式,并顯示出計算結(jié)果;3、畫出總流程圖;4、編寫代碼;5、程序分析與調(diào)試;1.1.3 研究目的1、熟悉掌握基于對話框的程序編
12、寫;2、熟練掌握放置控件及 control 工具條的使用;3、掌握控件擺放的基本方法,熟練掌握 Dialog 的使用;4、熟悉建立對話框步驟;5、了解 CBUTTON 類的實用;6、鞏固并加深學(xué)生對 C+語言程序設(shè)計知識的理解;7、培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計思想,與其認(rèn)識面向過程和對象的區(qū)別;8、進(jìn)一步掌握和應(yīng)用 VC+ 6.0 集成開發(fā)環(huán)境;9、提高運(yùn)用 C+語言解決實際問題的能力;10、初步掌握開發(fā)小型實用軟件的基本方法,能獨立設(shè)計、實踐操作;11、掌握書寫程序設(shè)計開發(fā)文檔的能力(書寫課程設(shè)計實驗報告) ;科學(xué)計算器 第一章 系統(tǒng)需求 21.2 設(shè)計分析1.2.1 可行性分析伴隨著經(jīng)濟(jì)全球
13、化,計算機(jī)的普及發(fā)展,軟件行業(yè)在社會占著舉足輕重的作用。我們在學(xué)校生活中常會遇到一些繁雜的數(shù)值運(yùn)算,我們必須要用到科學(xué)計算器,所以便著手開發(fā)了這個計算器程序,既緊隨科技發(fā)展的前沿,又方便了我們的生活,具有一定的現(xiàn)實意義。1.2.2 需求分析本軟件主要用于計算機(jī) Windows XP 以上的用戶使用,這次課程設(shè)計一般是實現(xiàn)簡單計算器的功能。需要程序?qū)崿F(xiàn):加減乘除,開方,平方,倒數(shù)等運(yùn)算功能;還要實現(xiàn)數(shù)據(jù)的輸入,輸出,計算,顯示及程序退出等功能。另外還可以實現(xiàn)多種科學(xué)計算的功能,如:三角函數(shù)的計算,弧度與角度間的轉(zhuǎn)換,對數(shù)指數(shù)的計算,二、八、十、十六進(jìn)制的轉(zhuǎn)換等。1.2.3 設(shè)計結(jié)構(gòu)第一章主要介紹
14、了我們做這個課程設(shè)計目地是做什么。第二章主要介紹了我們怎么去設(shè)計這個課程報告以及編程。第三章主要介紹了我們實現(xiàn)代碼的關(guān)鍵性技術(shù)與源碼段的介紹。第四章主要介紹了我們做這個程序的運(yùn)行結(jié)果與一些運(yùn)算的截圖。1.3 開發(fā)環(huán)境1.3.1 運(yùn)行環(huán)境(1) Windows 7 64 位/XP 32 位系統(tǒng)(2) Visual C+ 6.0(中文版)編譯環(huán)境1.3.2 開發(fā)工具C+語言科學(xué)計算器 第一章 系統(tǒng)需求 31.3.3 關(guān)于 Visual C+ 6.0Visual C+ 6.0 是 Microsoft 公司在 1998 年推出的基于 Windows 9X 和Windows NT 的優(yōu)秀集成開發(fā)環(huán)境。該
15、環(huán)境為用戶提供了良好的可視化編程環(huán)境,程序員可以利用該開發(fā)環(huán)境輕松地訪問 C+源代碼編輯器,資源編輯器和使用內(nèi)部調(diào)試器,并且可以創(chuàng)建項目文件。Visual C+6.0 不僅包括編輯器,還包括許多有用組件,通過這些組件的協(xié)同工作,可以在 Visual C+6.0 集成環(huán)境中輕松地完成創(chuàng)建源文件、編輯資源以及對程序的編譯、連接和調(diào)試等各項工作。VC+6.0 是 Windows 95/98、XP 或 Windows NT 下的一個應(yīng)用程序,本身對軟件沒有特殊要求。就是說它對環(huán)境的要求與 Windows 95/98、Windows NT 的要求是一致的。VC+6.0 系統(tǒng)可以在一張 CD 盤上,也可以
16、在“Visual Studio (Visual C+、Visual Foxpro)”等產(chǎn)品的第一張 CD 盤上。一般都有一個 VC 的自動安裝程序,也可以執(zhí)行 VC+6.0 目錄下的 Setup.exe,在安裝包的提示下進(jìn)行,對初學(xué)者可采用“典型安裝”方式。在安裝好 VC6.0 系統(tǒng)后,有時根據(jù)需要添加或刪除某些部件,可插入 CD 盤重新執(zhí)行 Setup.exe 安裝程序,安裝程序會檢測當(dāng)前系統(tǒng)安裝 VC6.0 的組件,用戶單擊“添加/刪除”按鈕后,在“安裝維護(hù)”對話框中選定要與一般的應(yīng)用軟件一樣,有以下兩種啟動方式:(1)通過“開始”按鈕,選擇“程序”菜單,然后打開“Microsoft Vi
17、sual C+6.0 中文版”子菜單中的“Microsoft Visual C+6.0 中文版”程序。(2)用戶也可以使用命令行啟動 VC,單擊“開始”按鈕后選擇“運(yùn)行”命令,在“運(yùn)行”對話框中輸入 C:program FilesMicrosoft Visual StudioVC98VC6.exe(按默認(rèn)盤符和路徑安裝即可)。科學(xué)計算器 第二章 系統(tǒng)設(shè)計 4第二章 系統(tǒng)設(shè)計2.1 功能說明2.1.1 系統(tǒng)總體功能分析此程序采用 VC+編寫,是一個基于對話框的應(yīng)用程序,當(dāng)用戶在對話框點擊相應(yīng)按鈕時,先執(zhí)行輸出按鈕對應(yīng)字符串,用戶可以在對話框上選擇相應(yīng)地科學(xué)計算操作按鈕,通過程序內(nèi)相關(guān)代碼完成相應(yīng)
18、地科學(xué)計算功能。它的設(shè)計按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面,必要的交互信息,簡約的美觀效果。使用人員能快捷簡單地進(jìn)行操作,即可單機(jī)按鈕進(jìn)行操作,也可直接通過鍵盤輸入。即時準(zhǔn)確地獲取所需要的計算結(jié)果,充分降低了數(shù)字計算的難度和節(jié)約了時間,對人們的生活有一定幫助。其具體的功能有:(1)運(yùn)算更加簡介。(2)兩個對話框,一個顯示輸入數(shù)據(jù),另一個顯示計算結(jié)果。(3)實現(xiàn)計算求和,求平均的功能。(4)計算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。(5)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點以 0 開頭等不正?,F(xiàn)象。 (6) “CE”按鈕可以清除所有已輸出的數(shù)據(jù)從頭計算。我們在學(xué)習(xí)生活中,常會
19、遇到一些繁雜的數(shù)值運(yùn)算,這時候我們就必須用到科學(xué)計算器,所以便著手開發(fā)了這個計算器程序,以便用于自己的學(xué)習(xí)工作。要計算功能有以下幾個方面:加法,減法,乘法,除法,求冪,求模,求和,求平均,求平方根,求三角函數(shù),進(jìn)制換算等。2.1.2 系統(tǒng)功能1、十進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡單計算??茖W(xué)計算器 第二章 系統(tǒng)設(shè)計 52、科學(xué)計算函數(shù),包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運(yùn)算。3、以角度、弧度兩種方式實現(xiàn)上述部分函數(shù),梯度沒有提供。4、不同進(jìn)制有不同的運(yùn)算方式。5、判斷輸入輸出的正確性。2.1.3 課程設(shè)計內(nèi)容課題名稱:課題名稱:計算器的實現(xiàn)基本說明:基本
20、說明:我們實現(xiàn)了一個標(biāo)準(zhǔn)計算器的運(yùn)算以及科學(xué)計算器的運(yùn)算的集成,使其較之:方便、快捷、輕松,看上去美觀大方,少了切換的繁瑣操作,并且我們做的更加簡約。2.2 設(shè)計大概2.2.1 設(shè)計思路所編寫的計算器是基于對話框的程序,能夠進(jìn)行加減乘除的運(yùn)算,開方,立方,三角函數(shù),反三角函數(shù),階乘,求和,求平均,進(jìn)制轉(zhuǎn)換運(yùn)算等功能,仿照 Windows 自帶的計算器進(jìn)行編寫,如圖 2.2.1;開 始選擇進(jìn)制選擇角度采取默認(rèn)形勢直接輸入數(shù)據(jù)選擇鍵值進(jìn)行計算類型運(yùn)算錯誤匯總不同計算類型進(jìn)行計算計算結(jié)果輸出到輸出框顯示結(jié) 束在輸入框顯示按鍵計算信息如圖 2.2.1 設(shè)計思路圖科學(xué)計算器 第二章 系統(tǒng)設(shè)計 62.2.
21、2 控件定義如表 2.2.2(只列舉一部分控件)IDCAPTIONMemberIDC_0IDC_909m_0m_9IDC_AIDCFAFm_Am_FIDC_ADD+m_ADDIDC_POINT.m_POINTIDC_POWxym_PowIDC_SQRTSqrtm_SQRTIDC_DIVID/m_DIVIDIDC_CECEm_CEIDC_CCm_CIDC_BACKSPACEBackspacem_BACKSPACEIDC_LnLnm_LNIDC_LogLogm_LOGIDC_SinSinm_SINIDC_CosCosm_COSIDC_TanTanm_TANIDC_ACOSacosm_ACOSIDC
22、_ATANatanm_ATANIDC_XORXorm_XorIDC_BUTTON43MSm_BUTTON43IDC_MODModm_MODIDC_BUTTON40Dmsm_BUTTON40IDC_BUTTON49Avem_BUTTON49IDC_BUTTON48Summ_BUTTON48IDC_BUTTON47Sm_BUTTON47IDC_NOTNotm_NOTIDC_BUTTON46Datm_BUTTON46IDC_PIpim_PIIDC_BUTTON42M+m_BUTTON42IDC_BUTTON45MCm_BUTTON45IDC_Equal=m_EQUAL科學(xué)計算器 第二章 系統(tǒng)設(shè)計 7
23、2.2.3 變量的定義以及初始化int Sel,EndSel; /定義輸入或插入時光標(biāo)的位置int Expr_pos; /詞法分析表達(dá)式時,標(biāo)記當(dāng)前字符位置int OS_pos ; /操作數(shù)棧頂位置int old_pos; /歷史表達(dá)式的位置int old_head; /歷史表達(dá)式數(shù)組中最最前位置int old_back; /歷史表達(dá)式數(shù)組中最最后位置int error_mark; /標(biāo)記表達(dá)式錯誤int parentheses_count; /記錄表達(dá)式中括號的個數(shù)double operand_Stack200; /操作數(shù)棧CString old_expression20; /表達(dá)式歷史記錄
24、/以上為定義部分,以下為初始化部分Sel=0;/輸入的光標(biāo)位置EndSel=0;/插入光標(biāo)的位置Expr_pos = 0; /當(dāng)前字符的位置OS_pos = 0 ;/操作數(shù)棧頂位置old_pos=old_head=old_back=0;/歷史表達(dá)式的位置error_mark=0;/表達(dá)式錯誤parentheses_count=0; /括號的個數(shù)OLD_ANSWER = _T(); /初始化科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 8第三章 系統(tǒng)實現(xiàn)3.1 窗體設(shè)計3.1.1 設(shè)計步驟利用 MFC AppWinzard 生成計算器應(yīng)用程序框架具體步驟如下:(1)執(zhí)行 VC+ 6.0 程序,選擇文件新建命令,
25、轉(zhuǎn)到工程選項卡,選擇MFC AppWizard(exe)選項,然后在工程名稱輸入名字,一般以 C 開頭,也可以自定義,位置路徑自定義。(2)單擊確定,彈出 MFC 應(yīng)用程序向?qū)?步驟 1 對話框。選中單選按鈕基本對話框,單擊完成即可,如圖所示:3.1.2 控件定義(1)(1)為控件添加成員變量已經(jīng)在系統(tǒng)設(shè)計里面列舉出,這里就不再重復(fù);為控件添加成員變量已經(jīng)在系統(tǒng)設(shè)計里面列舉出,這里就不再重復(fù);(2)為控件添加消息,查看-類向?qū)?,轉(zhuǎn)到 Message Maps 選項卡,為控件添加 BN_CLICKED 消息,單擊確定即可,具體哪些控件這里就不再詳細(xì)介紹了。圖 3.1.1 文件新建示意圖科學(xué)計
26、算器 第三章 系統(tǒng)實現(xiàn) 93.1.3 一部分操作截圖圖 3.1.3 相關(guān)實現(xiàn)的截圖圖.3.1.2 添加消息的截圖科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 103.2 程序核心代碼3.2.1 數(shù)字鍵和字母鍵核心代碼void CCalculatorDlg:OnNumberKey(UINT nID) /按鍵輸入m_Edit.GetSel(Sel,EndSel); /得到輸入框的光標(biāo)位置switch(nID)/ 在光標(biāo)位置插入按鈕表示的字符, 在輸入框插入相應(yīng)的數(shù)值case IDC_0: m_expression.Insert(Sel,0);break;case IDC_1: m_expression.Inser
27、t(Sel,1);break;case IDC_2: m_expression.Insert(Sel,2);break;case IDC_3: m_expression.Insert(Sel,3);break;case IDC_4: m_expression.Insert(Sel,4);break;case IDC_5: m_expression.Insert(Sel,5);break;case IDC_6: m_expression.Insert(Sel,6);break;case IDC_7: m_expression.Insert(Sel,7);break;case IDC_8: m_e
28、xpression.Insert(Sel,8);break;case IDC_9: m_expression.Insert(Sel,9);break; case IDC_A: m_expression.Insert(Sel,A);break;case IDC_B: m_expression.Insert(Sel,B);break;case IDC_C: m_expression.Insert(Sel,C);break;case IDC_D: m_expression.Insert(Sel,D);break;case IDC_E: m_expression.Insert(Sel,E);break
29、;case IDC_F: m_expression.Insert(Sel,F);break;Sel+; /光標(biāo)后移UpdateData(FALSE); m_Edit.SetSel(Sel,Sel); /更新輸入框光標(biāo)后移位置UpdateData(FALSE);3.2.2 計算類型函數(shù)的核心代碼void CCalculatorDlg:compute(Operator Op) /根據(jù)操作計算類型,計算結(jié)果switch(Op)case OpAdd: operand_StackOS_pos-2+=operand_StackOS_pos-1;OS_pos-;break;case OpSubtract:科
30、學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 11 operand_StackOS_pos-2-=operand_StackOS_pos-1;OS_pos-;break;case OpMultiply: operand_StackOS_pos-2*=operand_StackOS_pos-1;OS_pos-;break;case OpDivide: if(operand_StackOS_pos-1=0) error(5); break; else operand_StackOS_pos-2/=operand_StackOS_pos-1; OS_pos-; break; case OpMod: if(operan
31、d_StackOS_pos-1=0) error(5); break; else _int64 temp=0;temp = (_int64)(operand_StackOS_pos-2/operand_StackOS_pos-1); operand_StackOS_pos-1*=temp; operand_StackOS_pos-2-=operand_StackOS_pos-1; OS_pos-; break; case OpPower: operand_StackOS_pos-2 = pow(operand_StackOS_pos-2,operand_StackOS_pos-1); OS_p
32、os-;break;case OpLog: operand_StackOS_pos-1=log10(operand_StackOS_pos-1);break;case OpLn: operand_StackOS_pos-1=log(operand_StackOS_pos-1);break;case OpSqrt: operand_StackOS_pos-1=sqrt(operand_StackOS_pos-1);break;case OpExp: operand_StackOS_pos-1 = exp(operand_StackOS_pos-1);break;case OpSin: if(m_
33、Radio2 =0) operand_StackOS_pos-1=operand_StackOS_pos-1*PI/180; operand_StackOS_pos-1 = sin(operand_StackOS_pos-1);break;case OpCos: if(m_Radio2 =0) operand_StackOS_pos-1=operand_StackOS_pos-1*PI/180; operand_StackOS_pos-1 = cos(operand_StackOS_pos-1); break;case OpTan: if(m_Radio2 =0) operand_StackO
34、S_pos-1=operand_StackOS_pos-1*PI/180; operand_StackOS_pos-科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 121 = tan(operand_StackOS_pos-1); break;case OpAsin: if(operand_StackOS_pos-11|operand_StackOS_pos-11|operand_StackOS_pos-1-1) error(9); return ; operand_StackOS_pos-1 = acos(operand_StackOS_pos-1); if(m_Radio2 =0) operand_Stac
35、kOS_pos-1=operand_StackOS_pos-1*180/PI; break; case OpAtan: operand_StackOS_pos-1 = atan(operand_StackOS_pos-1);if(m_Radio2 =0)operand_StackOS_pos-1=operand_StackOS_pos-1*180/PI; break; case OpFactorial: if(OS_pos=0) error(1); return ; long k; k =(long) operand_StackOS_pos-1; if(k operand_StackOS_po
36、s-1) error(8); return ; _int64 temp =1; for(long i=1; i=k ;i+) temp *= i; /operand_StackOS_pos-1 *=i; /* m_result.Format(_T(%I64X),temp); UpdateData(FALSE); MessageBox(sdfsd);*/ operand_StackOS_pos-1=(double)temp; break;3.2.3 提示錯誤的核心代碼void CCalculatorDlg:error(int error_type) /錯誤類型 /錯誤處理switch(error
37、_type)科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 13case 1: m_result=錯誤:缺少操作數(shù)!;break;case 2: m_result=錯誤:括號不匹配!;break;case 3: m_result=錯誤:函數(shù)名不正確!;break;case 4: m_result=錯誤:非法輸入!;break;case 5: m_result=錯誤:出現(xiàn)除數(shù)為零!;break;case 6: m_result=錯誤:函數(shù)缺少括號!;break;case 7: m_result=錯誤:缺少運(yùn)算符!;break;case 8: m_result=錯誤:階乘操作數(shù)不是整數(shù)!;break;case 9:
38、 m_result=asin 和 acos 函數(shù)計算必須在-1,1內(nèi)!;break; error_mark=1; 3.2.4 進(jìn)制轉(zhuǎn)換的核心代碼void CCalculatorDlg:getword(WordType & w_type ,Operator& Fun_Ope,int system) /進(jìn)制轉(zhuǎn)為浮點型/ 詞法分析器, 參數(shù) w_type ,Fun_Ope,system 分別表示 單詞類型,操作運(yùn)算類型,進(jìn)制類型 int t=m_expression.GetLength(); if(t=0) error(4); return ; /表達(dá)式為空則返回 if(Expr_pos=0& m_
39、expressionExpr_pos=A& m_expressionExpr_pos=F)/當(dāng)前字符為數(shù)字則 轉(zhuǎn)換為浮點數(shù)壓入操作數(shù)棧if(Expr_pos+1)=a& m_expressionExpr_pos=z)/*當(dāng)前字符為字母則 ,把字母串保存到 str 中 */char str100=;int i=0;while(Expr_pos=a& m_expressionExpr_pos=t) error(3); w_type = TyFun; return ;/表達(dá)式結(jié)束,則報錯/* * 以下 if else 語句為匹配字符串*/if(strcmp(str,ln)=0)Fun_Ope=OpL
40、n;else if(strcmp(str,log)=0)Fun_Ope=OpLog;else if(strcmp(str,sqrt)=0)Fun_Ope=OpSqrt;else if(strcmp(str,exp)=0)Fun_Ope=OpExp;else if(strcmp(str,sin)=0)Fun_Ope=OpSin;else if(strcmp(str,cos)=0)Fun_Ope=OpCos;else if(strcmp(str,tan)=0)Fun_Ope=OpTan;else if(strcmp(str,asin)=0)Fun_Ope=OpAsin;else if(strcmp
41、(str,acos)=0)Fun_Ope=OpAcos;else if(strcmp(str,atan)=0)Fun_Ope=OpAtan;/else if(m_expressionExpr_pos=()w_type = TyFun;else error(3);w_type = TyFun; return ; /匹配不到函數(shù)單詞,報錯 w_type = TyFun; return ;switch(m_expressionExpr_pos)/* 當(dāng)前字符為操作運(yùn)算符,則設(shè)置單詞類型,和操作運(yùn)算 */case +: Fun_Ope=OpAdd; Expr_pos+; w_type=oper; br
42、eak;case -: Fun_Ope=OpSubtract; Expr_pos+;w_type=oper;break;case *: Fun_Ope=OpMultiply; Expr_pos+;w_type=oper; break;case /: Fun_Ope=OpDivide; Expr_pos+; w_type=oper;break;case : Fun_Ope=OpPower; Expr_pos+; w_type=oper;break;case (: Fun_Ope=Left_par; Expr_pos+; w_type=oper;break;case ): Fun_Ope=Righ
43、t_par; Expr_pos+; w_type=oper;break;case %: Fun_Ope=OpMod; Expr_pos+; w_type=oper;break;default: error(4); return ;/其他字符都為非法字符,報錯 科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 15 else if(Expr_pos=t)w_type=TyEnd; /表達(dá)式已結(jié)束,返回 else error(4); return ;3.2.5 八進(jìn)制單選按鈕消息響應(yīng)函數(shù)代碼void CCalculatorDlg:OnOctal() /八進(jìn)制單選按鈕消息響應(yīng)函數(shù)/ TODO: Add your con
44、trol notification handler code here WordType type ; Operator Ope; CString result; int system; system = m_Radio1; m_Radio1 = 2 ; if(OLD_ANSWER.GetLength()0) m_expression = OLD_ANSWER; UpdateData(FALSE); getword(type,Ope,system); if(type=Tynum&(!error_mark)&(Expr_pos=m_expression.GetLength() out_chang
45、e(m_Radio1); result = m_result; clean_all(); m_expression = m_result = result; UpdateData(FALSE) Sel = m_expression.GetLength(); m_Edit.SetSel(Sel,Sel); UpdateData(FALSE); else科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 16Expr_pos = 0;OS_pos = 0 ;error_mark=0;parentheses_count=0;m_result = _T();m_2.EnableWindow(TRUE);m_3.Enable
46、Window(TRUE);m_4.EnableWindow(TRUE);m_5.EnableWindow(TRUE);m_6.EnableWindow(TRUE);m_7.EnableWindow(TRUE);m_8.EnableWindow(FALSE);m_9.EnableWindow(FALSE);m_A.EnableWindow(FALSE);m_B.EnableWindow(FALSE);m_C.EnableWindow(FALSE);m_D.EnableWindow(FALSE);m_E.EnableWindow(FALSE);m_F.EnableWindow(FALSE); m_
47、PI.EnableWindow(FALSE);3.2.6 二進(jìn)制單選按鈕消息響應(yīng)函數(shù)void CCalculatorDlg:OnBinary() /二進(jìn)制單選按鈕消息響應(yīng)函數(shù)/ TODO: Add your control notification handler code here /E_AddSub(); WordType type ; 科學(xué)計算器 第三章 系統(tǒng)實現(xiàn) 17 Operator Ope; CString result; int system; system = m_Radio1; m_Radio1 = 3 ; if(OLD_ANSWER.GetLength()0) m_expr
48、ession = OLD_ANSWER; UpdateData(FALSE); getword(type,Ope,system); if(type=Tynum&(!error_mark)&(Expr_pos=m_expression.GetLength() out_change(m_Radio1); result = m_result; clean_all(); m_expression = m_result = result; UpdateData(FALSE); Sel = m_expression.GetLength(); m_Edit.SetSel(Sel,Sel); UpdateData(FALSE); elseExpr_pos
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年特色勞動合同轉(zhuǎn)換合同
- 2024版房產(chǎn)全年服務(wù)承包協(xié)議版B版
- 中考傳統(tǒng)文化常識單選題100道及答案
- 2023-2024學(xué)年安徽省蚌埠市七年級(上)期末歷史試題(含答案)
- 2024年職工工傷補(bǔ)償協(xié)議范本
- 2024版全新供貨蔬菜合同
- 2022年中考地理一輪復(fù)習(xí):聚落
- 2022-2024年山東中考英語試題匯編:完形填空
- 2024年適用個人貸款協(xié)議模板版B版
- 2024版建筑工程款支付三方協(xié)議范本
- 山東省濟(jì)南市2023-2024學(xué)年高一上學(xué)期1月期末考試數(shù)學(xué)試題(解析版)
- 文字學(xué)概要完整版本
- 手術(shù)室搶救工作制度
- ce自我聲明模板
- 鋼閘門監(jiān)理評估報告
- 高檔養(yǎng)老社區(qū)項目計劃書
- 蛇年銷售年會發(fā)言稿范文
- 國管局住房制度改革相關(guān)政策解答
- 無縫鋼管服務(wù)方案
- 排澇泵站養(yǎng)護(hù)方案范本
- XX醫(yī)院臨床醫(yī)療質(zhì)量考核通用記錄表
評論
0/150
提交評論