計(jì)算器C程序設(shè)計(jì)報(bào)告_第1頁
計(jì)算器C程序設(shè)計(jì)報(bào)告_第2頁
計(jì)算器C程序設(shè)計(jì)報(bào)告_第3頁
計(jì)算器C程序設(shè)計(jì)報(bào)告_第4頁
計(jì)算器C程序設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

計(jì)算器C程序設(shè)計(jì)報(bào)告設(shè)計(jì)要求運(yùn)用C語言所具有的函數(shù),模仿畫出計(jì)算器的界面,并實(shí)現(xiàn)計(jì)算器的基本功能:浮點(diǎn)數(shù)加、減、乘、除、乘方和求模運(yùn)算。(1)收集資料,全面分析課題,分析問題,形成總體編程思路。(2)深入分析各個(gè)小問題,編寫各部分程序模塊并進(jìn)行具體介紹。(如初始化函數(shù)、主窗口函數(shù)、計(jì)算器函數(shù)等等。)(3)上機(jī)調(diào)試,修改出現(xiàn)的錯(cuò)誤,確保程序能正確運(yùn)行。設(shè)計(jì)的作用、目的(1)通過課程設(shè)計(jì)全面掌握《C語言程序設(shè)計(jì)》關(guān)鍵知識(shí)點(diǎn),掌握C語言中數(shù)組、指針、結(jié)構(gòu)體、各種函數(shù)等方面的基本知識(shí)。

(2)通過課程設(shè)計(jì)了解并掌握C語言程序設(shè)計(jì)的方法,熟悉C程序設(shè)計(jì)的開發(fā)環(huán)境及C程序的調(diào)試過程。

