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

下載本文檔

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

文檔簡介

1、c語言課程設(shè)計(jì)報(bào)告.課程設(shè)計(jì)題目:簡易計(jì)算器.需求分析:.功能分析:具備整型數(shù)據(jù)、浮點(diǎn)型數(shù)據(jù)的算術(shù)(加、減、乘、除及三角函數(shù)的基本運(yùn)算)運(yùn)算功能。通過鍵盤方向鍵移動光標(biāo)依次輸入第一個運(yùn)算數(shù)、運(yùn)算符(+,-,*,/,,,#,&,)、第二個運(yùn)算數(shù)(三角函數(shù)除外),然后輸出結(jié)果。結(jié)果可以作為下一個運(yùn)算的第一運(yùn)算數(shù)。按c清屏,按q返回 菜單。( “”表示x的y次方,“% ”表示做模運(yùn)算,“”表示sin,“”表示cos,“”表示tan, “&”表示cot, “”表示開方).流程分析(程序簡易流程圖):見后頁 3.系統(tǒng)設(shè)計(jì):()主函數(shù)mian()。首先聲明必要的變量,初始化圖形系統(tǒng),調(diào)用函數(shù)compute

2、r(void)進(jìn)行計(jì)算。結(jié)束程序之前要關(guān)閉圖形系統(tǒng)。 ()統(tǒng)初始化函數(shù)init()。()窗口函數(shù)void mwindow(char *header)。設(shè)置視口大小為當(dāng)前窗口的一半,調(diào)用畫邊框函數(shù)void drawborder(void)畫出邊框。()獲取特殊函鍵函數(shù)int specialkey(void)。利用bioskey()函數(shù)讀取按鍵信息。boskey(0),則返回下一個鍵盤輸入,返回位的二進(jìn)制數(shù)。對于箭頭鍵、功能鍵等特殊鍵,低位為,高位存放該鍵的掃描碼。對于普通鍵,低位為鍵的碼。()設(shè)置箭頭光標(biāo)函數(shù)int arrow()。圖形方式下光標(biāo)是看不見的,自己設(shè)計(jì)一個光標(biāo)。()畫邊框函數(shù)voi

3、d drawborder(void). ()算函數(shù)void computer(void)。界面設(shè)置完成,用循環(huán)判斷光標(biāo)位置,按回車后,判斷所按的鍵,進(jìn)行相應(yīng)的處理。如所選為數(shù)字或小數(shù)點(diǎn),先判斷是否為負(fù)數(shù),若是則符號連上字符串,否則只連所選的數(shù)字或小數(shù)點(diǎn)。只進(jìn)行“”、“”、“*”、“”運(yùn)算。.系統(tǒng)調(diào)試: 在tc環(huán)境下,調(diào)用源程序運(yùn)行。系統(tǒng)進(jìn)入主窗口,再通過鍵盤上的方向鍵控制并移動光標(biāo),選擇窗口上的數(shù)字鍵及運(yùn)算符進(jìn)行簡單計(jì)算,再通過光標(biāo)鍵入“=”得出結(jié)果。該程序可以進(jìn)行簡單的加減乘除,未知數(shù)的n次方及三角函數(shù)的運(yùn)算。若進(jìn)行下一次計(jì)算需鍵入“c”鍵返清零。當(dāng)計(jì)算結(jié)束時,鍵入“q”鍵退出程序。(補(bǔ)缺)

4、流程分析(程序簡易流程圖).課設(shè)小結(jié)(心得體會):經(jīng)過兩個星期的上機(jī)實(shí)踐學(xué)習(xí),使我對c語言有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)好它要重在實(shí)踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它,通過實(shí)踐,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行,經(jīng)常按錯字母,通過學(xué)習(xí)也有所改進(jìn);再有對c語言的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還有對c語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實(shí)踐,使我在這幾個方面的認(rèn)識有所提高。通過實(shí)踐的學(xué)習(xí),我認(rèn)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)c語言,還是其它的語言,以及其它的計(jì)算機(jī)方面的知識都要重在實(shí)踐,所以后在學(xué)習(xí)過程中,我會更加注視實(shí)踐操作,使自己便好

