c語言課程設(shè)計--計算器_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  大 學(xué)</b></p><p>  C語言程序設(shè)計 課程設(shè)計(論文)</p><p>  題目: 計算器 </p><p>  院(系): </p><p><b>  專業(yè)班級: </b></p><

2、p>  學(xué) 號: </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: </p><p>  教師職稱: 助 教 </p><p>  起止時間:2009.12.14至2009.12.26</p><p>  課程設(shè)計(報告)任務(wù)及評語

3、</p><p>  院(系): 教研室:</p><p><b>  目 錄</b></p><p>  第1章 課程設(shè)計的目的與要求1</p><p>  1.1 課程設(shè)計目的1</p><p>  1.2 課程設(shè)計的實驗環(huán)

4、境1</p><p>  1.3 課程設(shè)計的預(yù)備知識1</p><p>  1.4 課程設(shè)計要求1</p><p>  第2章 課程設(shè)計內(nèi)容2</p><p>  2.1程序功能介紹2</p><p>  2.2程序整體設(shè)計說明2</p><p>  2.2.1設(shè)計思路2<

5、/p><p>  2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計及用法說明2</p><p>  2.2.3程序結(jié)構(gòu)(流程圖)2</p><p>  2.2.4各模塊的功能及程序說明3</p><p>  2.2. 5程序結(jié)果4</p><p>  2.3程序源代碼及注釋5</p><p>  第3章 課程設(shè)計總

6、結(jié)13</p><p><b>  參考資料 15</b></p><p>  第1章 課程設(shè)計的目的與要求</p><p>  1.1 課程設(shè)計目的</p><p>  本課程設(shè)計是計算機科學(xué)與技術(shù)專業(yè)重要的實踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計語言(C)》課程后進行的一次全面的綜合練習(xí)。本課程設(shè)計的目的和任務(wù)

7、: </p><p>  1. 鞏固和加深學(xué)生對C語言課程的基本知識的理解和掌握 </p><p>  2. 掌握C語言編程和程序調(diào)試的基本技能 </p><p>  3. 利用C語言進行基本的軟件設(shè)計</p><p>  4. 掌握書寫程序設(shè)計說明文檔的能力</p><p>  5. 提高運用C語言解決實際問題的能力

8、</p><p>  1.2 課程設(shè)計的實驗環(huán)境</p><p>  硬件要求能運行Windows 2000/XP操作系統(tǒng)的微機系統(tǒng)。C語言程序設(shè)計及相應(yīng)的開發(fā)環(huán)境。</p><p>  1.3 課程設(shè)計的預(yù)備知識</p><p>  熟悉C語言及C語言開發(fā)工具。</p><p>  1.4 課程設(shè)計要求</p&

9、gt;<p>  1. 分析課程設(shè)計題目的要求2. 寫出詳細設(shè)計說明3. 編寫程序代碼,調(diào)試程序使其能正確運行4. 設(shè)計完成的軟件要便于操作和使用5. 設(shè)計完成后提交課程設(shè)計報告</p><p>  第2章 課程設(shè)計內(nèi)容</p><p><b>  2.1程序功能介紹</b></p><p>  利用Turbo C 所

10、具有的函數(shù)模仿畫出計算器的界面,實現(xiàn)計算器的基本功能,進行浮點數(shù)加、減、乘、除、乘方和求模運算。</p><p>  2.2程序整體設(shè)計說明</p><p>  計算器的輸入輸出和顯示結(jié)果的顯示屏,繪制計算器的按鍵,繪制邊框。利用Turbo C繪制程序中的計算器的圖形. 程序中對使用的圖形系統(tǒng)進行初始化定義函數(shù),然后輸出函數(shù)進行字符的輸入輸出,來進行簡單的+、-。*、/運算。</p&

11、gt;<p><b>  2.2.1設(shè)計思路</b></p><p>  C語言編輯的程序可以直接輸入數(shù)學(xué)表達式,是由于它具有優(yōu)良的兼容性,有很好的數(shù)據(jù)處理能力,穩(wěn)定性也很強。不需要轉(zhuǎn)換就可以直接輸出數(shù)學(xué)運算的結(jié)果。輸入字符后,輸出結(jié)果可以顯示一個字符串表達式(傳入?yún)?shù),輸出值), 所以該程序具有較強的計算能力</p><p>  2.2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計