(3)培養(yǎng)學(xué)生查閱參考資料、手冊(cè)的自學(xué)能力,通過獨(dú)立思考深入鉆研有關(guān)問題,學(xué)會(huì)自己分析、解決問題的方法。(4)通過自己動(dòng)手,培養(yǎng)、提高對(duì)編程的興趣,為將來從事相關(guān)工作打好基礎(chǔ)。課題分析要實(shí)現(xiàn)計(jì)算器功能,先要輸出計(jì)算器的樣式,再是通過按鍵的方式實(shí)現(xiàn)數(shù)值的運(yùn)算,故程序大致可分兩部分實(shí)現(xiàn),一部分是顯示計(jì)算器,另一部分是實(shí)現(xiàn)計(jì)算功能。TurboC提供了PC系統(tǒng)環(huán)境下擴(kuò)充的屏幕和圖形支持系統(tǒng),利用系統(tǒng)提供的字符屏幕處理函數(shù)和圖形系統(tǒng)的有關(guān)信息以及函數(shù)的實(shí)現(xiàn),這樣就可以顯示計(jì)算器了。計(jì)算功能主要解決的是接收按鍵信息的處理和進(jìn)行識(shí)別,如果按鍵是數(shù)字符號(hào),要將其轉(zhuǎn)變?yōu)椴僮鲾?shù),如果是運(yùn)算操作符,則進(jìn)行相應(yīng)的處理。設(shè)計(jì)的具體實(shí)現(xiàn)1.系統(tǒng)組成模塊結(jié)構(gòu)及功能(1)Main主函數(shù)設(shè)置了程序的流程,首先初始化圖形系統(tǒng),然后調(diào)用計(jì)算器computer()函數(shù)進(jìn)行計(jì)算,當(dāng)從計(jì)算器程序返回時(shí),關(guān)閉圖形系統(tǒng),程序結(jié)束。(2)Initialize()初始化函數(shù)TurboC通常的工作方式是字符文本模式,要顯示圖形,調(diào)用圖形函數(shù),則必須進(jìn)入圖形工作方式,應(yīng)首先調(diào)用函數(shù)initgraph(&GraphDriver,&GraphMode,)初始化圖形系統(tǒng),并裝入相應(yīng)的圖形驅(qū)動(dòng)器。(3)Mwindow()主窗口函數(shù)設(shè)置視口大小為當(dāng)前窗口的一半,再調(diào)用drawboder()函數(shù)畫出邊框。我們將可以在屏幕的左上角看到本程序的運(yùn)行結(jié)果視口;(4)Drawboder()畫邊框函數(shù)通過getviewsettings(&vp)函數(shù)把當(dāng)前視口的信息裝入由vp所指向的結(jié)構(gòu)中。vp是structviewporttype類型,其結(jié)構(gòu)定義如下:structviewporttype{intleft,top,right,bottom;intclip;voidfarrectangle(intleft,inttop,intright,intbottom);voidfarsetlinestyle(intlinestype,unsignedupattern);}域left、top、right、bottom中存放視口左上角和右下角的坐標(biāo)。當(dāng)clip為0時(shí),不進(jìn)行對(duì)超出視口邊界輸出的剪裁,否則,執(zhí)行剪裁以防止超出邊界。字符屏幕操作和圖形函數(shù)的核心是窗口,它是屏幕的活動(dòng)部分,在這個(gè)活動(dòng)窗口中將顯示輸出。為保持兩個(gè)系統(tǒng)的獨(dú)立性,TurboC在字符屏幕和圖形系統(tǒng)之間用了兩個(gè)不同的術(shù)語。字符屏幕的函數(shù)提供了窗口,而圖形系統(tǒng)提供了視口,但是當(dāng)屏幕用字符模式時(shí),左上角坐標(biāo)為(1,1),而在圖形狀態(tài)下,左上角坐標(biāo)為(0,0)。根據(jù)視口坐標(biāo),利用rectangle()函數(shù)畫出矩形邊框線。我們將可以在屏幕的左上角看到程序運(yùn)行的窗口;(5)Computer()計(jì)算器函數(shù)計(jì)算器函數(shù)是本程序的主要函數(shù)部分,其流程是先調(diào)用mwindow()主窗口函數(shù)顯示一黃色邊框的窗口,再在窗口中顯示計(jì)算器,最后接收按鍵進(jìn)行計(jì)算。為了合理布局、方便操作,根據(jù)窗口的大小設(shè)計(jì)按鈕的大小和位置。讀取當(dāng)前窗口的大小后,設(shè)置了兩個(gè)單位變量width和height,圖形顯示以這兩個(gè)單位變量為計(jì)算單位,布局如下圖所示:2.5w2.5wh/2w/2h/2h/21.5w1230.456+-789*/QC=^%注:w表示width;h表示height圖中的符號(hào)按鈕利用函數(shù)setfillstyle()設(shè)置用綠色實(shí)體進(jìn)行填充,然后用bar()函數(shù)畫一個(gè)二維矩形條,setcolor()函數(shù)設(shè)置邊框顏色,retangle()函數(shù)畫一個(gè)矩形邊框線,利用outtextxy()函數(shù)將預(yù)先存儲(chǔ)在strl中的字符串中的字符輸出,因?yàn)閛uttextxy()輸出的是字符串,所以先要用sprintf()函數(shù)將輸出的字符寫入字符數(shù)組str2,轉(zhuǎn)變?yōu)樽址佥敵觥=缑嬖O(shè)置完成后,首先在第一個(gè)按鈕位置顯示光標(biāo),此時(shí)可以移動(dòng)和按下光標(biāo),當(dāng)按下Alt+X鍵時(shí)可以結(jié)束程序,否則執(zhí)行循環(huán)判斷移動(dòng)的是哪一個(gè)光標(biāo)鍵,變量m和n分別記錄光標(biāo)的坐標(biāo)(x,y)位置,光標(biāo)移動(dòng)到某個(gè)位置按回車鍵后,則程序判斷所按的是哪個(gè)字符,并進(jìn)行相應(yīng)的處理:①當(dāng)所選為數(shù)字或小數(shù)點(diǎn),則先判斷是否為負(fù)數(shù),如果是負(fù)數(shù)則將符號(hào)連接到字符串中,否則只連接所選的數(shù)字或小數(shù)點(diǎn),并顯示數(shù)據(jù);②當(dāng)所選為“-”時(shí),先判斷有無操作數(shù),如果沒有操作則表示負(fù)數(shù),組負(fù)數(shù)標(biāo)記,否則是做減法,做減法標(biāo)志,并將當(dāng)前的操作數(shù)保存;③當(dāng)所選為“+”、“*”、“/”、“^”、“%”時(shí),處理方式與(b)步驟一樣,均是先保存第一個(gè)操作數(shù),做為運(yùn)算標(biāo)志。準(zhǔn)備接收第二個(gè)操作數(shù);④當(dāng)所選為“=”時(shí),根據(jù)運(yùn)算符號(hào)標(biāo)志act進(jìn)行相應(yīng)的運(yùn)算,并結(jié)果顯示;⑤當(dāng)所選為“c”時(shí),表示歸零,所以將第一和第二操作數(shù)均置0;⑥當(dāng)所選為“Q”時(shí),則結(jié)束運(yùn)算,桌面切換到原程序桌面狀態(tài);(6)Arrow()設(shè)計(jì)圖形鼠標(biāo)函數(shù)由于在圖形函數(shù)方式下,光標(biāo)是不可見的,所以為了能正確地選擇按鈕,自己設(shè)計(jì)一個(gè)光標(biāo)圖形。方法是用fillpoly(8,raw)畫一個(gè)由raw所指向的數(shù)組定義的8個(gè)(x,y)坐標(biāo)點(diǎn)所圍成的封閉圖形,用當(dāng)前填充顏色對(duì)該形狀進(jìn)行填充后形狀像鼠標(biāo)的光標(biāo),利用函數(shù)imagesize()測試圖像和函數(shù)putimage(x,y,rar,XOR_PUT)操作實(shí)現(xiàn)光標(biāo)圖像的顯示和隱藏;(7)Specialkey()讀取特殊鍵函數(shù)利用函數(shù)bioskey()讀取所按鍵的信息,intbioskey(intcmd)函數(shù)原型在bios.h中功能是完成直接鍵盤操作。如果cmd是0,bioskey()返回下一個(gè)在鍵盤輸入的值(它將等待到下一個(gè)按鍵)。它返回嚴(yán)格16位的二進(jìn)制數(shù),包括兩種不同的值。當(dāng)按下“普通鍵”時(shí),它的低8位數(shù)存放在該字符的ASCII碼;對(duì)于“特殊鍵”,低8位為0。特殊鍵包括箭頭鍵、功能鍵等。高8位字節(jié)存放該鍵的掃描碼,所以程序中用到了語句key=bioskey(0),表示返回下一個(gè)在鍵盤上按下的鍵,并保存在變量key中,key=key&0xff:key>>8,對(duì)所按的鍵進(jìn)行判斷,如果key&0xff為真,即低8位不為0,則說明按下的是“普通鍵”,因?yàn)?xff16進(jìn)制數(shù)代表的二進(jìn)制碼高8位為0,低8位為1,和0相遇,結(jié)果為0,和1相遇,結(jié)果保持原數(shù),這樣就將低8位(也就是該字符的ASCII碼值)賦給key。如果key&0xff為假,即低8位為0,署名按下的是“特殊鍵”,將key右移8位后,也就是將其高8位值賦給key。Cmd如果是1,bioskey()查詢是否按下一個(gè)鍵時(shí)返回非0值,否則返回0值,所以用while(bioskey(1)==0)語句等待按鍵。開始2.系統(tǒng)程序結(jié)構(gòu)及流程圖開始初始化圖形系統(tǒng)初始化圖形系統(tǒng)有錯(cuò)?有錯(cuò)有錯(cuò)?進(jìn)入圖形進(jìn)入圖形系統(tǒng)輸入mun1、mun2和符號(hào)輸入mun1、mun2和符號(hào)判斷符號(hào)判斷符號(hào)顯示結(jié)果顯示結(jié)果輸入C輸入Q輸入C輸入Q結(jié)束結(jié)束3.重要函數(shù)介紹(1)intmain(){initialize();computer(); closegraph();return(0);}●主函數(shù),內(nèi)有數(shù)個(gè)分函數(shù)。它規(guī)劃了該程序的設(shè)計(jì)思路。首先初始化圖形系統(tǒng),然后調(diào)用計(jì)算器computer()函數(shù)進(jìn)行計(jì)算,當(dāng)從計(jì)算器程序返回時(shí),關(guān)閉圖形系統(tǒng),程序結(jié)束。(2)voidinitialize(void){getpalette(&palette); MaxColors=getmaxcolor()+1; MaxX=getmaxx();MaxY=getmaxy(); getaspectratio(&xasp,&yasp); AspectRatio=(double)xasp/(double)yasp;}●進(jìn)入圖形模式,并設(shè)置模塊大小,顏色等信息初始化圖形。(3)while((v=specialkey())!=45){while((v=specialkey())!=ENTER){ putimage(x,y,rar,XOR_PUT); if(v==RIGHT) if(x>=x0+6*width){ x=x0; m=0; } else { x=x+width+width/2; m++; }if(v=LEFT){……}if(v=UP){……}if(v=DOWN){……}putimage(x,y,rar,XOR_PUT);}●顯示光標(biāo)并設(shè)置光標(biāo)的上、下、左、右移動(dòng)規(guī)則。(4)if(c=='+'){num1=atof(str2);/*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=1;/*做計(jì)算加法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='-'){……}if(c=='*'){……}if(c=='/'){……}if(c=='^'){……}if(c=='%'){……}if(c=='='){……}if(c=='c'){……}if(c=='Q'){……}●設(shè)置加、減、乘、除、歸零和退出的功能(5)intarrow(){intsize;intraw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4};setfillstyle(SOLID_FILL,2);fillpoly(8,raw);size=imagesize(4,4,16,16);rar=malloc(size);getimage(4,4,16,16,rar);putimage(4,4,rar,XOR_PUT);return0;}●設(shè)置鼠標(biāo)圖形(6)intspecialkey(void){intkey;while(bioskey(1)==0);key=bioskey(0);key=key&0xff?key&0xff:key>>8;return(key);}●設(shè)置鍵盤的輸入4.程序代碼編寫及注釋#include<dos.h>/*DOS接口函數(shù)*/#include<math.h>/*數(shù)學(xué)函數(shù)的定義*/#include<conio.h>/*屏幕操作函數(shù)*/#include<stdio.h>/*I/O函數(shù)*/#include<stdlib.h>/*庫函數(shù)*/#include<stdarg.h>/*變量長度參數(shù)表*/#include<graphics.h>/*圖形函數(shù)*/#include<string.h>/*字符串函數(shù)*/#include<ctype.h>/*字符操作函數(shù)*/#defineUP0x48/*光標(biāo)上移鍵*/#defineDOWN0x50/*光標(biāo)下移鍵*/#defineLEFT0x4b/*光標(biāo)左移鍵*/#defineRIGHT0x4d/*光標(biāo)右移鍵*/#defineENTER0x0d/*回車鍵*/void*rar;/*全局變量,保存光標(biāo)圖象*/structpalettetypepalette;/*使用調(diào)色板信息*/intGraphDriver; /*圖形設(shè)備驅(qū)動(dòng)*/intGraphMode; /*圖形模式值*/intErrorCode; /*錯(cuò)誤代碼*/intMaxColors; /*可用顏色的最大數(shù)值*/intMaxX,MaxY; /*屏幕的最大分辨率*/doubleAspectRatio; /*屏幕的像素比*/voiddrawboder(void);/*畫邊框函數(shù)*/voidinitialize(void);/*初始化函數(shù)*/voidcomputer(void);/*計(jì)算器計(jì)算函數(shù)*/voidchangetextstyle(intfont,intdirection,intcharsize);/*改變文本樣式函數(shù)*/voidmwindow(char*header);/*窗口函數(shù)*/intspecialkey(void);/*獲取特殊鍵函數(shù)*/intarrow();/*設(shè)置箭頭光標(biāo)函數(shù)*//*主函數(shù)*/intmain(){initialize();/*設(shè)置系統(tǒng)進(jìn)入圖形模式*/computer(); /*運(yùn)行計(jì)算器*/closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/return(0);/*結(jié)束程序*/}/*設(shè)置系統(tǒng)進(jìn)入圖形模式*/voidinitialize(void){intxasp,yasp; /*用于讀x和y方向縱橫比*/GraphDriver=DETECT;/*自動(dòng)檢測顯示器*/initgraph(&GraphDriver,&GraphMode,"");/*初始化圖形系統(tǒng)*/ErrorCode=graphresult(); /*讀初始化結(jié)果*/if(ErrorCode!=grOk)/*如果初始化時(shí)出現(xiàn)錯(cuò)誤*/{printf("GraphicsSystemError:%s\n",grapherrormsg(ErrorCode));/*顯示錯(cuò)誤代碼*/exit(1);/*退出*/}getpalette(&palette); /*讀面板信息*/MaxColors=getmaxcolor()+1; /*讀取顏色的最大值*/MaxX=getmaxx();/*讀屏幕尺寸 */MaxY=getmaxy(); /*讀屏幕尺寸 */getaspectratio(&xasp,&yasp); /*拷貝縱橫比到變量中*/AspectRatio=(double)xasp/(double)yasp;/*計(jì)算縱橫比值*/}/*計(jì)算器函數(shù)*/voidcomputer(void){structviewporttypevp;/*定義視口類型變量*/intcolor,height,width;intx,y,x0,y0,i,j,v,m,n,act,flag=1;floatnum1=0,num2=0,result;/*操作數(shù)和計(jì)算結(jié)果變量*/charcnum[5],str2[20]={""},c,temp[20]={""};charstr1[]="1230.456+-789*/Qc=^%";/*定義字符串在按鈕圖形上顯示的符號(hào)*/mwindow("Calculator");/*顯示主窗口*/color=7;/*設(shè)置灰顏色值*/getviewsettings(&vp); /*讀取當(dāng)前窗口的大小*/width=(vp.right+1)/10; /*設(shè)置按鈕寬度*/height=(vp.bottom-10)/10;/*設(shè)置按鈕高度*/x=width/2;/*設(shè)置x的坐標(biāo)值*/y=height/2; /*設(shè)置y的坐標(biāo)值*/setfillstyle(SOLID_FILL,color+3);bar(x+width*2,y,x+7*width,y+height);/*畫一個(gè)二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/setcolor(color+3);/*設(shè)置淡綠顏色邊框線*/rectangle(x+width*2,y,x+7*width,y+height);/*畫一個(gè)矩形邊框線*/setcolor(RED);/*設(shè)置顏色為紅色*/outtextxy(x+3*width,y+height/2,"0.");/*輸出字符串"0."*/x=2*width-width/2;/*設(shè)置x的坐標(biāo)值*/y=2*height+height/2;/*設(shè)置y的坐標(biāo)值*/for(j=0;j<4;++j)/*畫按鈕*/{for(i=0;i<5;++i){setfillstyle(SOLID_FILL,color);setcolor(RED);bar(x,y,x+width,y+height);/*畫一個(gè)矩形條*/rectangle(x,y,x+width,y+height);sprintf(str2,"%c",str1[j*5+i]);/*將字符保存到str2中*/outtextxy(x+(width/2),y+height/2,str2);x=x+width+(width/2); /*移動(dòng)列坐標(biāo)*/}y+=(height/2)*3; /*移動(dòng)行坐標(biāo)*/x=2*width-width/2;/*復(fù)位列坐標(biāo)*/}x0=2*width;y0=3*height;x=x0;y=y0;gotoxy(x,y);/*移動(dòng)光標(biāo)到x,y位置*/arrow();/*顯示光標(biāo)*/putimage(x,y,rar,XOR_PUT);m=0;n=0;strcpy(str2,"");/*設(shè)置str2為空串*/while((v=specialkey())!=45)/*當(dāng)壓下Alt+x鍵結(jié)束程序,否則執(zhí)行下面的循環(huán)*/{while((v=specialkey())!=ENTER)/*當(dāng)壓下鍵不是回車時(shí)*/{ putimage(x,y,rar,XOR_PUT);/*顯示光標(biāo)圖象*/ if(v==RIGHT)/*右移箭頭時(shí)新位置計(jì)算*/ if(x>=x0+6*width)/*如果右移,移到尾,則移動(dòng)到最左邊字符位置*/ { x=x0; m=0; } else { x=x+width+width/2; m++; }/*否則,右移到下一個(gè)字符位置*/ if(v==LEFT)/*左移箭頭時(shí)新位置計(jì)算*/ if(x<=x0) { x=x0+6*width; m=4; }/*如果移到頭,再左移,則移動(dòng)到最右邊字符位置*/ else { x=x-width-width/2; m--; }/*否則,左移到前一個(gè)字符位置*/if(v==UP)/*上移箭頭時(shí)新位置計(jì)算*/ if(y<=y0) { y=y0+4*height+height/2; n=3; }/*如果移到頭,再上移,則移動(dòng)到最下邊字符位置*/ else {y=y-height-height/2;n--;}/*否則,移到上邊一個(gè)字符位置*/ if(v==DOWN)/*下移箭頭時(shí)新位置計(jì)算*/ if(y>=7*height) { y=y0;n=0; }/*如果移到尾,再下移,則移動(dòng)到最上邊字符位置*/ else { y=y+height+height/2; n++; }/*否則,移到下邊一個(gè)字符位置*/putimage(x,y,rar,XOR_PUT);/*在新的位置顯示光標(biāo)箭頭*/}c=str1[n*5+m];/*將字符保存到變量c中*/if(isdigit(c)||c=='.')/*判斷是否是數(shù)字或小數(shù)點(diǎn)*/{ if(flag==-1)/*如果標(biāo)志為-1,表明為負(fù)數(shù)*/{strcpy(str2,"-");/*將負(fù)號(hào)連接到字符串中*/flag=1;}/*將標(biāo)志值恢復(fù)為1*/sprintf(temp,"%c",c);/*將字符保存到字符串變量temp中*/strcat(str2,temp);/*將temp中的字符串連接到str2中*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/*顯示字符串*/}if(c=='+'){num1=atof(str2);/*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=1;/*做計(jì)算加法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='-'){if(strcmp(str2,"")==0)/*如果str2為空,說明是負(fù)號(hào),而不是減號(hào)*/ flag=-1;/*設(shè)置負(fù)數(shù)標(biāo)志*/else{ num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,"");/*將str2清空*/ act=2;/*做計(jì)算減法標(biāo)志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫矩形*/ outtextxy(5*width,height,"0.");/*顯示字符串*/}}if(c=='*'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=3;/*做計(jì)算乘法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='/'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=4;/*做計(jì)算除法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='^'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=5;/*做計(jì)算乘方標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫矩形*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='%'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=6;/*做計(jì)算模運(yùn)算乘方標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫矩形*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='='){num2=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/switch(act)/*根據(jù)運(yùn)算符號(hào)計(jì)算*/{ case1:result=num1+num2;break;/*做加法*/ case2:result=num1-num2;break;/*做減法*/ case3:result=num1*num2;break;/*做乘法*/ case4:result=num1/num2;break;/*做除法*/ case5:result=pow(num1,num2);break;/*做x的y次方*/ case6:result=fmod(num1,num2);break;/*做模運(yùn)算*/}setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆蓋結(jié)果區(qū)*/sprintf(temp,"%f",result);/*將結(jié)果保存到temp中*/outtextxy(5*width,height,temp);/*顯示結(jié)果*/}if(c=='c'){num1=0;/*將兩個(gè)操作數(shù)復(fù)位0,符號(hào)標(biāo)志為1*/num2=0;flag=1;strcpy(str2,"");/*將str2清空*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆蓋結(jié)果區(qū)*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='Q')exit(0);/*如果選擇了q回車,結(jié)束計(jì)算程序*/}putimage(x,y,rar,XOR_PUT);/*在退出之前消去光標(biāo)箭頭*/return;/*返回*/}/*窗口函數(shù)*/voidmwindow(char*header){intheight;cleardevice(); /*清除圖形屏幕 */setcolor(MaxColors-1); /*設(shè)置當(dāng)前顏色為白色*/setviewport(20,20,MaxX/2,MaxY/2,1); /*設(shè)置視口大小 */height=textheight("H");/*讀取基本文本大小*/settextstyle(DEFAULT_FONT,HORIZ_DIR,1);/*設(shè)置文本樣式*/settextjustify(CENTER_TEXT,TOP_TEXT);/*設(shè)置字符排列方式*/outtextxy(MaxX/4,2,header);/*輸出標(biāo)題*/setviewport(20,20+height+4,MaxX/2+4,MaxY/2+20,1);/*設(shè)置視口大小*/drawboder();/*畫邊框*/}voiddrawboder(void)/*畫邊框*/{structviewporttypevp;/*定義視口類型變量*/setcolor(MaxColors-1); /*設(shè)置當(dāng)前顏色為白色 */setlinestyle(SOLID_LINE,0,NORM_WIDTH);/*設(shè)置畫線方式*/getviewsettings(&vp);/*將當(dāng)前視口信息裝入vp所指的結(jié)構(gòu)中*/rectangle(0,0

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論