




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)報(bào)告題目:計(jì)算表達(dá)式的值1.問題描述對(duì)于給定的一個(gè)表達(dá)式,表達(dá)式中可以包括常數(shù)、算術(shù)運(yùn)行符(“+”、“-”、“*”、“/”)和括號(hào),編寫程序計(jì)算表達(dá)式的值?;疽螅簭逆I盤輸入一個(gè)正確的中綴表達(dá)式,將中綴表達(dá)式轉(zhuǎn)換為對(duì)應(yīng)的后綴表達(dá)式,并計(jì)算后綴表達(dá)式的值。對(duì)于表達(dá)式中的簡(jiǎn)單錯(cuò)誤,能夠給出提示,并給出錯(cuò)誤信息;表達(dá)式中可以包括單個(gè)字母表示的變量。測(cè)試數(shù)據(jù):任意選取一個(gè)符合題目要求的表達(dá)式。提高要求:(1)能夠處理多種操作符。 (2)實(shí)現(xiàn)包含簡(jiǎn)單運(yùn)算的計(jì)算器。 (3)實(shí)現(xiàn)一個(gè)包含簡(jiǎn)單運(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)換成對(duì)應(yīng)的后綴表達(dá)式,并計(jì)算只含有數(shù)字的后綴表達(dá)式的值。本軟件支持含小數(shù)、多位數(shù)等多種操作數(shù)的處理,可以計(jì)算含加、減、乘、除、百分號(hào)、求余、求冪,求階乘,求三角函數(shù)的值等多種運(yùn)算符和函數(shù)的表達(dá)式(2) 輸入/輸出形式用戶可通過打開圖標(biāo)彈出來的計(jì)算器界面任意點(diǎn)擊操作。對(duì)于在輸入時(shí)發(fā)生的簡(jiǎn)單錯(cuò)誤,軟件通過彈出對(duì)話框給出提示并且在提示錯(cuò)誤的同時(shí)自動(dòng)將用戶的出錯(cuò)輸入略去轉(zhuǎn)化成正確的表達(dá)式進(jìn)行計(jì)算,用戶也可選
3、擇清楚操作然后重新輸入a.對(duì)于數(shù)值和函數(shù)表達(dá)式軟件會(huì)輸出其表達(dá)式的后綴表達(dá)式和計(jì)算結(jié)果并保留六位小數(shù);b.對(duì)于字母表達(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) 測(cè)試數(shù)據(jù)要求用戶可以輸入一個(gè)符合要求的中綴表達(dá)式,也可以輸入一個(gè)包含簡(jiǎn)單錯(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á)式的類,將對(duì)表達(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.對(duì)表達(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)用對(duì)話框b. DialogPr
6、oc函數(shù):計(jì)算器對(duì)話框的消息回調(diào)函數(shù),用于接收和處理按鍵操作c. Power函數(shù):求某個(gè)數(shù)值任意冪的函數(shù)d. Factorial函數(shù):求階乘函數(shù)數(shù)據(jù)類型:CStack字符棧;DStack浮點(diǎn)型數(shù)據(jù)棧;Expression對(duì)表達(dá)式進(jìn)行處理的類。其中Power函數(shù)和Factorial函數(shù)還有所有的數(shù)據(jù)類型和算法都包含在定義的hanshu.h的頭文件中,在WinMain函數(shù)中的DialogProc函數(shù)中調(diào)用。資源文件:a. Dialog資源:對(duì)話框資源文件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對(duì)表達(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)對(duì)話框調(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ù):對(duì)按鈕消息先進(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)先級(jí)相同的運(yùn)算符時(shí),如2*3/5程序會(huì)先計(jì)算除法再計(jì)算乘法,這顯然是錯(cuò)誤的。解決辦法:碰到優(yōu)先級(jí)相同的運(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)擊“清除”按鈕對(duì)上一次輸入和計(jì)算結(jié)果進(jìn)行清空5. 點(diǎn)擊“退出”關(guān)閉計(jì)算器7測(cè)試結(jié)果準(zhǔn)備典型的測(cè)試數(shù)據(jù)和測(cè)試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果。(1) 含小數(shù)、多位數(shù)、及括號(hào)的表達(dá)式顯示結(jié)果(2) 求余、求冪含百分號(hào)的表達(dá)式的顯示結(jié)果(3) sin,cos,tan等三角函數(shù)的求值結(jié)果(4) 對(duì)于錯(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人行道養(yǎng)護(hù)車項(xiàng)目建議書
- 中職旅游教學(xué)課件
- 全球化背景下的教育趨勢(shì)比較分析
- 學(xué)生管理中的情感智能培養(yǎng)策略
- 游戲化學(xué)習(xí)在在線教育中的應(yīng)用與挑戰(zhàn)
- 中職教育語文課件《邊城》
- 教學(xué)策略優(yōu)化與學(xué)生心理健康的關(guān)聯(lián)性研究
- 基礎(chǔ)護(hù)士腫瘤科考試題庫及答案
- 2025年銅陵市重點(diǎn)中學(xué)高二物理第二學(xué)期期末聯(lián)考模擬試題含解析
- 商業(yè)領(lǐng)域的科技資源利用策略
- GB/T 10045-2018非合金鋼及細(xì)晶粒鋼藥芯焊絲
- GB 7099-2015食品安全國家標(biāo)準(zhǔn)糕點(diǎn)、面包
- 2023年納雍縣財(cái)政局系統(tǒng)事業(yè)單位招聘筆試題庫及答案解析
- 2023年廣東省普通高中學(xué)業(yè)水平考試及參考答案
- 建筑工程模板施工工藝技術(shù)要點(diǎn)講義豐富課件
- 永能選煤廠生產(chǎn)安全事故應(yīng)急救援預(yù)案
- 浙江省建設(shè)領(lǐng)域簡(jiǎn)易勞動(dòng)合同(A4版本)
- 位置度公差以及其計(jì)算
- 氯化銨危險(xiǎn)化學(xué)品安全周知卡
- 浙江省本級(jí)公務(wù)車輛租賃服務(wù)驗(yàn)收單(格式)
- 糖代謝紊亂的實(shí)驗(yàn)診斷
評(píng)論
0/150
提交評(píng)論