版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+語言編寫。#include<iostream>#include<cmath>#include<string>usingnamespacestd;constintSIZE=1000;typedefstructnode/為了處理符號而建立的鏈表(如:1+(-2)chardata;node*next;node;typedefstructstack_num/存儲數(shù)的棧double*top;double*base;stack_num;typedefstructstack_char存儲運(yùn)算符號的棧char*top;char*base;stack_char;stack
2、_numS_num;定義stack_charS_char;/定義charfu18='n',')','+','-','*','/','%','A',Q,'L',C,'S',T,'c','s','t','('intcompare1000;表現(xiàn)出各運(yùn)算符號的優(yōu)先級doubleshu1000;存儲”數(shù)”的數(shù)組doubledai_result;/運(yùn)算的結(jié)果,是為了處理M運(yùn)算(簡介函數(shù)
3、里有M的定義)intbiao=0;/和dia_result一樣,為了處理M運(yùn)算charlineSIZE;輸入的所要計算的表達(dá)式voidinit()/初始化comparefu0=-2;/用數(shù)字的大小表現(xiàn)出符號的優(yōu)先級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);為棧開
4、辟空間S_char.base=(char*)malloc(sizeof(char)*SIZE);同上S_num.top=S_num.base;S_char.top=S_char.base;voidpush_num(doublen)數(shù)字進(jìn)棧*+S_num.top=n;voidpush_char(charc)/運(yùn)算符號進(jìn)棧*+S_char.top=c;doublepop_num()數(shù)字出棧doublem=*S_num.top;S_num.top-;returnm;charpop_char()運(yùn)算符號出棧charcc=*S_char.top;S_char.top-;returncc;charget_
5、top_char()得到運(yùn)算符號的棧中最頂端的運(yùn)算符號return*S_char.top;doubleoperate(doubley,charc,doublex)對兩個數(shù)計算(含是雙目運(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='A')r=1;for(inti=1;i<=y;i+)r*=x;elseif(c='%')intr0=
6、(int)x%(int)y;r=double(r0);returnr;doubleoperate_one(doubleone,charcc)/對一個數(shù)運(yùn)算(含單目運(yùn)算符:如:如*,/等等)log(L),sin(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='
7、t')r=atan(one);returnr;doubleoperate_L(doublea,doubleb,chardian)求對數(shù)的值doubler=log(b)/log(a);returnr;doublecompute。/對整個表達(dá)式的計算charc;/表示運(yùn)算符號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)棧,在這個結(jié)
8、果的基礎(chǔ)上繼續(xù)進(jìn)行運(yùn)算biao=0;for(i=0;linei!='0')/把表達(dá)式中的數(shù)字字符串轉(zhuǎn)化成可計算的數(shù)字intflag=0;intflag1=1;/標(biāo)記是否是運(yùn)算符號/intflag2=1;/標(biāo)記是否出現(xiàn)'_'doubleh=0;intge;/位數(shù)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
9、;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+;elsebreak;if(flag)if(biao_dian)intr=1;for(intk=1;k<=ge;k+)r*=10;h/=r;shu+p=h;/把轉(zhuǎn)化而來的數(shù)字存于數(shù)組if(linei='+')shu+p=-1;elseif(linei='-')shu+p=-2;elseif(linei
10、='*')shu+p=-3;elseif(linei='/')shu+p=-4;elseif(linei='%')shu+p=-5;elseif(linei='A')shu+p=-6;elseif(linei=Q)shu+p=-7;elseif(linei='L')shu+p=-8;elseif(linei=C)shu+p=-9;elseif(linei='S')shu+p=-10;elseif(linei=T)shu+p=-11;elseif(linei='c')shu+p=-12
11、;elseif(linei='s')shu+p=-13;elseif(linei='t')shu+p=-14;elseif(linei='(')shu+p=-15;elseif(linei=')')shu+p=-16;elseif(linei='n')shu+p=-17;i+;i=1;while(shui!=-17|get_top_char()!='n')doublem=shui;if(m>=0)push_num(m);elseif(m=-1)c='+';elseif(m=-2
12、)c=11.elseif(m=-3)c=1*1.5elseif(m=-4)c='/'elseif(m=-5)c='%'elseif(m=-6)c='A'5elseif(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'elseif(m=-15
13、)c='('elseif(m=-16)c=')'elseif(m=-17)c='n'charch=get_top_char();得到最頂端運(yùn)算符號if(comparech<comparec)運(yùn)算符號級別的比較push_char(c);i+;elseif(ch='('&&c=')')pop_char();i+;elseif(comparech>=comparec&&ch!='('&&ch!='n')if(ch=Q|ch=C|c
14、h='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_num();chardian=pop_char();push_num(operate_L(two_L,one_L,dian);elsedoublex=pop_num();doubley=pop_num();ch
15、ardian=pop_char();if(dian='/'&&x=0)/判斷是否除了”零"cout<<"由于您除了零,結(jié)果將是錯誤的"<<endl;push_num(operate(x,dian,y);/把進(jìn)行一次計算的結(jié)果入棧elsepush_char(c);i+;doubleresult=pop_num();/得至U結(jié)果returnresult;intcheck_kuohao()檢查表達(dá)式括號是否匹配inti,f=0;intkuoSIZE,key=1;memset(kuo,0,sizeof(kuo);fo
16、r(i=0;linei!='0:i+)if(linei='(')kuo+f=1;elseif(linei=')')if(kuof=1)kuof=0;f-;elsekey=0;break;if(key&&f=0)return1;elsereturn0;intcheck_char()/檢查運(yùn)算符號是否合法(如:1+*4)inti,ge;for(i=0;linei!='0')ge=0;while(linei='+'|linei='-'|linei='*'|linei='/&
17、#39;|linei='%'|linei='A'|linei=Q|linei='L'|linei='S'|linei=C|linei='T'|linei='s'|linei='c'|linei='t')ge+;i+;if(ge>=3)return0;elsereturn1;voidoutput(doubleresult)/打出結(jié)果printf("所得結(jié)果是:”);cout<<result<<endl;voidcheck()檢查表
18、達(dá)式是否合法voidintroduce();charcc;/決定計算器按哪種功能進(jìn)行計算doubleresult;/結(jié)果voidinput();/定義if(check_kuohao()&&check_char()/看是否合法,合法則計算result=compute();output(result);cout<<"輸入一個字符'M'或'D'或'F',決定是否繼續(xù):"<<endl;while(cin>>cc)if(cc='M')system("cls&q
19、uot;);introduce();printf("您上次所得結(jié)果為:”);"<<endl;"<<endl;cout<<result<<endl;cout<<"在上次計算結(jié)果的基礎(chǔ)上,請繼續(xù)輸入想計算的表達(dá)式dai_result=result;biao=1;input();/輸入表達(dá)式break;elseif(cc='D')system("cls");introduce();cout<<"計算器已清零,請輸入您所要計算的表達(dá)式"
20、<<endl;input();輸入表達(dá)式break;elseif(cc='F')system("cls");cout<<"計算器關(guān)閉,謝謝使用!"<<endl;break;elsecout<<"所輸入字符無效,請輸入一個字符'M'或D或'F'!"<<endl;continue;else/不合法,分兩種不合法if(check_kuohao()=0&&check_char()=1)cout<<"
21、您所輸入的表達(dá)式括號不匹配,請重新輸入:"<<endl;input();輸入表達(dá)式elsecout<<"您所輸入的表達(dá)式不合法,請重新輸入:"<<endl;input();/輸入表達(dá)式voidtackle_fuhao()處理負(fù)號node*root,*head,*p,*q,*p1;root=head=newnode;head->next=NULL;inti;for(i=0;linei!='0'i+)建立鏈表p=newnode;p->data=linei;p->next=head->next;
22、head->next=p;head=p;/deletep;q=(node*)malloc(sizeof(node);head=root;if(root->next->data='+'|root->next->data='-')/處理第一個字符p=newnode;p->data='O'p->next=head->next;head->next=p;if(root->next!=NULL)for(q=root->next;q;q=q->next)if(q->data=
23、9;('&&(q->next->data='-'|q->next->data='+')p=newnode;p->data='O'p->next=q->next;q->next=p;/deleteq;pl=newnode;intqi=-1;for(p1=root->next;p1;pl=p1->next)line+qi=p1->data;line+qi='0'voidinput()輸入cin>>line;if(biao=0)tack
24、le_fuhao();處理負(fù)號check();檢查表達(dá)式是否合法voidintroduce()/對計算器的符號功能的簡要介紹cout<<"計算器簡要介紹"<<endl;T(tan)a(arccos)c(arcsin)"<<endl;cout<<"C(cos)S(sin)cout<<"789/ont(arctan)"<<endl;cout<<"456*%L(log)"<<endl;cout<<"123-M(M+)Q(sqrt)"<<endl;cout<<"0+A(乘方)F(off)Enter(=)"<<endl;cout<<"
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年3-〔(4-氨基-3-甲氧苯基)偶氮〕苯磺酸相關(guān)行業(yè)營銷方案
- 廣州市綠穗環(huán)??萍加邢薰卷椖窟\(yùn)營報告
- 國電系統(tǒng)-安徽省-2023年《信息安規(guī)》科目 單選題+多選題+判斷題+簡答題真題沖刺卷上半年A卷
- 2024年全自動地?zé)岷銐汗┧O(shè)備相關(guān)公司行業(yè)營銷方案
- 2024年光通信計量和監(jiān)測儀器相關(guān)公司行業(yè)營銷方案
- 2024年體育科技管理服務(wù)行業(yè)營銷策略方案
- 汽車機(jī)械基礎(chǔ) 第3版 課件 第3、4章 構(gòu)件的承載能力分析、汽車常用金屬材料
- 2024年秋 新七上漢譯英(教材后面小學(xué)單詞表)
- 一級造價工程師《造價管理》鎮(zhèn)平縣2024年臨考沖刺試題含解析
- 高中歷史 專題二 古代中國的科學(xué)技術(shù)與文化測試題 人民版必修3
- 公司風(fēng)險控制規(guī)章制度
- 日間手術(shù)出院后隨訪登記表
- 中考專題復(fù)習(xí):小說閱讀指導(dǎo)
- 公司級員工核心行為能力模型
- 《金屬加工與實訓(xùn)教案》教案
- 后置埋件錨栓適用范圍規(guī)范解析
- 安全生產(chǎn)績效考核管理辦法【最新版】
- 辦公樓保潔服務(wù)內(nèi)容及服務(wù)標(biāo)準(zhǔn)
- XX學(xué)院關(guān)于大學(xué)生科技創(chuàng)新中心管理辦法
- 結(jié)構(gòu)化思維PPT課件
- 裝飾裝修工程施工方案和技術(shù)措施(共33頁)
評論
0/150
提交評論