C++語(yǔ)言計(jì)算器源代碼_第1頁(yè)
C++語(yǔ)言計(jì)算器源代碼_第2頁(yè)
C++語(yǔ)言計(jì)算器源代碼_第3頁(yè)
C++語(yǔ)言計(jì)算器源代碼_第4頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

1、C+語(yǔ)言編寫。#include #include #include usingnamespacestd; constdoublepi=3.14159265; constdoublee=2.718281828459; constintSIZE=1000; typedefstructnode/ 為了處理符號(hào)而建立的鏈表(如:1+(-2) chardata; node*next; node; typedefstructstack_num/ 存儲(chǔ)數(shù)的棧 double*top; double*base; stack_num; typedefstructstack_char/ 存儲(chǔ)運(yùn)算符號(hào)的棧 char*

2、top; char*base; stack_char; stack_numS_num;/ 定義stack_charS_char;/ 定義charfu18=n,),+,-,*,/,%, Q,L,C,S,T,c,s,t,(; intcompare1000;/表現(xiàn)出各運(yùn)算符號(hào)的優(yōu)先級(jí)doubleshu1000;/存儲(chǔ)數(shù)的數(shù)組doubledai_result;/運(yùn)算的結(jié)果,是為了處理M 運(yùn)算(簡(jiǎn)介函數(shù)里有 M 的定義 ) intbiao=0;/和 dia_result一樣,為了處理 M 運(yùn)算charlineSIZE;/ 輸入的所要計(jì)算的表達(dá)式voidinit()/ 初始化 comparefu0=-2;

3、/ 用數(shù)字的大小表現(xiàn)出符號(hào)的優(yōu)先級(jí)comparefu1=-1; comparefu2=2; comparefu3=2; comparefu4=4; comparefu5=4; comparefu6=4; comparefu7=5; for(inti=8;i=15;i+) comparefui=6; comparefu16=7; S_num.base=(double*)malloc(sizeof(double)*SIZE);/為棧開(kāi)辟空間S_char.base=(char*)malloc(sizeof(char)*SIZE);/同上S_num.top=S_num.base; S_char.top

4、=S_char.base; voidpush_num(doublen)/數(shù)字進(jìn)棧 *+S_num.top=n; voidpush_char(charc)/ 運(yùn)算符號(hào)進(jìn)棧 *+S_char.top=c; doublepop_num()/數(shù)字出棧 doublem=*S_num.top; S_num.top-; returnm; charpop_char()/運(yùn)算符號(hào)出棧 charcc=*S_char.top; S_char.top-; returncc; charget_top_char()/ 得到運(yùn)算符號(hào)的棧中最頂端的運(yùn)算符號(hào) return*S_char.top; doubleoperate(d

5、oubley,charc,doublex)/ 對(duì)兩個(gè)數(shù)計(jì)算 (含是雙目運(yùn)算符 :如*,/等等) doubler; if(c=-) r=x-y; elseif(c=+) r=x+y; elseif(c=/&y!=0) r=x/y; elseif(c=*) r=x*y; elseif(c=) r=1; for(inti=1;i=y;i+) r*=x; elseif(c=%) intr0=(int)x%(int)y; r=double(r0); returnr; doubleoperate_one(doubleone,charcc)/ 對(duì)一個(gè)數(shù)運(yùn)算 (含單目運(yùn)算符 :如 log(L),sin

6、(S)等等) doubler; if(cc=Q) r=sqrt(one); elseif(cc=C) r=cos(one); elseif(cc=S) r=sin(one); elseif(cc=T) r=tan(one); elseif(cc=c) r=acos(one); elseif(cc=s) r=asin(one); elseif(cc=t) r=atan(one); returnr; doubleoperate_L(doublea,doubleb,chardian)/ 求對(duì)數(shù)的值 doubler=log(b)/log(a); returnr; doublecompute()/對(duì)整個(gè)

7、表達(dá)式的計(jì)算 charc;/表示運(yùn)算符號(hào)intp=0;/用于 shu+p,先初始化inti,j; init();/ 進(jìn)行初始化push_char(n); linestrlen(line)=n; linestrlen(line)+1=0; if(biao) push_num(dai_result);/把運(yùn)算的結(jié)果先進(jìn)棧,在這個(gè)結(jié)果的基礎(chǔ)上繼續(xù)進(jìn)行運(yùn)算biao=0; for(i=0;linei!=0;)/ 把表達(dá)式中的數(shù)字字符串轉(zhuǎn)化成可計(jì)算的數(shù)字 intflag=0; intflag1=1;/標(biāo)記是否是運(yùn)算符號(hào)/ intflag2=1;/標(biāo)記是否出現(xiàn) _; doubleh=0; intge;/位數(shù)

8、intbiao_dian=0;/是否是小數(shù)的類型while(1) flag1=1; for(j=0;j=16;j+) if(linei=fuj) flag1=0; break; if(linei=_) break; if(linei=.) i+; ge=0; biao_dian=1; if(linei=P) shu+p=pi; i+; break; if(linei=E) shu+p=e; i+; break; if(flag1) h=h*10+(linei-0); flag=1; i+; if(biao_dian) ge+; else break; if(flag) if(biao_dian

9、) intr=1; for(intk=1;k=0) push_num(m); i+; else if(m=-1) c=+; elseif(m=-2) c=-; elseif(m=-3) c=*; elseif(m=-4) c=/; elseif(m=-5) c=%; elseif(m=-6) c=; elseif(m=-7) c=Q; elseif(m=-8) c=L; elseif(m=-9) c=C; elseif(m=-10) c=S; elseif(m=-11) c=T; elseif(m=-12) c=c; elseif(m=-13) c=s; elseif(m=-14) c=t;

10、elseif(m=-15) c=(; elseif(m=-16) c=); elseif(m=-17) c=n; charch=get_top_char();/ 得到最頂端運(yùn)算符號(hào)if(comparech=comparec&ch!=(&ch!=n) if(ch=Q|ch=C|ch=S|ch=T |ch=c|ch=s|ch=t) doubleone=pop_num(); chardian=pop_char(); push_num(operate_one(one,dian); elseif(ch=L) doubleone_L=pop_num(); doubletwo_L=pop_n

11、um(); chardian=pop_char(); push_num(operate_L(two_L,one_L,dian); else doublex=pop_num(); doubley=pop_num(); chardian=pop_char(); if(dian=/&x=0)/ 判斷是否除了 零 cout由于您除了零,結(jié)果將是錯(cuò)誤的=3) return0; else return1; voidoutput(doubleresult)/打出結(jié)果 printf( 所得結(jié)果是 :); coutresultendl; voidcheck()/檢查表達(dá)式是否合法 voidintrodu

12、ce(); charcc;/決定計(jì)算器按哪種功能進(jìn)行計(jì)算doubleresult;/結(jié)果voidinput();/ 定義if(check_kuohao()&check_char()/看是否合法 ,合法則計(jì)算 result=compute(); output(result); cout輸入一個(gè)字符 M或D或F,決定是否繼續(xù) :cc) if(cc=M) system(cls); introduce(); printf( 您上次所得結(jié)果為 :); coutresultendl; cout在上次計(jì)算結(jié)果的基礎(chǔ)上,請(qǐng)繼續(xù)輸入想計(jì)算的表達(dá)式endl; dai_result=result; biao

13、=1; input();/輸入表達(dá)式break; elseif(cc=D) system(cls); introduce(); cout計(jì)算器已清零 ,請(qǐng)輸入您所要計(jì)算的表達(dá)式endl; input();/輸入表達(dá)式break; elseif(cc=F) system(cls); cout計(jì)算器關(guān)閉 ,謝謝使用 !endl; break; else cout所輸入字符無(wú)效 ,請(qǐng)輸入一個(gè)字符 M或D或F!endl; continue; else/不合法,分兩種不合法 if(check_kuohao()=0&check_char()=1) cout您所輸入的表達(dá)式括號(hào)不匹配,請(qǐng)重新輸入 :

14、endl; input();/輸入表達(dá)式 else cout您所輸入的表達(dá)式不合法,請(qǐng)重新輸入 :next=NULL; inti; for(i=0;linei!=0;i+)/ 建立鏈表 p=newnode; p-data=linei; p-next=head-next; head-next=p; head=p; /deletep; q=(node*)malloc(sizeof(node); head=root; if(root-next-data=+|root-next-data=-)/處理第一個(gè)字符 p=newnode; p-data=0; p-next=head-next; head-ne

15、xt=p; if(root-next!=NULL) for(q=root-next;q;q=q-next) if(q-data=(&(q-next-data=-|q-next-data=+) p=newnode; p-data=0; p-next=q-next; q-next=p; /deleteq; p1=newnode; intqi=-1; for(p1=root-next;p1;p1=p1-next) line+qi=p1-data; line+qi=0; voidinput()/ 輸入 cinline; if(biao=0) tackle_fuhao();/處理負(fù)號(hào)check(

16、);/檢查表達(dá)式是否合法 voidintroduce()/對(duì)計(jì)算器的符號(hào)功能的簡(jiǎn)要介紹 cout計(jì)算器簡(jiǎn)要介紹 endl; coutC(cos)S(sin)T(tan)a(arccos)c(arcsin)endl; cout789/ont(arctan)endl; cout456*%L(log)endl; cout123-M(M+)Q(sqrt)endl; cout0.+(乘方)F(off)Enter(=)endl; cout對(duì)于對(duì)數(shù)輸入 L2_5 表示以 2 為底 5 的對(duì)數(shù) endl; coutM( 在 前 面 結(jié) 果的 基 礎(chǔ) 上繼 續(xù) 計(jì) 算 , 如 : 上次 結(jié) 果 為 10, 現(xiàn) 輸入+10.5*2)endl; coutD(清零并繼續(xù)輸入 )endl; coutF(計(jì)算機(jī)關(guān)閉 )endl; cout輸入 P就代表輸入圓周率 ,輸入 E代表輸入自然對(duì)數(shù) endlendl; voidprint() system(color2); cout歡迎使用本計(jì)算器 end

溫馨提示

  • 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)論