版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計報告題目:計算表達式的值1.問題描述對于給定的一個表達式,表達式中可以包括常數(shù)、算術(shù)運行符(“+”、“-”、“*”、“/”)和括號,編寫程序計算表達式的值?;疽螅簭逆I盤輸入一個正確的中綴表達式,將中綴表達式轉(zhuǎn)換為對應(yīng)的后綴表達式,并計算后綴表達式的值。對于表達式中的簡單錯誤,能夠給出提示,并給出錯誤信息;表達式中可以包括單個字母表示的變量。測試數(shù)據(jù):任意選取一個符合題目要求的表達式。提高要求:(1)能夠處理多種操作符。 (2)實現(xiàn)包含簡單運算的計算器。 (3)實現(xiàn)一個包含簡單運算和函數(shù)運算的計算器。2.需求分析(1)軟件的基本功能本軟件實在win32工程下實現(xiàn)的帶有界面和圖標(biāo)的功能
2、較為齊全的計算器。此計算器分三個方面進行計算,分別為數(shù)值表達式的計算,字母表達式的計算和函數(shù)計算??捎涉I盤或用鼠標(biāo)點擊按鍵輸入帶有數(shù)字或字母的中綴表達式,程序可以將輸入的帶有數(shù)字或字母的中綴表達式轉(zhuǎn)換成對應(yīng)的后綴表達式,并計算只含有數(shù)字的后綴表達式的值。本軟件支持含小數(shù)、多位數(shù)等多種操作數(shù)的處理,可以計算含加、減、乘、除、百分號、求余、求冪,求階乘,求三角函數(shù)的值等多種運算符和函數(shù)的表達式(2) 輸入/輸出形式用戶可通過打開圖標(biāo)彈出來的計算器界面任意點擊操作。對于在輸入時發(fā)生的簡單錯誤,軟件通過彈出對話框給出提示并且在提示錯誤的同時自動將用戶的出錯輸入略去轉(zhuǎn)化成正確的表達式進行計算,用戶也可選
3、擇清楚操作然后重新輸入a.對于數(shù)值和函數(shù)表達式軟件會輸出其表達式的后綴表達式和計算結(jié)果并保留六位小數(shù);b.對于字母表達式因字母無法進行數(shù)值運算,軟件僅輸出其后綴表達式的值;清楚按鈕可以清楚有已經(jīng)輸入或輸出的數(shù)據(jù)從頭計算;軟件窗口可實現(xiàn)最小化。并且輸入編輯框可進行修改,復(fù)制,粘貼等操作,但后綴表達式和求值結(jié)果的編輯框中的內(nèi)容不可修改,只能執(zhí)行復(fù)制操作。(3) 測試數(shù)據(jù)要求用戶可以輸入一個符合要求的中綴表達式,也可以輸入一個包含簡單錯誤的表達式。表達式中可以包括各種類型的常數(shù)以及字母等,操作符包括(+、-、*、/、%、!、sin、cos、tan、mod,pi)等,同時表達式還可以包括各種括號和三角
4、函數(shù)。3. 概要設(shè)計(1) 抽象數(shù)據(jù)類型根據(jù)題目的要求,本程序?qū)λ休斎氲膬?nèi)容全部存儲到字符數(shù)組中,考慮到將中綴表達式轉(zhuǎn)換成后綴表達式和后綴表達式求值時需要用到棧,所以本程序定義了字符棧和數(shù)據(jù)棧,并定義了表達式的類,將對表達式的操作全部在類中進行。最后將將所有的數(shù)據(jù)類型以及核心算法操作包含在頭文件hanshu.h中,程序開始時通過調(diào)用此頭文件執(zhí)行操作。a.字符棧數(shù)據(jù)類型:class CStack功能:1.取棧頂元素2.棧頂元素出棧3.元素入棧4.判斷棧是否為空(空返回1否則返回0)棧中存儲的元素類型必須是字符型b.浮點型數(shù)據(jù)棧類型:class DStack功能:1.取棧頂元素2.棧頂元素出棧3
5、.元素入棧4.判斷棧是否為空(空返回1否則返回0)棧中存儲的元素類型必須是浮點型c.對表達式進行處理的類:class Expression主要功能:1. 將中綴表達式轉(zhuǎn)化成后綴表達式,數(shù)字,運算符兩兩之間加空格2. 后綴表達式求值3. 三角函數(shù)求值(2) 主程序流程開始彈出計算器界面1. 數(shù)值表達式計算2. 字母表達式計算3. 函數(shù)運算輸入函數(shù)表達式輸入字母表達式輸入數(shù)值表達式輸出錯誤提示輸出后綴表達式輸出計算結(jié)果輸出錯誤提示輸出錯誤提示輸出后綴表達式N清除重新輸入是否退出?Y結(jié)束(3) 模塊調(diào)用關(guān)系本軟件的函數(shù)包括:a. WinMain函數(shù):軟件的主函數(shù),用于調(diào)用對話框b. DialogPr
6、oc函數(shù):計算器對話框的消息回調(diào)函數(shù),用于接收和處理按鍵操作c. Power函數(shù):求某個數(shù)值任意冪的函數(shù)d. Factorial函數(shù):求階乘函數(shù)數(shù)據(jù)類型:CStack字符棧;DStack浮點型數(shù)據(jù)棧;Expression對表達式進行處理的類。其中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 詳細設(shè)計(1) 界面設(shè)計如圖所示界面,創(chuàng)建按鈕并為每個控件創(chuàng)建ID號控件ID:(2) 實現(xiàn)概要設(shè)計的數(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浮點型數(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對表達式進行處理的類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) 主程序:實現(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ù):對按鈕消息先進行截獲,然后調(diào)用函數(shù)進行處理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、個連續(xù)的優(yōu)先級相同的運算符時,如2*3/5程序會先計算除法再計算乘法,這顯然是錯誤的。解決辦法:碰到優(yōu)先級相同的運算符時,交換運算符的出棧順序,使上式達到先計算乘法再計算除法的目的。(2) 問題:由于向計算器輸入的表達式全都是以字符的形式存儲,在計算sin,cos,tan等有多個字符的函數(shù)時,程序不易識別。解決辦法:在程序存儲信息時,將sin,cos,tan用每個函數(shù)的開頭字母的大寫形式的單個函數(shù)代替該函數(shù),函數(shù)將會被容易識別。(3) 問題:無法處理多位數(shù)或多位小數(shù)解決辦法:將小數(shù)點一起讀入到字符串中,并在中綴表達式轉(zhuǎn)換成后綴表達式時使運算符與運算符之間、數(shù)字與運算符之間、數(shù)字與數(shù)字之間、字母
12、與字母之間、字母與運算符之間全部用空格隔開以便于區(qū)分。6使用說明打開快捷方式后彈出計算器界面1. 點擊計算類型(數(shù)值表達式、字母表達式、函數(shù)運算)2. 點擊按鈕(或鍵盤)輸入表達式3. 點擊等號得出結(jié)果4. 點擊“清除”按鈕對上一次輸入和計算結(jié)果進行清空5. 點擊“退出”關(guān)閉計算器7測試結(jié)果準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯誤的輸入及輸出結(jié)果。(1) 含小數(shù)、多位數(shù)、及括號的表達式顯示結(jié)果(2) 求余、求冪含百分號的表達式的顯示結(jié)果(3) sin,cos,tan等三角函數(shù)的求值結(jié)果(4) 對于錯誤輸入的處理8自學(xué)知識自主學(xué)習(xí)了哪些新知識及主要知識點描述。在算法設(shè)計上自學(xué)了如何利用atof函數(shù)將字符型數(shù)據(jù)轉(zhuǎn)化成浮點型數(shù)據(jù)以及如何判斷字母大小寫,這些都是比較容易的,這次課程設(shè)計主要自學(xué)經(jīng)歷在設(shè)計界面方面,通過查閱書籍資料,了解了win32編
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版汽車銷售合同擔(dān)保法執(zhí)行合同3篇
- 2025年環(huán)保節(jié)能建筑材料供應(yīng)合同3篇
- 2025年度個人汽車貸款購車合同(新能源汽車購置補貼合同)3篇
- 長沙幼兒師范高等專科學(xué)?!睹绹膶W(xué)史及選讀(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度文化產(chǎn)業(yè)股權(quán)投資保密及運營管理協(xié)議3篇
- 校園心理咨詢服務(wù)體系的完善與創(chuàng)新
- 2025年度夫妻忠誠協(xié)議履行監(jiān)督與違約追究協(xié)議4篇
- 學(xué)生實訓(xùn)前安全教育的重要性與策略
- 心理教育課程在學(xué)生心理健康中的重要性
- 個人車輛抵押權(quán)協(xié)議標(biāo)準(zhǔn)范本2024版
- 三角形與全等三角形復(fù)習(xí)教案 人教版
- 2024年1月高考適應(yīng)性測試“九省聯(lián)考”英語 試題(學(xué)生版+解析版)
- 《朝天子·詠喇叭-王磐》核心素養(yǎng)目標(biāo)教學(xué)設(shè)計、教材分析與教學(xué)反思-2023-2024學(xué)年初中語文統(tǒng)編版
- 成長小說智慧樹知到期末考試答案2024年
- 紅色革命故事《王二小的故事》
- 海洋工程用高性能建筑鋼材的研發(fā)
- 英語48個國際音標(biāo)課件(單詞帶聲、附有聲國際音標(biāo)圖)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 冷庫安全管理制度
- 2023同等學(xué)力申碩統(tǒng)考英語考試真題
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
評論
0/150
提交評論