版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 計算機科學與技術學部C+課程設計題 目 科學計算器 學 部 計算機科學與技術 班 級 計科 1103 指 導 教 師 李 軍 姓 名 劉 明 學 號 11430421817667 2012 年 6 月 27 日科學計算器 摘 要 摘 要計算器的產(chǎn)生和發(fā)展是建立在電子計算機基礎之上的。硬件方面,自 1946 年第一臺電子計算機誕生以來,計算機技術的發(fā)展可謂日新月異,從龐大的只能在實驗室里供研究使用的計算機到如今能適應不同環(huán)境滿足不同需求的各種各樣的計算機;運算速度從每秒幾千次到每秒幾百億次;處理器從焊有上百萬個電子管的大的驚人的電子板到只有指甲大小的集成電路;現(xiàn)在計算機在硬件方面的發(fā)展已達到了
2、每三個月更新?lián)Q代一次的驚人速度。軟件方面,也已從機器語言、匯編語言、高級語言發(fā)展到現(xiàn)如今的第四代語言非結構化、面向對象、可視化的語言。在這個計算器里面,我們實現(xiàn)了簡單的四則運算以及更高功能的科學計算,它的外觀簡潔美觀,使人們能快捷簡單的操作。能準確的得到計算結果,大大減少了數(shù)字計算所需要的時間,為人們的生活帶來便利。此系統(tǒng)在 Windows 7 環(huán)境下,使用 VC+ 6.0 進行編寫。簡單計算器包括雙目運算和單目運算功能,雙目運算符包含基本的四則運算及乘冪功能,單目運算符包含正余弦,對數(shù),開方,階乘,倒數(shù),進制轉換等運算??蓪ζ漭斎肴我獠僮鲾?shù),包括小數(shù)和整數(shù)及正數(shù)和負數(shù)進行以上的所有運算并能連
3、續(xù)運算。并且包含清除,退格功能等。我們所做的計算器其功能較 Windows 7 下的計算器還是很不夠多,沒有其菜單的實現(xiàn)功能項,沒有其小巧的標準計算器。關鍵詞: 計算器;運算;VC+等科學計算器 摘 要 科學計算器 分配表 課程設計任務分配表: 表 1 分配信息表姓名姓名主要工作主要工作組長組長劉 明程序設計和編寫舒兆月實驗報告書的制作組員組員凡力強實驗報告書的制作課程設計成績表:表 2 成績表姓名姓名學號學號班級班級成績成績組長組長劉 明11430421817667計科 1103舒兆月11430727814558計科 1103組員組員凡力強11430426154534計科 1103科學計算器
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; /定義輸入或插入時光標的位置int Expr_pos; /詞法分析表達式時,標記當前字符位置int OS_pos ; /操作數(shù)棧頂位置int old_pos; /歷史表達式的位置int o
5、ld_head; /歷史表達式數(shù)組中最最前位置int old_back; /歷史表達式數(shù)組中最最后位置int error_mark; /標記表達式錯誤int parentheses_count; /記錄表達式中括號的個數(shù)double operand_Stack200; /操作數(shù)棧CString old_expression20; /表達式歷史記錄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)進制轉為浮點型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 ); /錯誤標記函數(shù) void clean_all(); /清空表達式和計算結果protected:HICON m_hIcon;DEC
7、LARE_MESSAGE_MAP();程序中所用到相關專業(yè)知識:類,對象數(shù)組,友元函數(shù),繼承與派生,指針, 枚舉,,數(shù)棧,算法科學計算器目 錄 目 錄前 言.1第一章 系統(tǒng)需求.21.1 簡介說明.21.1.1 系統(tǒng)要求 .21.1.2 具體任務 .21.1.3 研究目的 .21.2 設計分析.31.2.1 可行性分析 .31.2.2 需求分析 .31.2.3 設計結構 .31.3 開發(fā)環(huán)境.31.3.1 運行環(huán)境 .31.3.2 開發(fā)工具 .31.3.3 關于 Visual C+ 6.0 .4第二章 系統(tǒng)設計.52.1 功能說明 .52.1.1 系統(tǒng)總體功能分析 .52.1.2 系統(tǒng)功能 .
8、52.1.3 課程設計內容 .62.2 設計大概 .62.2.1 設計思路 .62.2.2 控件定義 .72.2.3 變量的定義以及初始化 .8第三章 系統(tǒng)實現(xiàn).93.1 窗體設計 .93.1.1 設計步驟 .93.1.2 控件定義 .93.1.3 一部分操作截圖 .103.2 程序核心代碼.11科學計算器目 錄 3.2.1 數(shù)字鍵和字母鍵核心代碼 .113.2.2 計算類型函數(shù)的核心代碼 .113.2.3 提示錯誤的核心代碼 .133.2.4 進制轉換的核心代碼 .143.2.5 八進制單選按鈕消息響應函數(shù)代碼 .163.2.6 二進制單選按鈕消息響應函數(shù) .17第四章 系統(tǒng)運行.204.1
9、 測試以及運行界面 .204.1.1 程序主界面測試 .204.1.2 運行的計算結果 .204.1.3 轉換進制計算 .214.2 測試.224.2.1 測試研究與選擇 .224.2.2 測試環(huán)境 .22總 結.23參考文獻.24科學計算器 前 言 0前 言Visual C+(簡稱 VC)是 Microsoft 公司推出的目前使用極為廣泛的基于Windows 平臺的 C+可視化開發(fā)環(huán)境。為了方便計算,我們編寫了計算器。本報告在李軍老師的指導下,并且形成了比較完善的體系,本設計報告具體包含以下內容:第一章直接介紹了基于 C+語言,熟悉 Visual 6.0 的開發(fā)環(huán)境和 C+控制臺方式的調試和
10、運行,使學生熟悉 Visual C+ 6.0 更自然。以及我們編程的背景與意義及目的,主要介紹我們編寫這個程序用來做什么。第二章介紹了我們編程的怎么去做,設計時的一些想法。第三章介紹了我們編程實用的一些技術與核心代碼,設計時的具體做法。第四章介紹我們運行時的一些具體操作,以及我們給出的總結與參考文獻。本程序編寫一個程序來實現(xiàn)算術計算器。通過數(shù)組和指針以及枚舉來存放輸入的每一數(shù)字或運算符號函數(shù)的記錄(包括 1、2、3 等數(shù)字,+、-、*、等運算符號)中。通過一些單擊按鈕實現(xiàn)一些標準與科學的操作混合運算,然后顯示出結果。本報告由劉明、凡力強、舒照月編寫,由李軍老師對全報告進行修改,以及很多同學以及
11、網(wǎng)絡朋友提供幫助,在此表示感謝。由于水平有限,不當之處在所難免,懇請讀者批評指正。編 者2012.6科學計算器 第一章 系統(tǒng)需求 1第一章第一章 系統(tǒng)需求系統(tǒng)需求1.1 簡介說明1.1.1 系統(tǒng)要求1、用 C+語言實現(xiàn)程序設計;2、利用 MFC 進行相關信息處理;3、畫出總模塊的流程圖;4、系統(tǒng)的各個功能模塊要求用函數(shù)的形式實現(xiàn);5、界面友好(良好的人機互交) ,程序要有注釋;1.1.2 具體任務1、定義以及初始化,輸入 09,AF,運算符等信息;2、輸入簡單的運算符計算式,并顯示出計算結果;3、畫出總流程圖;4、編寫代碼;5、程序分析與調試;1.1.3 研究目的1、熟悉掌握基于對話框的程序編
12、寫;2、熟練掌握放置控件及 control 工具條的使用;3、掌握控件擺放的基本方法,熟練掌握 Dialog 的使用;4、熟悉建立對話框步驟;5、了解 CBUTTON 類的實用;6、鞏固并加深學生對 C+語言程序設計知識的理解;7、培養(yǎng)學生面向對象的程序設計思想,與其認識面向過程和對象的區(qū)別;8、進一步掌握和應用 VC+ 6.0 集成開發(fā)環(huán)境;9、提高運用 C+語言解決實際問題的能力;10、初步掌握開發(fā)小型實用軟件的基本方法,能獨立設計、實踐操作;11、掌握書寫程序設計開發(fā)文檔的能力(書寫課程設計實驗報告) ;科學計算器 第一章 系統(tǒng)需求 21.2 設計分析1.2.1 可行性分析伴隨著經(jīng)濟全球
13、化,計算機的普及發(fā)展,軟件行業(yè)在社會占著舉足輕重的作用。我們在學校生活中常會遇到一些繁雜的數(shù)值運算,我們必須要用到科學計算器,所以便著手開發(fā)了這個計算器程序,既緊隨科技發(fā)展的前沿,又方便了我們的生活,具有一定的現(xiàn)實意義。1.2.2 需求分析本軟件主要用于計算機 Windows XP 以上的用戶使用,這次課程設計一般是實現(xiàn)簡單計算器的功能。需要程序實現(xiàn):加減乘除,開方,平方,倒數(shù)等運算功能;還要實現(xiàn)數(shù)據(jù)的輸入,輸出,計算,顯示及程序退出等功能。另外還可以實現(xiàn)多種科學計算的功能,如:三角函數(shù)的計算,弧度與角度間的轉換,對數(shù)指數(shù)的計算,二、八、十、十六進制的轉換等。1.2.3 設計結構第一章主要介紹
14、了我們做這個課程設計目地是做什么。第二章主要介紹了我們怎么去設計這個課程報告以及編程。第三章主要介紹了我們實現(xiàn)代碼的關鍵性技術與源碼段的介紹。第四章主要介紹了我們做這個程序的運行結果與一些運算的截圖。1.3 開發(fā)環(huán)境1.3.1 運行環(huán)境(1) Windows 7 64 位/XP 32 位系統(tǒng)(2) Visual C+ 6.0(中文版)編譯環(huán)境1.3.2 開發(fā)工具C+語言科學計算器 第一章 系統(tǒng)需求 31.3.3 關于 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+源代碼編輯器,資源編輯器和使用內部調試器,并且可以創(chuàng)建項目文件。Visual C+6.0 不僅包括編輯器,還包括許多有用組件,通過這些組件的協(xié)同工作,可以在 Visual C+6.0 集成環(huán)境中輕松地完成創(chuàng)建源文件、編輯資源以及對程序的編譯、連接和調試等各項工作。VC+6.0 是 Windows 95/98、XP 或 Windows NT 下的一個應用程序,本身對軟件沒有特殊要求。就是說它對環(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,在安裝包的提示下進行,對初學者可采用“典型安裝”方式。在安裝好 VC6.0 系統(tǒng)后,有時根據(jù)需要添加或刪除某些部件,可插入 CD 盤重新執(zhí)行 Setup.exe 安裝程序,安裝程序會檢測當前系統(tǒng)安裝 VC6.0 的組件,用戶單擊“添加/刪除”按鈕后,在“安裝維護”對話框中選定要與一般的應用軟件一樣,有以下兩種啟動方式:(1)通過“開始”按鈕,選擇“程序”菜單,然后打開“Microsoft Vi
17、sual C+6.0 中文版”子菜單中的“Microsoft Visual C+6.0 中文版”程序。(2)用戶也可以使用命令行啟動 VC,單擊“開始”按鈕后選擇“運行”命令,在“運行”對話框中輸入 C:program FilesMicrosoft Visual StudioVC98VC6.exe(按默認盤符和路徑安裝即可)??茖W計算器 第二章 系統(tǒng)設計 4第二章 系統(tǒng)設計2.1 功能說明2.1.1 系統(tǒng)總體功能分析此程序采用 VC+編寫,是一個基于對話框的應用程序,當用戶在對話框點擊相應按鈕時,先執(zhí)行輸出按鈕對應字符串,用戶可以在對話框上選擇相應地科學計算操作按鈕,通過程序內相關代碼完成相應
18、地科學計算功能。它的設計按軟件工程的方法進行,系統(tǒng)具有良好的界面,必要的交互信息,簡約的美觀效果。使用人員能快捷簡單地進行操作,即可單機按鈕進行操作,也可直接通過鍵盤輸入。即時準確地獲取所需要的計算結果,充分降低了數(shù)字計算的難度和節(jié)約了時間,對人們的生活有一定幫助。其具體的功能有:(1)運算更加簡介。(2)兩個對話框,一個顯示輸入數(shù)據(jù),另一個顯示計算結果。(3)實現(xiàn)計算求和,求平均的功能。(4)計算功能基本上是用系統(tǒng)內部函數(shù)。(5)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點以 0 開頭等不正?,F(xiàn)象。 (6) “CE”按鈕可以清除所有已輸出的數(shù)據(jù)從頭計算。我們在學習生活中,常會
19、遇到一些繁雜的數(shù)值運算,這時候我們就必須用到科學計算器,所以便著手開發(fā)了這個計算器程序,以便用于自己的學習工作。要計算功能有以下幾個方面:加法,減法,乘法,除法,求冪,求模,求和,求平均,求平方根,求三角函數(shù),進制換算等。2.1.2 系統(tǒng)功能1、十進制數(shù)的加、減、乘、除、乘方、取模等簡單計算??茖W計算器 第二章 系統(tǒng)設計 52、科學計算函數(shù),包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運算。3、以角度、弧度兩種方式實現(xiàn)上述部分函數(shù),梯度沒有提供。4、不同進制有不同的運算方式。5、判斷輸入輸出的正確性。2.1.3 課程設計內容課題名稱:課題名稱:計算器的實現(xiàn)基本說明:基本
20、說明:我們實現(xiàn)了一個標準計算器的運算以及科學計算器的運算的集成,使其較之:方便、快捷、輕松,看上去美觀大方,少了切換的繁瑣操作,并且我們做的更加簡約。2.2 設計大概2.2.1 設計思路所編寫的計算器是基于對話框的程序,能夠進行加減乘除的運算,開方,立方,三角函數(shù),反三角函數(shù),階乘,求和,求平均,進制轉換運算等功能,仿照 Windows 自帶的計算器進行編寫,如圖 2.2.1;開 始選擇進制選擇角度采取默認形勢直接輸入數(shù)據(jù)選擇鍵值進行計算類型運算錯誤匯總不同計算類型進行計算計算結果輸出到輸出框顯示結 束在輸入框顯示按鍵計算信息如圖 2.2.1 設計思路圖科學計算器 第二章 系統(tǒng)設計 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科學計算器 第二章 系統(tǒng)設計 7
23、2.2.3 變量的定義以及初始化int Sel,EndSel; /定義輸入或插入時光標的位置int Expr_pos; /詞法分析表達式時,標記當前字符位置int OS_pos ; /操作數(shù)棧頂位置int old_pos; /歷史表達式的位置int old_head; /歷史表達式數(shù)組中最最前位置int old_back; /歷史表達式數(shù)組中最最后位置int error_mark; /標記表達式錯誤int parentheses_count; /記錄表達式中括號的個數(shù)double operand_Stack200; /操作數(shù)棧CString old_expression20; /表達式歷史記錄
24、/以上為定義部分,以下為初始化部分Sel=0;/輸入的光標位置EndSel=0;/插入光標的位置Expr_pos = 0; /當前字符的位置OS_pos = 0 ;/操作數(shù)棧頂位置old_pos=old_head=old_back=0;/歷史表達式的位置error_mark=0;/表達式錯誤parentheses_count=0; /括號的個數(shù)OLD_ANSWER = _T(); /初始化科學計算器 第三章 系統(tǒng)實現(xiàn) 8第三章 系統(tǒng)實現(xiàn)3.1 窗體設計3.1.1 設計步驟利用 MFC AppWinzard 生成計算器應用程序框架具體步驟如下:(1)執(zhí)行 VC+ 6.0 程序,選擇文件新建命令,
25、轉到工程選項卡,選擇MFC AppWizard(exe)選項,然后在工程名稱輸入名字,一般以 C 開頭,也可以自定義,位置路徑自定義。(2)單擊確定,彈出 MFC 應用程序向導-步驟 1 對話框。選中單選按鈕基本對話框,單擊完成即可,如圖所示:3.1.2 控件定義(1)(1)為控件添加成員變量已經(jīng)在系統(tǒng)設計里面列舉出,這里就不再重復;為控件添加成員變量已經(jīng)在系統(tǒng)設計里面列舉出,這里就不再重復;(2)為控件添加消息,查看-類向導命令,轉到 Message Maps 選項卡,為控件添加 BN_CLICKED 消息,單擊確定即可,具體哪些控件這里就不再詳細介紹了。圖 3.1.1 文件新建示意圖科學計
26、算器 第三章 系統(tǒng)實現(xiàn) 93.1.3 一部分操作截圖圖 3.1.3 相關實現(xiàn)的截圖圖.3.1.2 添加消息的截圖科學計算器 第三章 系統(tǒng)實現(xiàn) 103.2 程序核心代碼3.2.1 數(shù)字鍵和字母鍵核心代碼void CCalculatorDlg:OnNumberKey(UINT nID) /按鍵輸入m_Edit.GetSel(Sel,EndSel); /得到輸入框的光標位置switch(nID)/ 在光標位置插入按鈕表示的字符, 在輸入框插入相應的數(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+; /光標后移UpdateData(FALSE); m_Edit.SetSel(Sel,Sel); /更新輸入框光標后移位置UpdateData(FALSE);3.2.2 計算類型函數(shù)的核心代碼void CCalculatorDlg:compute(Operator Op) /根據(jù)操作計算類型,計算結果switch(Op)case OpAdd: operand_StackOS_pos-2+=operand_StackOS_pos-1;OS_pos-;break;case OpSubtract:科
30、學計算器 第三章 系統(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-科學計算器 第三章 系統(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)科學計算器 第三章 系統(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=錯誤:缺少運算符!;break;case 8: m_result=錯誤:階乘操作數(shù)不是整數(shù)!;break;case 9:
38、 m_result=asin 和 acos 函數(shù)計算必須在-1,1內!;break; error_mark=1; 3.2.4 進制轉換的核心代碼void CCalculatorDlg:getword(WordType & w_type ,Operator& Fun_Ope,int system) /進制轉為浮點型/ 詞法分析器, 參數(shù) w_type ,Fun_Ope,system 分別表示 單詞類型,操作運算類型,進制類型 int t=m_expression.GetLength(); if(t=0) error(4); return ; /表達式為空則返回 if(Expr_pos=0& m_
39、expressionExpr_pos=A& m_expressionExpr_pos=F)/當前字符為數(shù)字則 轉換為浮點數(shù)壓入操作數(shù)棧if(Expr_pos+1)=a& m_expressionExpr_pos=z)/*當前字符為字母則 ,把字母串保存到 str 中 */char str100=;int i=0;while(Expr_pos=a& m_expressionExpr_pos=t) error(3); w_type = TyFun; return ;/表達式結束,則報錯/* * 以下 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)/* 當前字符為操作運算符,則設置單詞類型,和操作運算 */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 ;/其他字符都為非法字符,報錯 科學計算器 第三章 系統(tǒng)實現(xiàn) 15 else if(Expr_pos=t)w_type=TyEnd; /表達式已結束,返回 else error(4); return ;3.2.5 八進制單選按鈕消息響應函數(shù)代碼void CCalculatorDlg:OnOctal() /八進制單選按鈕消息響應函數(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科學計算器 第三章 系統(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 二進制單選按鈕消息響應函數(shù)void CCalculatorDlg:OnBinary() /二進制單選按鈕消息響應函數(shù)/ TODO: Add your control notification handler code here /E_AddSub(); WordType type ; 科學計算器 第三章 系統(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漸凍癥的護理
- 機關綜合辦公樓節(jié)能改造項目實施方案
- 腦疝潛在危險的護理
- 精神科護理學概念
- 項目投資(融資)咨詢服務協(xié)議書
- 氣體滅火系統(tǒng)安全管理制度
- 人教版三年級數(shù)學下冊期末試卷
- 胸腔置管的護理查房
- 2024學校開展打擊治理電信網(wǎng)絡詐騙宣傳活動方案
- 2024企業(yè)員工競業(yè)禁止合同
- 大學體育理論(山東聯(lián)盟)智慧樹知到課后章節(jié)答案2023年下泰山學院
- 紅星照耀中國選擇題及答案50道
- MySQL數(shù)據(jù)庫實用教程-教學大綱(課程思政)
- 高速鐵路客運設施設備課件
- 旁站監(jiān)理記錄表(通用)
- 脈診-教學講解課件
- 供應商信息管理臺賬
- 閉合導線全站儀導線測量記錄表
- 口腔科運用PDCA循環(huán)降低活動義齒返工率品管圈成果匯報
- 常見豬病的防治
- 刑事案件犯罪嫌疑人審前調查報告
評論
0/150
提交評論