5、地學(xué)好計(jì)算機(jī)。參考文獻(xiàn):. 書名:c語言程序設(shè)計(jì)實(shí)訓(xùn) 出版社:中國水利水電出版社 出版年月:2005年5月第1版. 書名:c語言程序設(shè)計(jì)(第三版) 出版社:清華大學(xué)出版社 出版年月:2005年7月第3版3. 0 書名:21世紀(jì)進(jìn)階輔導(dǎo) c語言程序設(shè)計(jì) 出版社:大連理工大學(xué)出版社 出版年月:2005年.附錄(源代碼):#include /*dos接口函數(shù)*/#include /*數(shù)學(xué)函數(shù)的定義*/#include /*屏幕操作函數(shù)*/#include /*i/o函數(shù)*/#include /*庫函數(shù)*/#include /*變量長度參數(shù)表*/#include /*圖形函數(shù)*/#include /*

6、字符串函數(shù)*/#include /*字符操作函數(shù)*/#define up 0x48 /*光標(biāo)上移鍵*/#define down 0x50 /*光標(biāo)下移鍵*/#define left 0x4b /*光標(biāo)左移鍵*/#define right 0x4d /*光標(biāo)右移鍵*/#define enter 0x0d /*回車鍵*/void *rar; /*全局變量,保存光標(biāo)圖象*/struct palettetype palette; /*使用調(diào)色板信息*/int graphdriver; /* 圖形設(shè)備驅(qū)動*/int graphmode; /* 圖形模式值*/int errorcode; /* 錯誤代碼*

7、/int maxcolors; /* 可用顏色的最大數(shù)值*/int maxx, maxy; /* 屏幕的最大分辨率*/double aspectratio; /* 屏幕的像素比*/void drawboder(void); /*畫邊框函數(shù)*/void initialize(void); /*初始化函數(shù)*/void computer(void); /*計(jì)算器計(jì)算函數(shù)*/void changetextstyle(int font, int direction, int charsize); /*改變文本樣式函數(shù)*/void mwindow(char *header); /*窗口函數(shù)*/int sp

8、ecialkey(void) ; /*獲取特殊鍵函數(shù)*/int arrow(); /*設(shè)置箭頭光標(biāo)函數(shù)*/*主函數(shù)*/int main() initialize();/* 設(shè)置系統(tǒng)進(jìn)入圖形模式 */ computer(); /*運(yùn)行計(jì)算器 */ closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/ return(0); /*結(jié)束程序*/* 設(shè)置系統(tǒng)進(jìn)入圖形模式 */void initialize(void) int xasp, yasp; /* 用于讀x和y方向縱橫比*/ graphdriver = detect; /* 自動檢測顯示器*/ initgraph( &graphdriv

9、er, &graphmode, );/*初始化圖形系統(tǒng)*/ errorcode = graphresult(); /*讀初始化結(jié)果*/ if( errorcode != grok ) /*如果初始化時出現(xiàn)錯誤*/ printf(graphics system error: %sn, grapherrormsg( errorcode ) ); /*顯示錯誤代碼*/ exit( 1 ); /*退出*/ getpalette( &palette ); /* 讀面板信息*/ maxcolors = getmaxcolor() + 1; /* 讀取顏色的最大值*/ maxx = getmaxx(); /

10、* 讀屏幕尺寸 */ maxy = getmaxy(); /* 讀屏幕尺寸 */ getaspectratio( &xasp, &yasp ); /* 拷貝縱橫比到變量中*/ aspectratio = (double)xasp/(double)yasp;/* 計(jì)算縱橫比值*/*計(jì)算器函數(shù)*/void computer(void) struct viewporttype vp; /*定義視口類型變量*/ int color, height, width; int x, y,x0,y0, i, j,v,m,n,act,flag=1; float num1=0,num2=0,result; /*操

11、作數(shù)和計(jì)算結(jié)果變量*/ char cnum5,str220=,c,temp20=; char str1=1230+456=-789%*#/qc.&;/* 定義字符串在按鈕圖形上顯示的符號 */ 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 = he

12、ight/2; /*設(shè)置y的坐標(biāo)值*/ setfillstyle(solid_fill, color+3); bar( x+width*2, y, x+7*width, y+height ); /*畫一個二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/ setcolor( color+3 ); /*設(shè)置淡綠顏色邊框線*/ rectangle( x+width*2, y, x+7*width, y+height ); /*畫一個矩形邊框線*/ setcolor(red); /*設(shè)置顏色為紅色*/ outtextxy(x+3*width,y+height/2,0.); /*輸出字符串0.*/ x =2*width-

