計(jì)算機(jī)技術(shù)基礎(chǔ)(c語言)課程設(shè)計(jì)--計(jì)算器_第1頁
已閱讀1頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)技術(shù)基礎(chǔ)課程設(shè)計(jì)</p><p><b>  C語言</b></p><p><b>  設(shè)計(jì)報(bào)告</b></p><p><b>  設(shè)計(jì)題目:</b></p><p><b>  計(jì)算器</b></p><

2、;p><b>  二.選題背景:</b></p><p>  問題提出:在應(yīng)用電腦的過程中,往往需要使用計(jì)算器,來執(zhí)行簡(jiǎn)單的運(yùn)算,但系統(tǒng)提供的計(jì)算功能過于煩瑣,而且有些程序并不提供計(jì)算功能。</p><p>  為此,這里用C語言編制了幾個(gè)函數(shù),用于程序中時(shí),可達(dá)到計(jì)算的目的.</p><p><b>  三.設(shè)計(jì)思路:<

3、/b></p><p>  簡(jiǎn)單的計(jì)算器是對(duì)實(shí)數(shù)進(jìn)行簡(jiǎn)單的加,減,乘,除及簡(jiǎn)單的求冪運(yùn)算。本程序是通過簡(jiǎn)單的C語言的運(yùn)算函數(shù)來計(jì)算運(yùn)行,來實(shí)現(xiàn)計(jì)算器的基本功能。</p><p>  在實(shí)現(xiàn)過程中,應(yīng)用循環(huán)來判斷運(yùn)行相應(yīng)的函數(shù),即可達(dá)到簡(jiǎn)單的計(jì)算器的功能。</p><p><b>  四.設(shè)計(jì)分析:</b></p><p

4、>  1.應(yīng)用技術(shù)點(diǎn)及主要解決問題闡述</p><p>  通過計(jì)算器函數(shù),窗口函數(shù),設(shè)計(jì)鼠標(biāo)圖形函數(shù)及按鍵函數(shù)來構(gòu)成計(jì)算器的實(shí)體,需要解決的是定義計(jì)算器的外觀,及鼠標(biāo)的圖形及其應(yīng)用,尤其是鼠標(biāo)置于頂端時(shí),其下一步的循環(huán)返回另一個(gè)頂端。</p><p><b>  2.技術(shù)關(guān)鍵</b></p><p>  計(jì)算器函數(shù) computer()

5、的邊框,按鍵大小設(shè)計(jì),及鼠標(biāo)在同一行或列中的循環(huán)滾動(dòng),還有進(jìn)行運(yùn)算時(shí),按鍵不同,進(jìn)行響應(yīng)的運(yùn)算,窗口函數(shù)(mwindow()),設(shè)計(jì)鼠標(biāo)函數(shù)(arrow()),按鍵函數(shù)(specialkey())。</p><p><b>  五:程序流程圖</b></p><p>  六、程序清單:1、2、</p><p>  #include <

6、;dos.h> /*DOS接口函數(shù)*/#include <math.h> /*數(shù)學(xué)函數(shù)的定義*/#include <conio.h> /*屏幕操作函數(shù)*/#include <stdio.h>

7、 /*I/O函數(shù)*/#include <stdlib.h> /*庫函數(shù)*/#include <stdarg.h> /*變量長度參數(shù)表*/#include <graphics.h> /*圖形函數(shù)*/#include <string.h>

8、 /*字符串函數(shù)*/#include <ctype.h> /*字符操作函數(shù)*/#define U</p><p>  float num1=0,num2=0,result; /*操作數(shù)和計(jì)算結(jié)果變量*/</p><p>  char cnum[5],str2[

