




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
簡易四則運算計算器計算機工具地歷史而言,中國古代最早采用地一種計算工具叫籌策,又叫做算籌,這種算籌多用竹子制成,也有用木頭,獸骨充當材料的,大約270枚一束,放在布袋里可隨身攜帶。直到今天仍在使用的住算盤,是中國古代計算工具領域中的另一項發(fā)明明代時的住算盤已經與現(xiàn)代的住算盤幾乎相同。17世紀初,西方國家的計算工具有了較大的發(fā)展。英國數(shù)學家納爾發(fā)現(xiàn)了“納皮爾算籌”;英國牧師奧卻德發(fā)明了圓柱形對數(shù)計算尺,這種計算尺不僅能做加減乘涂,乘方和開方運算,甚至可以計算三角函數(shù),指數(shù)函數(shù)和對數(shù)函數(shù)。這些計算工具不僅帶動了計算的發(fā)展,也為現(xiàn)代計算器發(fā)展尊定了良好的基礎,成為現(xiàn)代社會應用廣泛的計算工具,如手機,操作系統(tǒng)上附帶的多功能計算器。項目設計目的掌握模塊的劃分;掌握結構體定義;掌握棧的操作;掌握函數(shù)的定義;掌握棧的基本操作;掌握VC的基本繪圖庫;掌握鼠標的響應操作;目設計內容設計一個含有界面的計算器,輸入一個包含括號的表達式,使用棧數(shù)據(jù)類型實現(xiàn)整數(shù)的四則運算操作,開方運算。項目設計要求根據(jù)分析,系統(tǒng)要求實現(xiàn)以下幾點基本功能:可通過按鈕輸入數(shù)字、運算符;能通過按鈕實現(xiàn)退格、清除功能;實現(xiàn)加、減、乘、除、開方運算功能;實現(xiàn)括號運算;
顯示運算結果;良好的交互界面。項目詳細設計功能模塊圖根據(jù)系統(tǒng)功能要求,主要含有四大模塊,分別是計算器界面設計模塊、計算器按鍵控制模塊、四則混合運算模塊、計算器記憶處理模塊。計算器界面設計模塊:調用VC圖形系統(tǒng)函數(shù)和字符函數(shù)畫出計算器的界面,包括24個按鈕和一個文本輸入框。計算機按鍵控制模塊:計算器通過鍵盤按鍵值的判斷,執(zhí)行相應的操作,如接收數(shù)字輸入等。計算器計算處理模塊。計算處理模塊主要完成可以包括括號的表達式運算,運算包括加,減,乘,除、開方。計算處理模塊在按鍵控制模塊中被調用執(zhí)行。處理模塊是通過棧來實現(xiàn)的,分別定義了兩個順序棧,一個用來存放操作符棧,一個用來存放操作數(shù)棧。計算器記憶處理模塊。記憶處理模塊使計算其具有記憶功能。記憶當前輸入的表達式,給出一個最后的運算結果??梢郧宄糠只蛉坑洃浀闹?。簡易計算器計算器界面模塊計算器按鍵控制模塊計算器處理模塊計算器記憶模塊圖簡易計算器模塊圖數(shù)據(jù)結構該系統(tǒng)主要的數(shù)據(jù)有操作符集,用一維數(shù)組存放;存放操作符的優(yōu)先級關系集,操作符的優(yōu)先級關系用一個二維數(shù)組來體現(xiàn);另外定義兩個棧,一個用來存放操作符,一個用來存放操作數(shù)。計算器界面模塊計算器按鍵控制模塊計算器處理模塊計算器記憶模塊charops[7]={'+','-','*','/','(',')','#'};intcmp[7][7]={{2,2,1,1,1,2,2},{2,2,1,1,1,2,2},{2,2,2,2,1,2,2},{2,2,2,2,1,2,2},{1,1,1,1,1,3,0},{2,2,2,2,0,2,2},{1,1,1,1,1,0,3}};typedefstruct{charelem[Stack_Size];inttop;}SeqStack;typedefstruct{intelem[Stack_Size];inttop;}SeqStackOperand;
系統(tǒng)流程圖圖系統(tǒng)流程圖主要算法比較運算符優(yōu)先級:程序里的涉及到的運算符有7個,分別是‘+’,‘-’,‘*’,‘/’,(’,‘)’,‘#’,它們之間的優(yōu)先級關系用一個二維數(shù)組來存放,intcmp[7][7]={{2,2,1,1,1,2,2},{2,2,1,1,1,2,2},{2,2,2,2,1,2,2},{2,2,2,2,1,2,2},{1,1,1,1,1,3,0},{2,2,2,2,0,2,2},{1,1,1,1,1,0,3}};其中3代表‘=’,2代表‘>’,1代表‘<’,0代表不可比。charCompare(charchi,charch2){inti,m,n;charpri;intpriority;for(i=0;i<7;i++)〃找到相比較的兩個運算符在比較矩陣里的相對位置{if(ch1==ops[i])m=i;if(ch2==ops[i])n=i;}priority=cmp[m][n];switch(priority){case1:pri='<';break;case2:pri='>';break;case3:?!!.pri==;break;case0:pri='$';printf("表達式錯誤!\n");break;}returnpri;}主要代碼計算器界面設計利用VC繪圖庫函數(shù)設計一個相對友好的操作界面。關于VC繪圖庫的介紹在本書第二章。界面圖像如下:5G-h(12-8]*6=&0圖:計算器界面畫計算機界面。initgraph(500,300);""http://這里和TC略有區(qū)別bar(15,15,480,70);setcolor(WHITE);rectangle(10,10,490,290);setcolor(WHITE);for(j=0;j<2;j++)for(i=0;i<7;i++){if(i<3)circle(55+65*i,110+65*j,20);elserectangle(55+65*i-20,110+65*j-20,55+65*i+20,110+65*j+20);}for(i=0;i<7;i++){if(i<4)circle(55+65*i,110+65*j,20);elserectangle(55+65*i-20,110+65*j-20,55+65*i+20,110+65*j+20);}outtextxy(50,105,”7”);outtextxy(115,105,”8”);outtextxy(180,105,"9");outtextxy(240,105,"C”);outtextxy(310,105,"+");outtextxy(375,105,”(");outtextxy(440,105,")");outtextxy(50,170,”4”);outtextxy(115,170,”5”);outtextxy(180,170,”6”);outtextxy(240,170,”.”);outtextxy(310,170,"-");outtextxy(370,170,"sqrt");outtextxy(440,170,"<-");outtextxy(50,235,”3”);outtextxy(115,235,"2");outtextxy(180,235,"1");outtextxy(245,235,"0");outtextxy(310,235,"*");outtextxy(375,235,"/");outtextxy(440,235,"=");按鍵響應操作當用戶通過鼠標左鍵按下‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘.’,‘+’,‘一’,‘*’,‘/’,(’,‘)’,‘=’,這些鍵時,字符按點擊順序在輸出文本框輸出;當用戶點擊‘<一’,表示退一格操作;當用戶點擊‘二’,在文本塊輸出表達式結果;當用戶按下‘C’時,文本框清空。MOUSEMSGm;m=GetMouseMsg();//記錄鼠標操作i=0;while(true){一m=GetMouseMsg();//記錄鼠標操作if(m.uMsg==WM_LBUTTONDOWN){setcolor(BLACK);if(m.x>35&&m.x<=75&&m.y>90&&m.y<130){strcat(string,"7”);outtextxy(25,40,string);}if(m.x>100&&m.x<=140&&m.y>90&&m.y<130){strcat(string,"8”);outtextxy(25,40,string);}if(m.x>165&&m.x<=205&&m.y>90&&m.y<130){strcat(string,"9”);outtextxy(25,40,string);}if(m.x>225&&m.x<=265&&m.y>90&&m.y<130){setcolor(WHITE);bar(15,15,480,70);strcpy(string,"");}//Cif(m.x>290&&m.x<=330&&m.y>90&&m.y<130){strcat(string,"+");outtextxy(25,40,string);}if(m.x>355&&m.x<=395&&m.y>90&&m.y<130){strcat(string,”(");outtextxy(25,40,string);}if(m.x>420&&m.x<=460&&m.y>90&&m.y<130){strcat(string,")");outtextxy(25,40,string);}if(m.x>35&&m.x<=75&&m.y>155&&m.y<195){strcat(string,"4”);outtextxy(25,40,string);}if(m.x>100&&m.x<=140&&m.y>155&&m.y<195){strcat(string,"5”);outtextxy(25,40,string);}if(m.x>165&&m.x<=205&&m.y>155&&m.y<195){strcat(string,"6”);outtextxy(25,40,string);}if(m.x>225&&m.x<=265&&m.y>155&&m.y<195){strcat(string,”.”);outtextxy(25,40,string);}if(m.x>290&&m.x<=330&&m.y>155&&m.y<195){strcat(string,"-");setcolor(BLACK);outtextxy(25,40,string);}if(m.x>355&&m.x<=395&&m.y>155&&m.y<195)//lg{n=strlen(string);switch(n)//不超過5位{case5:i=string[0]*10000+string[1]*1000+string[2]*100+string[3]*10+string[4];break;case4:i=string[0]*1000+string[1]*100+string[2]*10+string[3];break;case3:i=string[0]*100+string[1]*10+string[2];break;case2:i=string[0]*10+string[1];break;case1:i=string[1];break;}itoa(sqrt(i),string,10);setcolor(WHITE);bar(15,15,480,70);setcolor(BLACK);outtextxy(25,40,string);}if(m.x>420&&m.x<=460&&m.y>155&&m.y<195){n=strlen(string);printf("n=%d.”,n);string[n-1]='\0';bar(15,15,480,70);setcolor(BLACK);outtextxy(25,40,string);}//<-if(m.x>35&&m.x<=75&&m.y>215&&m.y<255){strcat(string,"3”);outtextxy(25,40,string);}if(m.x>100&&m.x<=140&&m.y>215&&m.y<255){strcat(string,"2”);outtextxy(25,40,string);}if(m.x>165&&m.x<=205&&m.y>215&&m.y<255){strcat(string,"1”);outtextxy(25,40,string);}if(m.x>225&&m.x<=265&&m.y>215&&m.y<255){strcat(string,"0”);outtextxy(25,40,string);}if(m.x>290&&m.x<=330&&m.y>215&&m.y<255){strcat(string,"*");outtextxy(25,40,string);}if(m.x>355&&m.x<=395&&m.y>215&&m.y<255){strcat(string,”/");outtextxy(25,40,string);}if(m.x>420&&m.x<=460&&m.y>215&&m.y<255){strcpy(str1,string);strcat(string,"=");outtextxy(25,40,string);strcat(str1,"#");itoa(ExpEvaluation(str1),str2,10);strcat(string,str2);outtextxy(25,40,string);}}利用棧的基本操作,實現(xiàn)表達式的求值。定義兩個順序棧及順序棧的基本操作:初始化棧,判斷棧空,取棧頂元素,入棧,出戰(zhàn),實現(xiàn)操作數(shù)的四則運算。typedefstruct{charelem[Stack_Size];inttop;}SeqStack;〃運算數(shù)棧的定義typedefstruct{intelem[Stack_Size];inttop;}SeqStackOperand;〃初始化運算符棧voidInitStack(SeqStack*S){S->top=-1;}〃初始化運算數(shù)棧voidInitStacknOperand(SeqStackOperand*S){S->top=-1;}〃判斷棧S為空棧時返回值為真,反之為假intIsEmpty(SeqStack*S){return(S->top==-1?TRUE:FALSE);}〃判斷棧S為空棧時返回值為真,反之為假intIsEmptynOperand(SeqStackOperand*S){return(S->top==-1?TRUE:FALSE);}〃判斷棧S為滿棧時返回值為真,反之為假intIsFull(SeqStack*S){return(S->top==Stack_Size-1?TRUE:FALSE);}〃判斷棧S為滿棧時返回值為真,反之為假intIsFullOperand(SeqStackOperand*S){return(S->top==Stack_Size-1?TRUE:FALSE);}〃運算符棧入棧函數(shù)intPush(SeqStack*S,charx){if(S->top==Stack_Size-1){printf("Stackisfull!\n");returnFALSE;}else{S->top++;S->elem[S->top]=x;returnTRUE;}}〃運算數(shù)棧入棧函數(shù)intPushOperand(SeqStackOperand*S,intx){if(S->top==Stack_Size-1){printf("Stackisfull!\n");returnFALSE;}else{S->top++;S->elem[S->top]=x;returnTRUE;}}〃運算符棧出棧函數(shù)intPop(SeqStack*S,char*x){if(S->top==-1){printf("運算符???\n");returnFALSE;}else{*x=S->elem[S->top];S->top--;returnTRUE;}}〃運算數(shù)棧出棧函數(shù)intPopOperand(SeqStackOperand*S,int*x){if(S->top==-1){printf("運算符???\n");returnFALSE;}else{*x=S->elem[S->top];S->top--;returnTRUE;}}〃運算符棧取棧頂元素函數(shù)charGetTop(SeqStack*S){if(S->top==-1){printf("運算符棧為空!\n");returnFALSE;}else{return(S->elem[S->top]);}}〃運算數(shù)棧取棧頂元素函數(shù)intGetTopOperand(SeqStackOperand*S){if(S->top==-1){printf("運算符棧為空!\n");returnFALSE;}else{return(S->elem[S->top]);}}〃判斷輸入字符是否為運算符函數(shù),是返回TRUE,不是返回FALSEintIsoperator(charch){inti;for(i=0;i<7;i++){if(ch==ops[i])returnTRUE;}returnFALSE;}〃比較運算符優(yōu)先級函數(shù)charCompare(charch1,charch2){inti,m,n;charpri;intpriority;for(i=0;i<7;i++)//找到相比較的兩個運算符在比較矩陣里的相對位置{if(ch1==ops[i])m=i;if(ch2==ops[i])n=i;}priority=cmp[m][n];switch(priority){case1:pri='<';break;case2:pri='>';break;case3:_?IIpri==;break;case0:pri='$';printf("表達式錯誤!\n");break;}returnpri;}〃運算函數(shù)intExecute(inta,charop,intb){intresult;switch(op){case'+':result=a+b;break;case'-':result=a-b;break;case'*':result=a*b;break;case'/':result=a/b;break;}returnresult;}/*讀入一個簡單算術表達式并計算其值.operator和operand分別為運算符棧和運算數(shù)棧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省陽江市高新區(qū)2024-2025學年高一上學期1月期末地理試題 含解析
- 家電行業(yè)智能家電互聯(lián)互通方案
- 企業(yè)采購原材料采購協(xié)議
- 水電站建設運營合作協(xié)議
- 旅游行業(yè)服務質量保障協(xié)議
- 網絡科技行業(yè)數(shù)據(jù)安全使用承諾書
- 企業(yè)員工福利計劃與服務支持方案
- 私人教練健身訓練合同協(xié)議
- 產品銷售代理合同集
- 汽車維修與故障診斷技術知識點總結題集
- 新電子稅務局培訓課件(20240510)全國統(tǒng)一規(guī)范電子稅務局試點納稅人培訓
- 《研學旅行課程設計》課件-研學課程方案設計
- 11G521-1鋼檁條標準完整版
- 2024年資格考試-WSET二級認證筆試參考題庫含答案
- 新能源汽車產業(yè)專利分析綜述
- 揭秘《紅樓夢》中的家族興衰賈家命運如何
- 職場化妝穿搭培訓課件
- 佛教管理佛堂管理制度
- 倉庫安全案例分析
- 腫瘤公衛(wèi)管理制度
- 烏蘭察布職業(yè)學院單招幼師300題
評論
0/150
提交評論