版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)報(bào)告完成日期:2014年10月27日實(shí)驗(yàn)題目:完整計(jì)算器需求分析:請(qǐng)實(shí)現(xiàn)一個(gè)只包含加減乘除以及括號(hào)運(yù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)的語句。4、最后在用一個(gè)循環(huán),從后往前依次讀取fuhao和num棧的數(shù)據(jù)進(jìn)行運(yùn)算,得出結(jié)果。調(diào)試分析:a、調(diào)試中遇到的問題以及解決方案:問題:測試樣例比要求的少了一個(gè),并且每次輸入測試樣例數(shù)量T時(shí),會(huì)輸出‘0’。原因:使用了getline()函數(shù),T后面的回車被當(dāng)做了第一組樣例的輸入。解決方案:在輸入第一組測試數(shù)據(jù)前,用stdio.h里面的getchar()函數(shù),把‘\n’讀取掉,避免影響后面的輸入。b時(shí)間復(fù)雜度:該程序有兩處簡單的一重循環(huán),因此每一次計(jì)算的時(shí)間復(fù)雜度為O(n)。用戶使用說明:暫不支持括號(hào)輸入計(jì)算。支持負(fù)數(shù)、浮點(diǎn)數(shù)的輸入計(jì)算。測試結(jié)果:測試樣例數(shù)量:5 實(shí)驗(yàn)心得:分步思想,要分步來完成一個(gè)看起來有點(diǎn)復(fù)雜的程序,本例中使用了先計(jì)算乘除,再計(jì)算加減的方法,使得程序簡單可讀。附錄: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; else returna*b;}//定義一個(gè)”stringtodouble“函數(shù),把string轉(zhuǎn)化為double類型數(shù)據(jù)doublestringtodouble(stringa){ boolisfushu=false;//判斷temp第一位是否為負(fù)數(shù) boolisxiaoshu=false;//判斷是否遇到小數(shù)點(diǎn) doublexiaoshu=0.1;//當(dāng)前浮點(diǎn)數(shù)級(jí)數(shù) inttheFirstNum=0; if(a[0]=='-'){ isfushu=true; theFirstNum=1; } 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)輸入測試用例數(shù)量:"; cin>>T; for(intj=0;j<T;j++){ stringinput; stack<char>fuhao;//存放符號(hào)的棧 stack<double>num;//存放數(shù)字的棧 stringtemp=""; doublesum=0; //當(dāng)?shù)谝淮屋斎霑r(shí),用getchar()來去掉輸入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()是否為'*'或者'/',若是,則進(jìn)行計(jì)算,保證fuhao棧里只有加號(hào)和減號(hào)*/ if(input[i]=='+'||input[i]=='-' ||input[i]=='/'||input[i]=='*'){ //當(dāng)temp為空string時(shí),說明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.top(); num.pop(); doubleb=num.top(); num.pop(); doublec=jisuan(b,a,fuhao.top()); fuhao.pop(); 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.top(); num.pop(); doubleb=num.top(); num.pop(); doublec=jisuan(b,a,fuhao.top()); fuhao.pop(); num.push(c); } sum=num.top(); num.pop(); //進(jìn)行最后的加
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語新概念第二冊(cè)課文翻譯練習(xí)
- 幼兒園主題活動(dòng)審議總結(jié)報(bào)告范例
- 電力設(shè)備維護(hù)檢修作業(yè)指南
- 校友會(huì)活動(dòng)致辭及發(fā)言稿范例
- 地下管網(wǎng)巡檢與維護(hù)方案
- 新能源項(xiàng)目安全與質(zhì)量管理措施
- 腦供血不足治療新進(jìn)展與病例分析
- 城市山體土方開挖安全施工方案范本
- 汽車維修廠運(yùn)營管理及客戶關(guān)系維護(hù)
- 勞動(dòng)合同范本與法律風(fēng)險(xiǎn)防范
- 幼兒園大班社會(huì)課件:《我是中國娃》
- 重慶市萬州區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試卷+
- 冰雕雪雕工程投標(biāo)方案(技術(shù)標(biāo))
- 內(nèi)科質(zhì)控會(huì)議管理制度
- 鄭州電力高等專科單招職能測試題
- 竣工圖編制說明-7
- 魯奇加壓氣化爐的開、停車操作課件
- 美國怡口全屋水處置介紹
- 常用實(shí)驗(yàn)室檢查血常規(guī)演示文稿
- 生命第一:員工安全意識(shí)手冊(cè)
- cimatron紫藤教程系列g(shù)pp2運(yùn)行邏輯及block說明
評(píng)論
0/150
提交評(píng)論