9、20]={""},c,temp[20]={""};</p><p>  char str1[]="1230.456+-789*/Qc=^%"; </p><p>  /* 定義字符串在按鈕圖形上顯示的符號(hào) */</p><p>  mwindow( "Calculator&quo

10、t; ); /* 顯示主窗口 */</p><p>  color = 7; /*設(shè)置灰顏色值*/</p><p>  getviewsettings( &vp ); /* 讀取當(dāng)前窗口的大小*/</p><p>  width=(vp.righ

11、t+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;

12、 /*設(shè)置y的坐標(biāo)值*/</p><p>  setfillstyle(SOLID_FILL, color+3);</p><p>  bar( x+width*2, y, x+7*width, y+height );</p><p>  /*畫一個(gè)二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/</p><p>

13、  setcolor( color+3 ); /*設(shè)置淡綠顏色邊框線*/</p><p>  rectangle( x+width*2, y, x+7*width, y+height );</p><p>  /*畫一個(gè)矩形邊框線*/</p><p>  setcolor(RED);

14、/*設(shè)置顏色為紅色*/</p><p>  outtextxy(x+3*width,y+height/2,"0."); /*輸出字符串"0."*/</p><p>  x =2*width-width/2; /*設(shè)置x的坐標(biāo)值*/</p><p>  y =2*height+height/2

15、; /*設(shè)置y的坐標(biāo)值*/</p><p>  for( j=0 ; j<4 ; ++j ) /*畫按鈕*/</p><p><b>  {</b></p><p>  for( i=0 ; i<5 ; ++i )</p><p><b>

16、;  {</b></p><p>  setfillstyle(SOLID_FILL, color);</p><p>  setcolor(RED);</p><p>  bar( x, y, x+width, y+height ); /*畫一個(gè)矩形條*/</p><p>  rectangle( x, y, x+width,

17、 y+height );</p><p>  sprintf(str2,"%c",str1[j*5+i]);</p><p>  /*將字符保存到str2中*/</p><p>  outtextxy( x+(width/2), y+height/2, str2);</p><p>  x =x+width+ (width

18、 / 2) ; /*移動(dòng)列坐標(biāo)*/</p><p><b>  }</b></p><p>  y +=(height/2)*3; /* 移動(dòng)行坐標(biāo)*/</p><p>  x =2*width-width/2; /*復(fù)位列坐標(biāo)*/</p><p>

19、;<b>  }</b></p><p>  x0=2*width;</p><p>  y0=3*height;</p><p><b>  x=x0;</b></p><p><b>  y=y0;</b></p><p>  gotoxy(x,y)

20、; /*移動(dòng)光標(biāo)到x,y位置*/</p><p>  arrow(); /*顯示光標(biāo)*/</p><p>  putimage(x,y,rar,XOR_PUT);</p><p><b>  m=0;</b></p>&

21、lt;p><b>  n=0;</b></p><p>  strcpy(str2,""); /*設(shè)置str2為空串*/</p><p>  while((v=specialkey())!=45) /*當(dāng)壓下Alt+

22、x鍵結(jié)束程序,否則執(zhí)行下面的循環(huán)*/</p><p><b>  {</b></p><p>  while((v=specialkey())!=ENTER) /*當(dāng)壓下鍵不是回車時(shí)*/</p><p><b>  {</b></p><p>  putimage(x,y,rar,XOR_PU

23、T); /*顯示光標(biāo)圖象*/</p><p>  if(v==RIGHT) /*右移箭頭時(shí)新位置計(jì)算*/</p><p>  if(x>=x0+6*width)</p><p>  /*如果右移,移到尾,則移動(dòng)到最左邊字符位置*/</p><p><b>  {<

24、;/b></p><p><b>  x=x0;</b></p><p><b>  m=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

25、 {</b></p><p>  x=x+width+width/2; /*否則,右移到下一個(gè)字符位置*/</p><p>  m++; /*左移箭頭時(shí)新位置計(jì)算*/</p><p>  } </p><p>  if(v==

26、LEFT) </p><p><b>  if(x<=x0)</b></p><p><b>  {</b></p><p>  x=x0+6*width; /*如果移到頭,再左移,則移動(dòng)到最右邊字符位置*/</p><p><

27、;b>  m=4;</b></p><p>  } </p><p><b>  else</b></p><p><b>  {</b></p><p>  x=x-width-width/2; /*否則,左移到前一個(gè)字符位置*

28、/</p><p>  m--; /*左移箭頭時(shí)新位置計(jì)算*/</p><p>  } </p><p>  if(v==UP) </p><p><b> 

29、 if(y<=y0)</b></p><p><b>  {</b></p><p>  y=y0+4*height+height/2; /*如果移到頭,再上移,則移動(dòng)到最下邊字符位置*/</p><p><b>  n=3;</b></p><p>  }

30、 </p><p><b>  else</b></p><p><b>  {</b></p><p>  y=y-height-height/2; /*否則,移到上邊一個(gè)字符位置*/</p><p>  n--; /*上移箭頭時(shí)新位置計(jì)算*/&

31、lt;/p><p>  } </p><p>  if(v==DOWN) </p><p>  if(y>=7*height)</p><p><b>  {</b></p><p>

32、;  y=y0; /*如果移到尾,再下移,則移動(dòng)到最上邊字符位置*/</p><p><b>  n=0;</b></p><p>  } </p><p><b>  else</b></p><p><b

33、>  {</b></p><p>  y=y+height+height/2; /*否則,移到下邊一個(gè)字符位置*/</p><p>  n++; /*在新的位置顯示光標(biāo)箭頭*/</p><p>  } </p>

34、<p>  putimage(x,y,rar,XOR_PUT); </p><p><b>  }</b></p><p>  c=str1[n*5+m]; /*將字符保存到變量c中*/</p><p>  if(isdigit(c)||c=='.') /*判斷是否是數(shù)字或小數(shù)點(diǎn)

35、*/</p><p><b>  {</b></p><p>  if(flag==-1) /*如果標(biāo)志為-1,表明為負(fù)數(shù)*/</p><p><b>  {</b></p><p>  strcpy(str2,"-");

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

37、到字符串變量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*hei

38、ght/2);</p><p>  outtextxy(5*width,height,str2); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c=='+')</p><p><b>  {</b></p><

39、p>  num1=atof(str2); /*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=1; /*做計(jì)算加法標(biāo)志值*/

40、</p><p>  setfillstyle(SOLID_FILL,color+3);</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2);</p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p&g

41、t;<p><b>  }</b></p><p>  if(c=='-')</p><p><b>  {</b></p><p>  if(strcmp(str2,"")==0) /*如果str2為空,說明是負(fù)號(hào),而不是減號(hào)*/</p>

42、<p>  flag=-1; /*設(shè)置負(fù)數(shù)標(biāo)志*/</p><p><b>  else</b></p><p><b>  {</b></p><p>  num1=atof(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)

43、換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=2; /*做計(jì)算減法標(biāo)志值*/</p><p>  setfillstyle(SOLID_FILL,color+3);&l

44、t;/p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2); </p><p><b>  /*畫矩形*/</b></p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><

45、p><b>  }</b></p><p><b>  }</b></p><p>  if(c=='*')</p><p><b>  {</b></p><p>  num1=atof(str2); /*

46、將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=3; /*做計(jì)算乘法標(biāo)志值*/</p><p>  setfillstyle(SOLID_FI

47、LL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);</p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><p><b>  }</b></p><p>  i

48、f(c=='/')</p><p><b>  {</b></p><p>  num1=atof(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將st

49、r2清空*/</p><p>  act=4; /*做計(jì)算除法標(biāo)志值*/</p><p>  setfillstyle(SOLID_FILL,color+3);</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2);</p&

50、gt;<p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c=='^')</p><p><b>  {</b></p><p

51、>  num1=atof(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=5;

52、 /*做計(jì)算乘方標(biāo)志值*/</p><p>  setfillstyle(SOLID_FILL,color+3); /*設(shè)置用淡綠色實(shí)體填充*/</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2); </p><p><b>  /*畫矩形*/</b>&

53、lt;/p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c=='%')</p><p><b>  {</b></p&g

54、t;<p>  num1=atof(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  act=6;

55、 /*做計(jì)算模運(yùn)算乘方標(biāo)志值*/</p><p>  setfillstyle(SOLID_FILL,color+3); /*設(shè)置用淡綠色實(shí)體填充*/</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2); </p><p><b>  /*畫矩形*

56、/</b></p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c=='=')</p><p><b>  {</b

57、></p><p>  num2=atof(str2); /*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/</p><p>  switch(act) /*根據(jù)運(yùn)算符號(hào)計(jì)算*/</p><p><b>  {</b></p>

58、<p>  case 1:result=num1+num2;break; /*做加法*/</p><p>  case 2:result=num1-num2;break; /*做減法*/</p><p>  case 3:result=num1*num2;break; /*做乘法*/</p>

59、;<p>  case 4:result=num1/num2;break; /*做除法*/</p><p>  case 5:result=pow(num1,num2);break; /*做x的y次方*/</p><p>  case 6:result=fmod(num1,num2);break; /*做模運(yùn)算*/<

60、;/p><p><b>  }</b></p><p>  setfillstyle(SOLID_FILL,color+3); /*設(shè)置用淡綠色實(shí)體填充*/</p><p>  bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆蓋結(jié)果區(qū)*/</p>&l

61、t;p>  sprintf(temp,"%f",result); /*將結(jié)果保存到temp中*/</p><p>  outtextxy(5*width,height,temp); /*顯示結(jié)果*/</p><p><b>  }</b></p><p>  i

62、f(c=='c')</p><p><b>  {</b></p><p>  num1=0; /*將兩個(gè)操作數(shù)復(fù)位0,符號(hào)標(biāo)志為1*/</p><p><b>  num2=0;</b></p><p><b>

63、;  flag=1;</b></p><p>  strcpy(str2,""); /*將str2清空*/</p><p>  setfillstyle(SOLID_FILL,color+3); /*設(shè)置用淡綠色實(shí)體填充*/</p><p>  bar(

64、2*width+width/2,height/2,15*width/2,3*height/2); /*覆蓋結(jié)果區(qū)*/</p><p>  outtextxy(5*width,height,"0."); /*顯示字符串*/</p><p><b>  }</b></p><p>  if(c==

65、'Q')exit(0); /*如果選擇了q回車,結(jié)束計(jì)算程序*/</p><p><b>  }</b></p><p>  putimage(x,y,rar,XOR_PUT); /*在退出之前消去光標(biāo)箭頭*/</p><p>  re

