c++課程設計四則運算doc_第1頁
c++課程設計四則運算doc_第2頁
c++課程設計四則運算doc_第3頁
c++課程設計四則運算doc_第4頁
c++課程設計四則運算doc_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C+課程設計四則運算docVc+課程設計報告題目名稱:四則運算班級:測控技術與儀器姓名:周賽學號:914101170150 一、程序功能簡介該程序用字符串形式接受一個帶括號的四則運算表達式,然后按照四則運算優(yōu)先級的 算法先括號,后乘方、乘除、加減這樣的順序將這個算式解出。該程序的設計比較巧妙,是在主程序中反復查找最后一對括號,將其中的結果計算出 來,去掉括號,這樣的過程持續(xù)下去,最后導致所有的括號都去除,解出算式。二、課 程設計要求(1)用類的要求改寫程序,將數(shù)據(jù)和函數(shù)封裝到類中。(2)修改主程序,使程序可以反復運算,直到選擇退出為止。(3)擴充程序功能, 使程序適合浮點數(shù)運算。(4)增加程序

2、的判斷功能,當有非法的輸入時(如字母等),給出提示信息并退出運 算,當輸入帶有空格時,能將空格濾除。三、程序設計思想(1)類的封裝實際上該字符串類基本類似于c + +中的string類,比string類多定義了浮點數(shù)與 字符串的相互轉換的函數(shù),輸入輸出友元函數(shù),可以從string類派生出CStr類,這樣, 類的定義就更加簡單,且可以利用很多現(xiàn)成的成員函數(shù)。(2)主程序結構算法的設置定義char類型的變量用來存儲字符串,定義CStr類用于對字符串操作函數(shù)的引用。 先對輸入字符串用Judge函數(shù)進行輸入正確性的判斷及取出空格內(nèi)容;然后用charinstr 函數(shù)在字符串中反復查找最后一對括號:用mi

3、dstr函數(shù)提取出來,用calculate函數(shù)進 行計算:并用left函數(shù)與right函數(shù)及addstrings函數(shù)將所找到這對括號的左邊、右邊及運 算結果以字符串的形式合并成一個新的字符串;重復上述操作直至字符串中不再有括號;最后用calculate函數(shù)進行最后的計算返回計算結果。緊接著進行是否退出計算的輸入判斷,完成程序反復運算的功能。四、詳細設計判斷功能:用類中定義的judge函數(shù)實現(xiàn),返回值為1即合法,為0即不合法。去除空格:定義p、s兩個指針指向字符串,r指針指向p指針實現(xiàn)p、s指針在字符 串中的遍歷,用p指針找到第一處空格處,再用s指針找到p指向位置以后最近一個不是 空格處,賦值語

4、句*p=*s,繼續(xù)向下遍歷字符串直至結束。非法輸入:定義destination指向字符串,列舉算式中出現(xiàn)的合法的字符,通過遍歷 字符串找到非法輸入字符,返回0:非法算式邏輯:包括運算符號相連,以及違背運算法則等現(xiàn)象,通過對運算符號的遍 歷比較實現(xiàn):還有包括左括號前或右括號后緊挨數(shù)字,通過定義一個新字符串數(shù)組指向字 符串來尋找括號并判斷括號前后是否合法;非法,返回0:全都合法返回1.數(shù)字字符串轉換成數(shù)字:用類中定義的val函數(shù)實現(xiàn),擴充到浮點數(shù)的運算范圍。定義char類型的source指針指向字符串,用eharinstr函數(shù)尋找字符串中小數(shù)點位 置,以此判斷整數(shù)還是浮點數(shù),如果整數(shù)即用10的相應

5、位數(shù)的乘方來乘以相應字符位置 字符的數(shù)字,并進行累加,最后返回result;如果是浮點數(shù),則分為整數(shù)與小數(shù)部分依次 進行計算,整數(shù)同上,小數(shù)部分則用相應字符位置字符所代表的數(shù)字除以10的相應位數(shù) 的乘方,并進行累加,最后將整數(shù)小數(shù)部分的和返回result。字符串的連接,通過類中定義的left、right、midstr、addstrings函數(shù)配合實現(xiàn)。 通過left、right、midstr三個函數(shù)進行字符串的提取,addstrtings函數(shù)進行三個指針 的遍歷實現(xiàn)兩個字符串的合并。數(shù)字的字符串化,通過類中定義的str函數(shù)實現(xiàn)。類比val函數(shù)一樣區(qū)分整數(shù)與浮點數(shù),將數(shù)字的每一個數(shù)字單個提取出來

6、通過與字符 '0'的比較轉化為相應字符復制給遞增的指針。算式的計算,通過類中定義的 calculate函數(shù)實現(xiàn)。依次按照的順序用charinstr函數(shù)尋找運算符號,并用相應函數(shù)進行字符串與 數(shù)字之間的轉換,以及新的字符串的合并,返回計算結果。友元函數(shù)的定義,定義輸入輸出友元函數(shù),重載賦值運算符等,實現(xiàn)字符串之間的 加法。五、程序調試的過程出現(xiàn)問題:開始編寫完整個程序,出現(xiàn)許多編寫錯誤,一個個改正:在實現(xiàn)浮點數(shù)的擴充過程中的小數(shù)部分,以及輸入合法性的判斷過程漏掉情況,指針的誤用等;有時單獨的一個函數(shù)不能搞懂或錯誤不能改正,就單獨在編寫一個類似程序,多次調試運行,來弄懂并加以改正:

