版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+簡單計算器設(shè)計報告本人寫了一個簡單的計算器實現(xiàn)代碼,能實現(xiàn)+-*/及()功能.特此備案.一、開發(fā)環(huán)境:Linux操作系統(tǒng)(Fedora虛擬機), vim、g+等開發(fā)環(huán)境。二、核心算法1、 int Test(string str): 對輸入的const string類型字符串(計算式)進行檢測,發(fā)現(xiàn)其是否為一正確的計算表達式,如果是則return 1,如果否則return 0。如“12+23”為正確則返回1,“12*&45”為錯誤計算式,則返回0。2、 string stringtoarr(const stringstr):對輸入的無括號的conststring類型字符串str進行單
2、元轉(zhuǎn)換,將最終返回其值,如果某個單元“12+23*2”,則將之返回為“58”。3、 string trims(const string&sub):將輸入的帶括號的字符串進行去括號操作,最后返回?zé)o括號的表達式(對帶括號的子字符串部分進行stringtoarr處理,去除括號)。這是一個遞歸函數(shù),如果子字符串中含有多個括號,則反復(fù)地自遞歸調(diào)用。三、編譯與鏈接在虛擬機環(huán)境下,使用vim環(huán)境指令創(chuàng)建Calculation.cpp文件,并用g+進行編譯與鏈接g+ Calculation.cpp oCal.out。并使程序能正常進行實現(xiàn)計算器功能。四、自測試報告。1、對生成的Cal.out文件進行運
3、行,并進行測試用例自測試過程(正異常用例共7組):正常用例測試:第一組(加減):12.2+23.0 24+34.6+34+7854.3 56-23.3+23.5-0.12第二組(乘除):17/56 23*45.75 12.04/34 23.77/34.901*23.0 23.04*0/34.2第三組(+-*/混合):23.4*23.5/34 23+234*34.3/45.9-23/23.04 第四組(+-*/混合,帶一個或多個括號):(12-45.4)/23.78 (12*23.5-23/(25.7-34.6)*12 2*(12-(45.5*(12.3*(11.92-6)-12.4)*2.3)
4、錯誤用例測試:第一組(字符錯誤):12<23.2-34.6 89.6/56,2+2 23%7 212 2a.0-12 12”3-12第二組(被除數(shù)為零): 12/0.0+12第三組(式中括號有誤): 12-(12.7*(35-45.8)+2 12-(12.7*)35-45.8)+2 12*)34-98(-232、部分測試報告截圖如下: *說明:此計算器代碼相對較簡單,是以一個.cpp文件將三個子函數(shù)全部寫下。如果在建立的工程需要將子函數(shù)寫成不成同的.cpp文件,則需要用到Makefile,規(guī)定每個程序源文件的編譯順序,否則改動程序時會經(jīng)歷循環(huán)反復(fù)的編輯à編譯à測試過程
5、,比較費時。五、審評意見:使用遞歸算法實現(xiàn)計算器功能,代碼相對簡潔,但編碼不太規(guī)范,希望在以后的編碼工作中加強規(guī)范編碼的訓(xùn)練。附錄代碼:/Calculation.cpp : 定義控制臺應(yīng)用程序的入口點。 / /#include"stdafx.h" #include<stdio.h> #include<iostream> #include<string> #include<stdlib.h> #include<fstream> usingnamespace std; intTest(string as) string
6、:size_type len=as.size(); string:size_type i=0; int k=0; while(i<len) if(!(asi>='0' &&asi<='9') | asi='+' | asi='-' | asi='*' | asi='/'|asi='.' | asi='(' | asi=')') cout<<"輸入的表達式錯誤,請重新輸入!"<<
7、;endl; return 0; if(asi='/'&&asi+1='0') cout<<"分母不能為零!"<<endl; return 0; if(asi='(') k+; else if(asi=')') k-; if(k<0) return 0; i+; if(k!=0) cout<<"括號輸入錯誤!"<<endl; return 0; return 1; stringstringtoarr(const strin
8、g str) /將一個字符串轉(zhuǎn)化成兩個數(shù)組,一個為數(shù)字數(shù)組保存數(shù)字,另一個為字符數(shù)組,保存符號 /此函數(shù)將用于無括號的計算。 int i=0,z=0,s,temp; float rate=10.0,itemp=0.0; float valueStr=0.0; float a40; char b20; for(i=0;i<40;i+) ai=0.0; /對數(shù)組a20初始化 for(i=0;i<20;i+) bi=' ' /對數(shù)組b10初始化 i=0; /把0賦給i for(i=0;i<stri;i+) if(stri>='0'&&a
9、mp; stri<='9') /如果字符串str.GetAt(i)的內(nèi)容是整數(shù) if(rate=10.0) /整數(shù)部分 itemp=itemp*rate+(stri-'0'); /獲得整數(shù) else /小數(shù)部分 itemp=itemp+rate*(stri-'0'); /獲得小數(shù) rate=rate/10; /每次讓rate小10倍 elseif(stri='.') /如果str.GetAt(i)是小數(shù)點 rate=0.1; /讓rate=0.1,開始計算小數(shù)部分 elseif(stri='+') /如果st
10、r.GetAt(i)是加號 az=itemp;itemp=0; /把itemp的值放入雙精度數(shù)組a中,并把itemp的值改為0 z+; /讓z自加一次 bz='+' /把加號放入字符數(shù)組b中 z+; /讓z自加一次 rate=10.0; /把10賦給rate,確保讀取下個數(shù)字時,先計算整數(shù)部分 else if(stri='-') /如果str.GetAt(i)是減號 az=itemp;itemp=0; /把itemp的值放入雙精度數(shù)組a中,并把itemp的值改為0 z+; /讓z自加一次 bz='-' /把減號放入字符數(shù)組b中 z+; /讓z自加
11、一次 rate=10.0; /把10賦給rate,確保讀取下個數(shù)字時,先計算整數(shù)部分 else if(stri='*') /如果str.GetAt(i)是乘號 az=itemp;itemp=0; /把itemp的值放入雙精度數(shù)組a中,并把itemp的值改為0 z+; /讓z自加一次 bz='*' /把減號放入字符數(shù)組b中 z+; /讓z自加一次 rate=10.0; /把10賦給rate,確保讀取下個數(shù)字時,先計算整數(shù)部分 else if(stri='/') /如果str.GetAt(i)是除號 az=itemp;itemp=0; /把itemp
12、的值放入雙精度數(shù)組a中,并把itemp的值改為0 z+; /讓z自加一次 bz='/' /把除號放入字符數(shù)組b中 z+; /讓z自加一次 rate=10.0; /把10賦給rate,確保讀取下個數(shù)字時,先計算整數(shù)部分 az=itemp; /把最后一個整數(shù)itemp的值放入雙精度數(shù)組a中 s=z; /把z的值賦給變量s,用來控制計算結(jié)果的循環(huán)中的條件,s即為數(shù)與值的大小。 for(i=0;i<=s;i+) if(bi='/') /當循環(huán)遇到除號時 ai+1=1/ai+1; /把ai+1的值改為1/ai+1 bi='*' /把bi的值改為乘號
13、for(i=0;i<=s;i+) while(bi='*') /當循環(huán)遇到乘號時 ai-1=ai-1*ai+1; for(temp=i+1;temp+2<40;temp+) atemp=atemp+2; for(temp=i;temp+2<20;temp+) btemp=btemp+2; valueStr=a0; for(i=0;i<s;i+) if(bi='+') valueStr+=ai+1; else if(bi='-') valueStr-=ai+1; char svalue16; sprintf(svalue,&
14、quot;%f" , valueStr); string ssavalue(svalue); return ssavalue; stringtrims(const string &sub) string s1,s2,s3,sp,ss; int i; int counter=0; int left,right; if(string:size_typepos1=sub.find(")")=string:npos) return sub; for(i=0;subi;i+) if(subi='(') left=i; counter+; break;
15、 for(i=left+1;subi;i+) if(subi='(') counter+; else if(subi=')') counter-; if(counter=0) right=i; break; s1=sub.substr(0,left); sp=sub.substr(left+1,right-left-1); s2=stringtoarr(trims(sub.substr(left+1,right-left-1); s3=trims(sub.substr(right+1); ss=s1+s2+s3; return ss; voidcalcation
16、(string &str1) int stTe; if(stTe=Test(str1)<=0) cout<<"輸入字符串有誤,請重新輸入!"<<endl; return; string sk=trims(str1); string ssk=stringtoarr(sk); cout<<ssk<<endl; cout<<"-"<<endl; intmain() string input_str; int p=1; int tsTest; /string tss; while(1) cout<<"請輸入表達式(退出請輸入小寫exit):"<<endl; cin>>i
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國電子熱管理產(chǎn)品行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實施研究報告
- 新形勢下紙質(zhì)文具行業(yè)快速做大市場規(guī)模戰(zhàn)略制定與實施研究報告
- 2025-2030年中國銅板帶箔材行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 《花鐘》教案設(shè)計與教學(xué)策略詳解
- 廣西賀州市八步區(qū)2023-2024學(xué)年五年級上學(xué)期英語期末試卷
- 二年級數(shù)學(xué)計算題專項練習(xí)1000題匯編集錦
- 床具產(chǎn)品知識培訓(xùn)課件
- 二零二五年度建筑垃圾清運勞務(wù)分包協(xié)議3篇
- 二零二五年度建材城商鋪租賃合同廣告位租賃及收益分成協(xié)議3篇
- 2025版加油站高品質(zhì)油品供應(yīng)與倉儲管理合同3篇
- 2024年南京市第一醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024北京海淀五年級(上)期末英語(教師版)
- 2024年民營醫(yī)院醫(yī)生與醫(yī)院合作協(xié)議
- 室內(nèi)設(shè)計CAD制圖(海南工商職業(yè)學(xué)院)知到智慧樹答案
- 2024-2025學(xué)年語文二年級上冊 部編版期末測試卷(含答案)
- 期末模擬卷 2024-2025學(xué)年人教版數(shù)學(xué)六年級上冊(含答案)
- 醫(yī)院搶救領(lǐng)導(dǎo)工作小組制度
- 2024年國家公務(wù)員考試《申論》真題(地市級)及答案解析
- 上海市縣(2024年-2025年小學(xué)五年級語文)人教版摸底考試((上下)學(xué)期)試卷及答案
- 電力市場概論張利課后參考答案
- 2024年道路運輸企業(yè)兩類人員安全考核試題庫-上(單選、多選題)
評論
0/150
提交評論