66、turn; /*返回*/</p><p><b>  }</b></p><p><b>  /*窗口函數(shù)*/</b></p><p>  void mwindow( char *header )</p><p>

67、<b>  {</b></p><p>  int height;</p><p>  cleardevice(); /* 清除圖形屏幕*/</p><p>  setcolor( MaxColors - 1 ); /* 設(shè)置當(dāng)前顏色為白色*/</p

68、><p>  setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 設(shè)置視口大小*/</p><p>  height = textheight( "H" ); /* 讀取基本文本大小*/</p><p>  settextstyle( DEFAULT_FONT

69、, HORIZ_DIR, 1 ); /*設(shè)置文本樣式*/</p><p>  settextjustify( CENTER_TEXT, TOP_TEXT ); /*設(shè)置字符排列方式*/</p><p>  outtextxy( MaxX/4, 2, header ); /*輸出標(biāo)題*/</p><p>

70、;  setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*設(shè)置視口大小*/</p><p>  drawboder(); /*畫邊框*/</p><p><b>  }</b></p><p>  void

71、drawboder(void) /*畫邊框*/</p><p><b>  {</b></p><p>  struct viewporttype vp; /*定義視口類型變量*/</p><p>  setcolor( MaxCo

72、lors - 1 ); /*設(shè)置當(dāng)前顏色為白色*/</p><p>  setlinestyle( SOLID_LINE, 0, NORM_WIDTH ); /*設(shè)置畫線方式*/</p><p>  getviewsettings( &vp ); /*將當(dāng)前視口信息裝入vp所指的結(jié)構(gòu)中*/</p&g

73、t;<p>  rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*畫矩形邊框*/</p><p><b>  }</b></p><p>  /*設(shè)計(jì)鼠標(biāo)圖形函數(shù)*/</p><p>  int arrow()</p><p><b>