12、及用法說明</p><p>  在主函數(shù)里先對接口、屏幕、系統(tǒng)等函數(shù)定義(#include <math.h> #include <conio.h>),屏幕函數(shù)包括文本窗口大小設(shè)定(<void drawboder(void)>)、窗口顏色的設(shè)置、窗口文本的清除和輸入輸出等函數(shù)。編制圖形程序時,在進入圖形方式前,要在程序中對使用的圖形系統(tǒng)初始化,進入相應(yīng)程序的入口地址,利用otte

13、xtxy定位輸出文本,用void window(int left, int top, int right, int bottom)形式調(diào)用window()函數(shù),而需要用另一窗口時, 可以將定義該窗口的window()函數(shù)再次調(diào)用一次, 就可以定義多個窗口。</p><p>  2.2.3程序結(jié)構(gòu)(流程圖) </p><p>  圖2.1 計算器流程圖</p><p>

14、;  2.2.4各模塊的功能及程序說明</p><p>  1、[+]主要功能:加法 2、[-]主要功能:減法 3、[*]主要功能:乘法</p><p>  4、[/]主要功能:減法 5、[/]主要功能:除法 備注:兩個操作數(shù)</p><p><b>  使用方法:</b></p><p>  用鍵盤方向

15、鍵(上、下、左、右)←負值字的正負值字鍵,如果,當(dāng)移動到相應(yīng)得程序的入口地址,用算??刂剖髽?biāo)圖形的移動,當(dāng)移動到想要輸入的按鈕時按下回車鍵即可輸入當(dāng)前數(shù)字或者執(zhí)行與之對應(yīng)的函數(shù)</p><p>  1、輸入數(shù)值時,按下相應(yīng)的數(shù)字鍵,若輸入錯誤可以用CE鍵消去本次輸入的數(shù)值,然后再重新輸入正確的數(shù)值。</p><p>  2、輸入數(shù)值后,按+ - * / 等鍵進行四則運算。</p>

16、;<p>  3、按 +/- 可以更改輸入數(shù)值的正負值。</p><p><b>  2.2.5程序結(jié)果</b></p><p><b>  (1) </b></p><p><b>  圖2.1程序運行圖</b></p><p>  (2)輸入算式25-13=&

17、lt;/p><p><b>  輸入步驟:</b></p><p><b>  第一步:</b></p><p><b>  圖2.2輸入25</b></p><p><b>  第二步:</b></p><p><b>  

18、圖2.3減去13</b></p><p><b>  第三步:</b></p><p><b>  圖2.4等于12</b></p><p>  (3)輸入算式33/11=</p><p><b>  輸入步驟:</b></p><p>&l

19、t;b>  第一步:</b></p><p><b>  圖2.5輸入33</b></p><p><b>  第二步:</b></p><p><b>  圖2.6除以11</b></p><p><b>  第三步:</b></

20、p><p><b>  圖2.7等于3</b></p><p>  2.3程序源代碼及注釋</p><p>  #include <dos.h> /*DOS接口函數(shù)*/</p><p>  #include <math.h> /*數(shù)學(xué)函數(shù)的定義*/</p><p>  

21、#include <conio.h> /*屏幕操作函數(shù)*/</p><p>  #include <stdio.h> /*I/O函數(shù)*/</p><p>  #include <stdlib.h> /*庫函數(shù)*/</p><p>  #include <stdarg.h> /*變量長度參數(shù)表*/</p&g

22、t;<p>  #include <graphics.h> /*圖形函數(shù)*/</p><p>  #include <string.h> /*字符串函數(shù)*/</p><p>  #include <ctype.h> /*字符操作函數(shù)*/</p><p>  #define UP 0x48 /*光標(biāo)上移鍵*

23、/</p><p>  #define DOWN 0x50 /*光標(biāo)下移鍵*/</p><p>  #define LEFT 0x4b /*光標(biāo)左移鍵*/</p><p>  #define RIGHT 0x4d /*光標(biāo)右移鍵*/</p><p>  #define ENTER 0x0d /*回車鍵*/</p><

24、;p>  void *rar; /*全局變量,保存光標(biāo)圖象*/</p><p>  struct palettetype palette; /*使用調(diào)色板信息*/</p><p>  int GraphDriver; /* 圖形設(shè)備驅(qū)動*/</p><p>  int GraphMode; /* 圖形模式值*/<

