數(shù)據(jù)結(jié)構(gòu)計(jì)算器(包括中綴轉(zhuǎn)換后綴)課程設(shè)計(jì)報(bào)告_第1頁
數(shù)據(jù)結(jié)構(gòu)計(jì)算器(包括中綴轉(zhuǎn)換后綴)課程設(shè)計(jì)報(bào)告_第2頁
數(shù)據(jù)結(jié)構(gòu)計(jì)算器(包括中綴轉(zhuǎn)換后綴)課程設(shè)計(jì)報(bào)告_第3頁
數(shù)據(jù)結(jié)構(gòu)計(jì)算器(包括中綴轉(zhuǎn)換后綴)課程設(shè)計(jì)報(bào)告_第4頁
數(shù)據(jù)結(jié)構(gòu)計(jì)算器(包括中綴轉(zhuǎn)換后綴)課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論