7、解決辦法:查閱書籍,上網(wǎng)搜索,獨立思考,詢問同學老師,多次上機調試等:六、 輸入輸出數(shù)據(jù)開始界面:非法輸入判斷:非法字母:運算符緊挨:左括號前或右括號后為數(shù)字:括號為中文符號:清理空格:運算第一個輸入字符串算式結果:退出判斷:繼續(xù)運算:退出運算:浮點數(shù)的加入:七、課程設計總結經(jīng)過這次龐大復雜的課程設計過程,是我對C+知識有了更加深刻的理解,引起了我 對C+語言世界的無限好奇心和探索欲,感慨到了世界的神奇與微妙,程序控制的無限用 途以及自身的渺?。涸谄渲芯帉懪袛嗬ㄌ柷昂笫欠窈戏ㄕZ句時,指針遍歷不易實現(xiàn),于是經(jīng)過多次調試后 重新定義了一個字符串數(shù)組來實現(xiàn),這給了我很大的啟示,只要努力并不斷嘗試新的

8、東西一定會成功:還有程序中友元函數(shù)與運算符重載部分,由于知識掌握不夠牢固,反復調試查閱書籍,最終得到了解決,也使得我對這方面的知識獲得了更為深刻的理解與認知;浮點數(shù)的加入要進行小數(shù)點數(shù)位的取舍,函數(shù)中設定為小數(shù)點兒后六位,因此浮點數(shù)運算過程中每次都會出現(xiàn)六位小數(shù)的現(xiàn)象,使得結果有0.000001的誤差,通過單 獨編寫類似函數(shù)多次調試,使得我對C+語言中對double型向int型變量轉化的規(guī)律的理 解獲得了更深層次的理解:通過編寫過程,體會到了細節(jié)的厲害,有時一個微小的錯誤就能使整個程序而不能正確運行;八、源程序注解#include trinclude #includechar pause;算出

9、字符串的長素int len(char*source) int retval=O;class CStr private:;void CStr: :left(CStr & strl, int length) 字符串/從參數(shù)指向的地址左邊取Length個字符賦給目的int nlen; 字符串長度char *pstr; /字符串首地址CStr 0 ();CStr (char *str) nlen=len(str);pstr=str; int GetlenO return nlen; char*Getstr0 return pstr; char*Getpstr0 return pstr;void

10、 midstr(CStr & strl,int start,int length); void left (CStr & strl,int length);/*返回指定字符串類中從nStart序號開返回字符串長度返回字符串首地址拷貝構造函數(shù)定義字符串類while(*(source+retval+)!=0) return -retval;public:CStr (CStr&str) nlen=str. GetlenO ;pstr=str. Getstr 0 ;始nLength長度的字符*/*返回指定字符串中從左邊開始nLength個字符*/*返回指定字符串中從右邊開始nL

11、ength個字符*/void right(CStr & strl,int length); friend int charinstr(char) ; double val0; str(double val);calculate。; 計算該字符串所代表的四則運算的值(內(nèi)無括號)友元函數(shù),判斷字符是否在字符串中/求字符串代表的數(shù)字字符的數(shù)值將數(shù)值表示成字符串的形式重載輸入運算符friend istream &operator» (istream &, CStr &) ; int Judge (); 判斷輸入是否 合法,濾除空格 )char*destinat

12、ion=pstr; char *source=strl. Getstr0; *(destination+- length+l)=0;目的字符串以0結尾while (length>=0) 賦值 Length 個字符*(destination+length)=*(source+length);從參數(shù)指向的地址處從start位void CStr: :midstr(CStr & strl, int start, int length)置開始取 length 個字符 賦給目的字符串void CStr: :right (CStr & strl, int length) 字符串int

13、char instr ( char *destination, char char_to_f ind)目的字符串中,若在,返 回其所在位置,若不再返回0 int pos=0; CStr::str(double value) char*tempdest=pstr; int a=0; int b= (int)value;double c=value-b;int multiplier=1000000000; while(*(destination+pos)!=0)return 0; return pos;/循環(huán)查找 if(char_to_f ind=*(destination+pos+)找到,返回其

14、位置char *source=strl. Getstr (); while(*source!=0) source+; char*destination=pstr; source-=length;/跳至欲賦值的首地址*(destination+-length+l)=0; char *source=strl. Getstr0;source+=start-l; 開始賦值處的地址 * (destination+length+O=O; char*dest inat ion=pstr;目的字符串以0結尾while (length>=0) 賦值 Length 個字符*(dest inat ion+length)=*(source+length);從參數(shù)指向的地址右邊取Length個字符賦給目的移至字符串尾部目的字符串以0結尾while (length>=0) 賦值 Length 個字符 *(destination+length)=*(source+length); 判斷字符串

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論