25、;/p><p>  int ErrorCode; /* 錯誤代碼*/</p><p>  int MaxColors; /* 可用顏色的最大數(shù)值*/</p><p>  int MaxX, MaxY; /* 屏幕的最大分辨率*/</p><p>  double A

26、spectRatio; /* 屏幕的像素比*/</p><p>  void drawboder(void); /*畫邊框函數(shù)*/</p><p>  void initialize(void); /*初始化函數(shù)*/</p><p>  void computer(void); /*計算器計算函數(shù)*/</p><p>  v

27、oid changetextstyle(int font, int direction, int charsize); /*改變文本樣式函數(shù)*/</p><p>  void mwindow(char *header); /*窗口函數(shù)*/</p><p>  int specialkey(void) ; /*獲取特殊鍵函數(shù)*/</p><p>  int a

28、rrow(); /*設(shè)置箭頭光標(biāo)函數(shù)*/</p><p><b>  /*主函數(shù)*/</b></p><p>  int main()</p><p><b>  {</b></p><p>  initialize();/* 設(shè)置系統(tǒng)進入圖形模式 */</p>

29、<p>  computer(); /*運行計算器 */</p><p>  closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/</p><p>  return(0); /*結(jié)束程序*/</p><p><b>  }</b></p><p>  /* 設(shè)置系統(tǒng)進入

30、圖形模式 */</p><p>  void initialize(void)</p><p><b>  {</b></p><p>  int xasp, yasp; /* 用于讀x和y方向縱橫比*/</p><p>  GraphDriver = DETECT; /* 自動檢測顯示器*/

31、</p><p>  initgraph( &GraphDriver, &GraphMode, "" );</p><p>  /*初始化圖形系統(tǒng)*/</p><p>  ErrorCode = graphresult(); /*讀初始化結(jié)果*/</p><p>  if( E

32、rrorCode != grOk ) /*如果初始化時出現(xiàn)錯誤*/</p><p><b>  {</b></p><p>  printf("Graphics System Error: %s\n",</p><p>  grapherrormsg( ErrorCode ) ); /*顯示錯誤代碼*/</p>

33、<p>  exit( 1 ); /*退出*/</p><p><b>  }</b></p><p>  getpalette( &palette ); /* 讀面板信息*/</p><p>  MaxColors = getmaxcolor() + 1; /* 讀取顏色的最

34、大值*/</p><p>  MaxX = getmaxx(); /* 讀屏幕尺寸 */</p><p>  MaxY = getmaxy(); /* 讀屏幕尺寸 */</p><p>  getaspectratio( &xasp, &yasp ); /* 拷貝縱橫比到變量中*/<

35、;/p><p>  AspectRatio = (double)xasp/(double)yasp;/* 計算縱橫比值*/</p><p><b>  }</b></p><p><b>  /*計算器函數(shù)*/</b></p><p>  void computer(void)</p>&