13、width/2; /*設(shè)置x的坐標(biāo)值*/ y =2*height+height/2; /*設(shè)置y的坐標(biāo)值*/ for( j=0 ; j5 ; +j ) /*畫按鈕*/ for( i=0 ; i=x0+6*width) /*如果右移,移到尾,則移動到最左邊字符位置*/ x=x0; m=0; else x=x+width+width/2; m+; /*否則,右移到下一個字符位置*/ if(v=left) /*左移箭頭時新位置計(jì)算*/ if(x=x0) x=x0+6*width; m=4; /*如果移到頭,再左移,則移動到最右邊字符位置*/ else x=x-width-width/2; m-; /

14、*否則,左移到前一個字符位置*/ if(v=up) /*上移箭頭時新位置計(jì)算*/ if(y=8*height) y=y0; n=0; /*如果移到尾,再下移,則移動到最上邊字符位置*/ else y=y+height+height/2; n+; /*否則,移到下邊一個字符位置*/ putimage(x,y,rar,xor_put); /*在新的位置顯示光標(biāo)箭頭*/ c=str1n*5+m; /*將字符保存到變量c中*/ if(isdigit(c)|c=.) /*判斷是否是數(shù)字或小數(shù)點(diǎn)*/ if(flag=-1) /*如果標(biāo)志為-1,表明為負(fù)數(shù)*/ strcpy(str2,-); /*將負(fù)號連接

15、到字符串中*/ 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); /*將第一個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /

16、*將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ù)號,而不是減號*/ flag=-1; /*設(shè)置負(fù)數(shù)標(biāo)志*/ else num1=atof(str2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ ac

17、t=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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=3; /*做計(jì)算乘法標(biāo)志值*/ setfillstyle(solid_fill,color+3); bar(2*width+width/2,hei

18、ght/2,15*width/2,3*height/2); outtextxy(5*width,height,0.); /*顯示字符串*/ if(c=/) num1=atof(str2); /*將第二個操作數(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=a

19、tof(str2); /*將第二個操作數(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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=

20、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=) num1=atof(str2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=8; /*做cos運(yùn)算標(biāo)志值*/ setfillstyle(solid_fill,color+3); /*設(shè)置用淡綠

21、色實(shí)體填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/ outtextxy(5*width,height,0.); /*顯示字符串*/ if(c=#) num1=atof(str2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=9; /*做tan運(yùn)算標(biāo)志值*/ setfillstyle(solid_fill,color+3); /*設(shè)置用淡綠色實(shí)體填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2)

22、; /*畫矩形*/ outtextxy(5*width,height,0.); /*顯示字符串*/ if(c=&) num1=atof(str2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=10; /*做cot運(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=) n

23、um1=atof(str2); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,); /*將str2清空*/ act=11; /*做開方運(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); /*將第二個操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ switch(act) /*根據(jù)運(yùn)算符號計(jì)算*/ c

24、ase 1:result=num1+num2;break; /*做加法*/ case 2:result=num1-num2;break; /*做減法*/ case 3:result=num1*num2;break; /*做乘法*/ case 4:result=num1/num2;break; /*做除法*/ case 5:result=pow(num1,num2);break; /*做x的y次方*/ case 6:result=fmod(num1,num2);break; /*做模運(yùn)算*/ case 7:result=sin(num1);break;/*做sin運(yùn)算*/ case 8:resu

25、lt=cos(num1);break;/*做cos運(yùn)算*/ case 9:result=tan(num1);break;/*做tan運(yùn)算*/ case 10:result=atan(num1);break;/*做cot運(yùn)算*/ case 11:result=sqrt(num1);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é)果保存

26、到temp中*/ outtextxy(5*width,height,temp); /*顯示結(jié)果*/ if(c=c) num1=0; /*將兩個操作數(shù)復(fù)位0,符號標(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); /*

27、如果選擇了q回車,結(jié)束計(jì)算程序*/ putimage(x,y,rar,xor_put); /*在退出之前消去光標(biāo)箭頭*/ return; /*返回*/*窗口函數(shù)*/void mwindow( char *header ) int height; cleardevice(); /* 清除圖形屏幕 */ setcolor( maxcolors - 1 ); /* 設(shè)置當(dāng)前顏色為白色*/ setviewport( 22, 20, maxx/2, maxy/2, 1 ); /* 設(shè)置視口大小 */ height = textheight( h ); /* 讀取基本文本大小 */ settextstyle( default_font, horiz_dir, 1 );/*設(shè)置文本樣式*/ settextjustify( center_tex

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論