C++實(shí)現(xiàn)計(jì)算器實(shí)驗(yàn)報(bào)告_第1頁(yè)
C++實(shí)現(xiàn)計(jì)算器實(shí)驗(yàn)報(bào)告_第2頁(yè)
C++實(shí)現(xiàn)計(jì)算器實(shí)驗(yàn)報(bào)告_第3頁(yè)
C++實(shí)現(xiàn)計(jì)算器實(shí)驗(yàn)報(bào)告_第4頁(yè)
C++實(shí)現(xiàn)計(jì)算器實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)報(bào)告完成日期:2014年10月27日實(shí)驗(yàn)題目:完整計(jì)算器需求分析:請(qǐng)實(shí)現(xiàn)一個(gè)只包含加減乘除以及括號(hào)運(yùn)算的簡(jiǎn)單計(jì)算器,俞入格式是正確的,不需要判斷。注意式子中可能會(huì)出現(xiàn)負(fù)數(shù)以及多余的空格,操作數(shù)也可能是多位數(shù)和小數(shù)。概要設(shè)計(jì):設(shè)計(jì)方法:1、 建立一個(gè)fuhao棧存儲(chǔ)符號(hào),—個(gè)num棧存儲(chǔ)數(shù)字,并將輸入存儲(chǔ)到一個(gè)string類型中。2、 依次讀取,每次遇到符號(hào),則將前面緩存的string類型數(shù)字轉(zhuǎn)化成double類型,并且判斷fuhao.top()是否為乘號(hào)或者除號(hào),若是,則和num.top()進(jìn)行運(yùn)算,單出fuhao和num的棧頂,將運(yùn)算結(jié)果壓入num棧中。保證fuhao棧只有加號(hào)和減號(hào)。3、 在stringtodouble()函數(shù)中添加分辨是否有小數(shù)點(diǎn)以及負(fù)號(hào)的語(yǔ)句。4、 最后在用一個(gè)循環(huán),從后往前依次讀取fuhao和num棧的數(shù)據(jù)進(jìn)行運(yùn)算,得出結(jié)果。調(diào)試分析:a、調(diào)試中遇到的問(wèn)題以及解決方案:?jiǎn)栴}:測(cè)試樣例比要求的少了一個(gè),并且每次輸入測(cè)試樣例數(shù)量T時(shí),會(huì)輸出‘0'。

原因:使用了getline()函數(shù),T后面的回車被當(dāng)做了第一組樣例的輸入。解決方案:在輸入第一組測(cè)試數(shù)據(jù)前,用stdio.h里面的getchar()函數(shù),把‘\n'讀取掉,避免影響后面的輸入。b時(shí)間復(fù)雜度:該程序有兩處簡(jiǎn)單的一重循環(huán),因此每一次計(jì)算的時(shí)間復(fù)雜度為0(n)。用戶使用說(shuō)明:暫不支持括號(hào)輸入計(jì)算。支持負(fù)數(shù)、浮點(diǎn)數(shù)的輸入計(jì)算。測(cè)試結(jié)果:測(cè)試樣例數(shù)量:5iPC:\Users\SPEA\Desktop\133...-麗曲wEamEaMEawEl例麗曲wEamEaMEawEl例用1010*pocessexitedwithreturnvalue&*i'essanykeytocontinue. . .實(shí)驗(yàn)心得:實(shí)驗(yàn)心得:分步思想,要分步來(lái)完成一個(gè)看起來(lái)有點(diǎn)復(fù)雜的程序,本例中使用了先計(jì)算乘除,再計(jì)算加減的方法,使得程序簡(jiǎn)單可讀。附錄:13331365_04.cpp#include<iostream>#include<stdio.h>#include<stack>#include<string>usingnamespacestd;〃定義一個(gè)"jisuan"函數(shù)參數(shù)是兩個(gè)double類型數(shù)據(jù)和一個(gè)char計(jì)算符號(hào)返回double類型的計(jì)算結(jié)果doublejisuan(doublea,doubleb,charc){if(c二二'+')returna+b;elseif(c=='-')returna-b;elseif(c=='/')returna/b;elsereturna*b;

〃定義一個(gè)"stringtodouble“函數(shù),把〃定義一個(gè)"stringtodouble“函數(shù),把string轉(zhuǎn)化為double類型數(shù)據(jù)doublestringtodouble(stringa){〃判斷temp第一位是否為負(fù)數(shù)boolisfushu二false;boolisxiaoshu二false;doublexiaoshu=0.1;inttheFirstNum=O;if(a[0]=='-'){isfushu二true;theFirstNum=1;〃判斷是否遇到小數(shù)點(diǎn)〃當(dāng)前浮點(diǎn)數(shù)級(jí)數(shù)}doublenum=0;for(inti二theFirstNum;i<a.size();i++) {if(a[i]=='.')isxiaoshu二true;elseif(!isxiaoshu)num二num*10+(a[i]-'0');elseif(isxiaoshu)num二num+xiaoshu*(a[i]-'0'),xiaoshu二xiaoshu*0.1;returnisfushu二二true?-num:num;intmain(){intT;cout<<"請(qǐng)輸入測(cè)試用例數(shù)量:";cin>>T;for(intj=O;j<T;j++){stringinput;stack<char>fuhao;//存放符號(hào)的棧stack<double>num;//存放數(shù)字的棧stringtemp二"”;doublesum=0;〃當(dāng)?shù)谝淮屋斎霑r(shí),用getchar()來(lái)去掉輸入T后面的那個(gè)、n'if(j==0)charnothing=getchar();cout<<"計(jì)算:";getline(cin,input);for(inti=0;i<input.size();i++){/*當(dāng)讀取到符號(hào)時(shí),將string類的temp轉(zhuǎn)化成double類型,再判斷fuhao.front()是否為'*'或者7',若是,則進(jìn)行計(jì)算,保證fuhao棧里只有加號(hào)和減號(hào)*/if(input[i]二二'+'||input[i]=='-'||input[i]=='/'||input[i]二二'*'){〃當(dāng)temp為空string時(shí),說(shuō)明input[i]是作為負(fù)數(shù)的符號(hào),因此不壓入fuhao棧,而是加到temp第一位if(temp==""){temp+=input[i];}else{num.push(stringtodouble(temp));temp二":if(!fuhao.empty()&&(fuhao.top()=='*'||fuhao.top()=='/')){doublea二num.topO;num.popO;doubleb二num.topO;num.popO;doublec二jisuan(b,a,fuhao.top());fuhao.popO;num.push(c);}fuhao.push(input[i]);}〃如果讀取到數(shù)字,則把它放到temp中elseif((input[i]>='0'&&input[i]<='9')||input[i]二二'.'){temp+二input[i];}}〃單獨(dú)處理最后一個(gè)數(shù)字num.push(stringtodouble(temp));if(!fuhao.empty()&&(fuhao.top()=='*'||fuhao.top()=='/')){doublea二num.topO;num.popO;doubleb二num.topO;num.popO;doublec二jisuan(b,a,fuhao.top());fuhao.popO;num.push(c);}sum二num.topO;num.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論