36、lt;p><b>  {</b></p><p>  struct viewporttype vp; /*定義視口類型變量*/</p><p>  int color, height, width;</p><p>  int x, y,x0,y0, i, j,v,m,n,act,flag=1;</p><p>

37、  float num1=0,num2=0,result; /*操作數(shù)和計算結(jié)果變量*/</p><p>  char cnum[5],str2[20]={""},c,temp[20]={""};</p><p>  char str1[]="1230.456+-789*/Qc=^%";/* 定義字符串在按鈕圖形上顯示的符號 *

38、/</p><p>  mwindow( "Calculator" ); /* 顯示主窗口 */</p><p>  color = 7; /*設(shè)置灰顏色值*/</p><p>  getviewsettings( &vp ); /* 讀取當(dāng)前窗口的大小*/</p><p>  wid

39、th=(vp.right+1)/10; /* 設(shè)置按鈕寬度 */</p><p>  height=(vp.bottom-10)/10 ; /*設(shè)置按鈕高度 */</p><p>  x = width /2; /*設(shè)置x的坐標(biāo)值*/</p><p>  y = height/2; /*設(shè)置y的坐標(biāo)值*/</p>

40、;<p>  setfillstyle(SOLID_FILL, color+3);</p><p>  bar( x+width*2, y, x+7*width, y+height );</p><p>  /*畫一個二維矩形條顯示運算數(shù)和結(jié)果*/</p><p>  setcolor( color+3 ); /*設(shè)置淡綠顏色邊框線*/</p&

41、gt;<p>  rectangle( x+width*2, y, x+7*width, y+height );</p><p>  /*畫一個矩形邊框線*/</p><p>  setcolor(RED); /*設(shè)置顏色為紅色*/</p><p>  outtextxy(x+3*width,y+height/2,"0."); /

42、*輸出字符串"0."*/</p><p>  x =2*width-width/2; /*設(shè)置x的坐標(biāo)值*/</p><p>  y =2*height+height/2; /*設(shè)置y的坐標(biāo)值*/</p><p>  for( j=0 ; j<4 ; ++j ) /*畫按鈕*/</p><p><b>

43、;  {</b></p><p>  for( i=0 ; i<5 ; ++i )</p><p><b>  {</b></p><p>  setfillstyle(SOLID_FILL, color);</p><p>  setcolor(RED);</p><p>  

44、bar( x, y, x+width, y+height ); /*畫一個矩形條*/</p><p>  rectangle( x, y, x+width, y+height );</p><p><b>  {</b></p><p><b>  y=y0; </b></p><p><b&

45、gt;  n=0;</b></p><p>  } /*如果移到尾,再下移,則移動到最上邊字符位置*/</p><p><b>  else</b></p><p><b>  {</b></p><p>  y=y+height+height/2;</p><p&g

46、t;<b>  n++;</b></p><p>  } /*否則,移到下邊一個字符位置*/</p><p>  putimage(x,y,rar,XOR_PUT); /*在新的位置顯示光標(biāo)箭頭*/</p><p><b>  }</b></p><p>  c=str1[n*5+m]; /*將

47、字符保存到變量c中*/</p><p>  if(isdigit(c)||c=='.') /*判斷是否是數(shù)字或小數(shù)點*/</p><p><b>  {</b></p><p>  if(flag==-1) /*如果標(biāo)志為-1,表明為負數(shù)*/</p><p><b>  {</b>

48、;</p><p>  strcpy(str2,"-"); /*將負號連接到字符串中*/</p><p><b>  flag=1;</b></p><p>  } /*將標(biāo)志值恢復(fù)為1*/</p><p>  sprintf(temp,"%c",c); /*將字符保存到字符串變量

49、temp中*/</p><p>  strcat(str2,temp); /*將temp中的字符串連接到str2中*/</p><p>  setfillstyle(SOLID_FILL,color+3);</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2);</p><p&

50、gt;  outtextxy(5*width,height,str2); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c=='+')</p><p><b>  {</b></p><p>  num1=atof(str2); /*將第一

51、個操作數(shù)轉(zhuǎn)換為浮點數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=1; /*做計算加法標(biāo)志值*/</p><p>  putimage(4,4,rar,XOR_PUT); /*消去光標(biāo)箭頭圖象*/</p><p><b>  return 0;&

52、lt;/b></p><p><b>  }</b></p><p><b>  /*按鍵函數(shù)*/</b></p><p>  int specialkey(void)</p><p><b>  {</b></p><p><b>  

53、int key;</b></p><p>  while(bioskey(1)==0); /*等待鍵盤輸入*/</p><p>  key=bioskey(0); /*鍵盤輸入*/</p><p>  key=key&0xff? key&0xff:key>>8; /*只取特殊鍵的掃描值,其余為0*/</p>

54、<p>  return(key); /*返回鍵值*/</p><p><b>  }</b></p><p>  第3章 課程設(shè)計總結(jié)</p><p>  通過本學(xué)期C語言學(xué)習(xí),我對計算機有了全新的認識。計算機硬件相當(dāng)于人類的大腦,而程序則相當(dāng)于人類的思想,我很高興學(xué)習(xí)到了有關(guān)計算機編程方面的知識。雖然我現(xiàn)在所學(xué)的東西遠遠

55、不足以控制整個計算機系統(tǒng),但是也可以讓計算機成功的運行屬于我自己的小程序,當(dāng)屏幕上出現(xiàn)自己運行的程序的時候,那種激動的心情是無法形容的。C語言是編程語言的基礎(chǔ),以后我一定會更加努力的學(xué)習(xí)C語言,為以后學(xué)習(xí)更多的語言打下堅實的基礎(chǔ)。期末階段的課程設(shè)計,我們的任務(wù)是寫一個計算器的程序,我開始摸索,先查找有關(guān)資料,然后用畫圖以及循環(huán)將框架設(shè)計出來,但是后來的步驟比較棘手,計算是關(guān)鍵和難點,我們也查閱了相關(guān)的資料,但它上面用得是坐標(biāo)來做的,所以

56、為了方便設(shè)計程序,我們也改為用坐標(biāo)來做的,計算問題就解決了。然后就是按鍵問題,我們找的資料是用鼠標(biāo)做的,所以按鍵這個函數(shù)就只能自己設(shè)計,還好手頭有類似的資料,經(jīng)過自己的反復(fù)嘗試和與同學(xué)們的探討,這個問題也被我們解決了。閃爍這個設(shè)計的方法很死板,都一個類型,就是算坐標(biāo)比較煩瑣,必須確定好它的位置,但是這些只要不斷的去嘗試,都可以解決。</p><p>  整個課程設(shè)計終于完成了,雖然過程有些艱難,但還是順利的完成了

57、。我們付出了很多努力,但我認為我們所得到的遠遠多余所付出的。例如同學(xué)之間的互相幫助讓我第一次這么深刻的體驗到了什么叫團隊精神,團隊精神在日后的工作中是非常重要的。有些同學(xué)積極的態(tài)度讓我感到一絲慚愧,他們所體現(xiàn)出的堅持不懈的品質(zhì)更令我折服。這次課程設(shè)計也讓我看到了自己基礎(chǔ)的薄弱。從今往后我將不斷的求索,學(xué)習(xí)之路也好,人生之路也罷。而學(xué)習(xí)C語言之路就是不斷調(diào)試,完善自我。這次的課程設(shè)計還提高了我實際分析問題、編程和動手能力,使我掌握了程序設(shè)

58、計的基本技能,提高了我適應(yīng)實際,實踐編程的能力。</p><p>  然而,這只是萬里長征的第一步。后面的路還很長,困難還很多,可是我能成功的編譯一個程序,能夠在思路卡殼的情況下,繼續(xù)前進,我在此很想感謝那些給予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個日夜,如此多的困難,同學(xué)們勤懇塌實,從開始到結(jié)束,沒有顯出一點倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。

59、60;     在課程設(shè)計過程中,我學(xué)到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒,黑夜過去了,我們收獲的是黎明。在本次實踐中,給我印象最為深刻的是在文件刪除程序的編譯過程中,先有我的各個子程序都已經(jīng)編輯成功,那么這最后的程序就將是我成功的關(guān)鍵。老天不會讓我太過順利,他在這最后的時刻設(shè)置的障礙,是要考驗我的能力,他要置我

60、于死地?在這個問題的解決上,我打了退堂鼓,我不能忍受長時間的無功而反,時間正在消磨我的意志。沒有了柳暗花明的一天,那么我怎么能說經(jīng)受住了考驗?謝謝老師的那句話,她說:人力有所不能及,然而,人的精神是不會敗倒的。我鼓起勇氣,到處問,到處查資料,黃天不負有心人,在一篇文章上,終</p><p><b>  參考資料</b></p><p>  [1]張龍祥.面向?qū)ο蟪绦蛟O(shè)

