




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告題目:計(jì)算表達(dá)式的值1.問題描述對于給定的一個(gè)表達(dá)式,表達(dá)式中可以包括常數(shù)、算術(shù)運(yùn)行符(“+”、“-”、“*”、“/”)和括號(hào),編寫程序計(jì)算表達(dá)式的值。基本要求:從鍵盤輸入一個(gè)正確的中綴表達(dá)式,將中綴表達(dá)式轉(zhuǎn)換為對應(yīng)的后綴表達(dá)式,并計(jì)算后綴表達(dá)式的值。對于表達(dá)式中的簡單錯(cuò)誤,能夠給出提示,并給出錯(cuò)誤信息;表達(dá)式中可以包括單個(gè)字母表示的變量。測試數(shù)據(jù):任意選取一個(gè)符合題目要求的表達(dá)式。提高要求:(1)能夠處理多種操作符。 (2)實(shí)現(xiàn)包含簡單運(yùn)算的計(jì)算器。 (3)實(shí)現(xiàn)一個(gè)包含簡單運(yùn)算和函數(shù)運(yùn)算的計(jì)算器。2.需求分析(1)軟件的基本功能本軟件實(shí)在win32工程下實(shí)現(xiàn)的帶有界面和圖標(biāo)的功能
2、較為齊全的計(jì)算器。此計(jì)算器分三個(gè)方面進(jìn)行計(jì)算,分別為數(shù)值表達(dá)式的計(jì)算,字母表達(dá)式的計(jì)算和函數(shù)計(jì)算??捎涉I盤或用鼠標(biāo)點(diǎn)擊按鍵輸入帶有數(shù)字或字母的中綴表達(dá)式,程序可以將輸入的帶有數(shù)字或字母的中綴表達(dá)式轉(zhuǎn)換成對應(yīng)的后綴表達(dá)式,并計(jì)算只含有數(shù)字的后綴表達(dá)式的值。本軟件支持含小數(shù)、多位數(shù)等多種操作數(shù)的處理,可以計(jì)算含加、減、乘、除、百分號(hào)、求余、求冪,求階乘,求三角函數(shù)的值等多種運(yùn)算符和函數(shù)的表達(dá)式(2) 輸入/輸出形式用戶可通過打開圖標(biāo)彈出來的計(jì)算器界面任意點(diǎn)擊操作。對于在輸入時(shí)發(fā)生的簡單錯(cuò)誤,軟件通過彈出對話框給出提示并且在提示錯(cuò)誤的同時(shí)自動(dòng)將用戶的出錯(cuò)輸入略去轉(zhuǎn)化成正確的表達(dá)式進(jìn)行計(jì)算,用戶也可選
3、擇清楚操作然后重新輸入a.對于數(shù)值和函數(shù)表達(dá)式軟件會(huì)輸出其表達(dá)式的后綴表達(dá)式和計(jì)算結(jié)果并保留六位小數(shù);b.對于字母表達(dá)式因字母無法進(jìn)行數(shù)值運(yùn)算,軟件僅輸出其后綴表達(dá)式的值;清楚按鈕可以清楚有已經(jīng)輸入或輸出的數(shù)據(jù)從頭計(jì)算;軟件窗口可實(shí)現(xiàn)最小化。并且輸入編輯框可進(jìn)行修改,復(fù)制,粘貼等操作,但后綴表達(dá)式和求值結(jié)果的編輯框中的內(nèi)容不可修改,只能執(zhí)行復(fù)制操作。(3) 測試數(shù)據(jù)要求用戶可以輸入一個(gè)符合要求的中綴表達(dá)式,也可以輸入一個(gè)包含簡單錯(cuò)誤的表達(dá)式。表達(dá)式中可以包括各種類型的常數(shù)以及字母等,操作符包括(+、-、*、/、%、!、sin、cos、tan、mod,pi)等,同時(shí)表達(dá)式還可以包括各種括號(hào)和三角
4、函數(shù)。3. 概要設(shè)計(jì)(1) 抽象數(shù)據(jù)類型根據(jù)題目的要求,本程序?qū)λ休斎氲膬?nèi)容全部存儲(chǔ)到字符數(shù)組中,考慮到將中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式和后綴表達(dá)式求值時(shí)需要用到棧,所以本程序定義了字符棧和數(shù)據(jù)棧,并定義了表達(dá)式的類,將對表達(dá)式的操作全部在類中進(jìn)行。最后將將所有的數(shù)據(jù)類型以及核心算法操作包含在頭文件hanshu.h中,程序開始時(shí)通過調(diào)用此頭文件執(zhí)行操作。a.字符棧數(shù)據(jù)類型:class CStack功能:1.取棧頂元素2.棧頂元素出棧3.元素入棧4.判斷棧是否為空(空返回1否則返回0)棧中存儲(chǔ)的元素類型必須是字符型b.浮點(diǎn)型數(shù)據(jù)棧類型:class DStack功能:1.取棧頂元素2.棧頂元素出棧3
5、.元素入棧4.判斷棧是否為空(空返回1否則返回0)棧中存儲(chǔ)的元素類型必須是浮點(diǎn)型c.對表達(dá)式進(jìn)行處理的類:class Expression主要功能:1. 將中綴表達(dá)式轉(zhuǎn)化成后綴表達(dá)式,數(shù)字,運(yùn)算符兩兩之間加空格2. 后綴表達(dá)式求值3. 三角函數(shù)求值(2) 主程序流程開始彈出計(jì)算器界面1. 數(shù)值表達(dá)式計(jì)算2. 字母表達(dá)式計(jì)算3. 函數(shù)運(yùn)算輸入函數(shù)表達(dá)式輸入字母表達(dá)式輸入數(shù)值表達(dá)式輸出錯(cuò)誤提示輸出后綴表達(dá)式輸出計(jì)算結(jié)果輸出錯(cuò)誤提示輸出錯(cuò)誤提示輸出后綴表達(dá)式N清除重新輸入是否退出?Y結(jié)束(3) 模塊調(diào)用關(guān)系本軟件的函數(shù)包括:a. WinMain函數(shù):軟件的主函數(shù),用于調(diào)用對話框b. DialogPr
6、oc函數(shù):計(jì)算器對話框的消息回調(diào)函數(shù),用于接收和處理按鍵操作c. Power函數(shù):求某個(gè)數(shù)值任意冪的函數(shù)d. Factorial函數(shù):求階乘函數(shù)數(shù)據(jù)類型:CStack字符棧;DStack浮點(diǎn)型數(shù)據(jù)棧;Expression對表達(dá)式進(jìn)行處理的類。其中Power函數(shù)和Factorial函數(shù)還有所有的數(shù)據(jù)類型和算法都包含在定義的hanshu.h的頭文件中,在WinMain函數(shù)中的DialogProc函數(shù)中調(diào)用。資源文件:a. Dialog資源:對話框資源文件b. Icon資源:圖標(biāo)資源文件結(jié)構(gòu)關(guān)系如下:WinMain函數(shù)DialogProc函數(shù)Dialog資源hanshu.h的頭文件Icon資源Exp
7、ressionCStackFactorial函數(shù)Power函數(shù)DStack4 詳細(xì)設(shè)計(jì)(1) 界面設(shè)計(jì)如圖所示界面,創(chuàng)建按鈕并為每個(gè)控件創(chuàng)建ID號(hào)控件ID:(2) 實(shí)現(xiàn)概要設(shè)計(jì)的數(shù)據(jù)類型CStack字符棧;class CStack private:char datasta100;int top;public:CStack()top=-1;char Pop()return datastatop-;char Get()return datastatop;void Push(char x)datasta+top=x;int IsEmpty()if(top=-1)return 1;else retur
8、n 0;DStack浮點(diǎn)型數(shù)據(jù)棧;class DStack private:double datasta100;int top;public:DStack()top=-1;double Pop()return datastatop-;double Get()return datastatop;void Push(double x)datasta+top=x;int IsEmpty()if(top=-1)return 1;else return 0;Expression對表達(dá)式進(jìn)行處理的類class Expressionprivate:char InArr1024;DStack dsta; CS
9、tack csta; char arr20; public:char AfterArr1024; Expression() void get(char preArr)strcpy(InArr,preArr);int CaseDetermine(); void InfixToSuffix(); double SuffixExpressionEvaluation (); double TrigonometricFunction(); Expression() ;(3) 主程序:實(shí)現(xiàn)對話框調(diào)用和資源加載int APIENTRY WinMain(HINSTANCE hInstance, HINSTAN
10、CE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)DialogBox(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,DialogProc);return 0;(4) 它模塊的算法描述。DialogProc函數(shù):對按鈕消息先進(jìn)行截獲,然后調(diào)用函數(shù)進(jìn)行處理BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 頭文件hanshu.h:包含中綴轉(zhuǎn)換成后綴和后綴求值的算法5編碼與調(diào)試分析(1) 問題:由于用到棧的數(shù)據(jù)結(jié)構(gòu),在兩
11、個(gè)連續(xù)的優(yōu)先級相同的運(yùn)算符時(shí),如2*3/5程序會(huì)先計(jì)算除法再計(jì)算乘法,這顯然是錯(cuò)誤的。解決辦法:碰到優(yōu)先級相同的運(yùn)算符時(shí),交換運(yùn)算符的出棧順序,使上式達(dá)到先計(jì)算乘法再計(jì)算除法的目的。(2) 問題:由于向計(jì)算器輸入的表達(dá)式全都是以字符的形式存儲(chǔ),在計(jì)算sin,cos,tan等有多個(gè)字符的函數(shù)時(shí),程序不易識(shí)別。解決辦法:在程序存儲(chǔ)信息時(shí),將sin,cos,tan用每個(gè)函數(shù)的開頭字母的大寫形式的單個(gè)函數(shù)代替該函數(shù),函數(shù)將會(huì)被容易識(shí)別。(3) 問題:無法處理多位數(shù)或多位小數(shù)解決辦法:將小數(shù)點(diǎn)一起讀入到字符串中,并在中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式時(shí)使運(yùn)算符與運(yùn)算符之間、數(shù)字與運(yùn)算符之間、數(shù)字與數(shù)字之間、字母
12、與字母之間、字母與運(yùn)算符之間全部用空格隔開以便于區(qū)分。6使用說明打開快捷方式后彈出計(jì)算器界面1. 點(diǎn)擊計(jì)算類型(數(shù)值表達(dá)式、字母表達(dá)式、函數(shù)運(yùn)算)2. 點(diǎn)擊按鈕(或鍵盤)輸入表達(dá)式3. 點(diǎn)擊等號(hào)得出結(jié)果4. 點(diǎn)擊“清除”按鈕對上一次輸入和計(jì)算結(jié)果進(jìn)行清空5. 點(diǎn)擊“退出”關(guān)閉計(jì)算器7測試結(jié)果準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果。(1) 含小數(shù)、多位數(shù)、及括號(hào)的表達(dá)式顯示結(jié)果(2) 求余、求冪含百分號(hào)的表達(dá)式的顯示結(jié)果(3) sin,cos,tan等三角函數(shù)的求值結(jié)果(4) 對于錯(cuò)誤輸入的處理8自學(xué)知識(shí)自主學(xué)習(xí)了哪些新知識(shí)及主要知識(shí)點(diǎn)描述。在算法設(shè)計(jì)上自學(xué)了如何利用atof函數(shù)將字符型數(shù)據(jù)轉(zhuǎn)化成浮點(diǎn)型數(shù)據(jù)以及如何判斷字母大小寫,這些都是比較容易的,這次課程設(shè)計(jì)主要自學(xué)經(jīng)歷在設(shè)計(jì)界面方面,通過查閱書籍資料,了解了win32編
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 希沃培訓(xùn)課件答案
- 電氣考研數(shù)學(xué)試卷
- 2025年04月北京首都醫(yī)科大學(xué)附屬北京同仁醫(yī)院派遣制司機(jī)招聘1人(四)筆試歷年專業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 試驗(yàn)安全培訓(xùn)課件模板
- 牡丹江市辦公室選調(diào)工作人員考試真題2024
- 高血糖引起的急性并發(fā)癥與護(hù)理
- 高三衡水?dāng)?shù)學(xué)試卷
- 高新高考數(shù)學(xué)試卷
- 廣東調(diào)研數(shù)學(xué)試卷
- 固始縣考編數(shù)學(xué)試卷
- 互聯(lián)網(wǎng)行業(yè)產(chǎn)品經(jīng)理專業(yè)顧問聘用協(xié)議
- 2025年 東北石油大學(xué)招聘考試筆試試題附答案
- 2025年安徽省中考地理真題試卷(含答案)
- 人教版2025年八年級英語下學(xué)期期末總復(fù)習(xí)(專題訓(xùn)練)專題01單項(xiàng)選擇【期末易錯(cuò)100題】(人教版)(學(xué)生版+解析)
- 企業(yè)財(cái)務(wù)內(nèi)控管理制度
- 2025以色列與伊朗沖突全面解析課件
- 警察抓捕教學(xué)課件
- 2025年農(nóng)產(chǎn)品質(zhì)量安全追溯體系在食品安全監(jiān)管中的應(yīng)用與改進(jìn)報(bào)告
- 做賬實(shí)操-漁業(yè)行業(yè)的賬務(wù)處理分錄實(shí)例
- 2025-2030年中國手持三維激光掃描儀行業(yè)市場深度分析及發(fā)展趨勢與投資前景研究報(bào)告
- 2025-2030年中國單壁碳納米管(SWNT)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
評論
0/150
提交評論