74、;  {</b></p><p><b>  int size;</b></p><p>  int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定義多邊形坐標(biāo)*/</p><p>  setfillstyle(SOLID_FILL,2);

75、/*設(shè)置填充模式*/</p><p>  fillpoly(8,raw); /*畫出一光標(biāo)箭頭*/</p><p>  size=imagesize(4,4,16,16); /*測(cè)試圖象大小*/</p><p>  rar=malloc(size);

76、 /*分配內(nèi)存區(qū)域*/</p><p>  getimage(4,4,16,16,rar); /*存放光標(biāo)箭頭圖象*/</p><p>  putimage(4,4,rar,XOR_PUT); /*消去光標(biāo)箭頭圖象*/</p><

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

78、p><p><b>  int key;</b></p><p>  while(bioskey(1)==0); /*等待鍵盤輸入*/</p><p>  key=bioskey(0); /*鍵盤輸入*/</p><p

79、>  key=key&0xff? key&0xff:key>>8; /*只取特殊鍵的掃描值,其余為0*/</p><p>  return(key); /*返回鍵值*/</p><p><b>  }</b></p><

80、p><b>  七:設(shè)計(jì)自評(píng):</b></p><p><b>  1.設(shè)計(jì)優(yōu)點(diǎn):</b></p><p>  本程序簡(jiǎn)單明了,應(yīng)用方便,運(yùn)用了簡(jiǎn)單的C語言,達(dá)到了進(jìn)行簡(jiǎn)單實(shí)數(shù)運(yùn)算的目的,該計(jì)算器可以顯示15位數(shù)字,遠(yuǎn)遠(yuǎn)超過常用的簡(jiǎn)單計(jì)算器,而且該計(jì)算器形象生動(dòng),令人賞心悅目。</p><p><b>  

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論