61、計[M].北京:人民郵電出版社,2001: 180-206</p><p>  [2]高福祥等.匯編語言程序設(shè)計.沈陽:東北大學(xué)出版社,1995: 97-133</p><p>  [3]黃明等.C語言程序設(shè)計.大連理工大學(xué)出版社,2005: 68-98[4]馬靖善.C語言程序設(shè)計.清華大學(xué)出版社,2005: 75-120</p><p>  [5]張穎江.C語言

62、程序設(shè)計.北京: 科學(xué)出版社, 1998 :135-170</p><p>  [6]譚浩強.C語言程序設(shè)計(第二版).北京:高等教育出版社,2002: 66-175[7]張毅坤.C語言程序設(shè)計教程[M] .西安交通大學(xué)出版社,2003: 208-230[8]李成付.C語言程序設(shè)計基礎(chǔ).北京: 科學(xué)出版社, 1992: 26-75</p><p>  [9]李國昌.C語言程序設(shè)計基

63、礎(chǔ).北京: 科學(xué)出版社, 1998: 38-66</p><p>  [10]李大友.C語言程序設(shè)計基礎(chǔ).北京: 清華大學(xué)出版社, 1999: 26-56</p><p>  [11]錢啟平.C語言程序設(shè)計基礎(chǔ).北京: 中國鐵道出版社, 2000: 50-100</p><p>  [12]郝玉潔.C語言程序設(shè)計.北京: 機械工業(yè)出版社, 2000: 120-164

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論