C语言课程设计报告计算器_第1页
C语言课程设计报告计算器_第2页
C语言课程设计报告计算器_第3页
C语言课程设计报告计算器_第4页
C语言课程设计报告计算器_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言课程设计报告.课程设计题目:简易计算器.需求分析:.功能分析:具备整型数据、浮点型数据的算术(加、减、乘、除及三角函数的基本运算)运算功能。通过键盘方向键移动光标依次输入第一个运算数、运算符(+,-,*,/,,,#,&,)、第二个运算数(三角函数除外),然后输出结果。结果可以作为下一个运算的第一运算数。按c清屏,按q返回 菜单。( “”表示x的y次方,“% ”表示做模运算,“”表示sin,“”表示cos,“”表示tan, “&”表示cot, “”表示开方).流程分析(程序简易流程图):见后页 3.系统设计:()主函数mian()。首先声明必要的变量,初始化图形系统,调用函

2、数computer(void)进行计算。结束程序之前要关闭图形系统。 ()统初始化函数init()。()窗口函数void mwindow(char *header)。设置视口大小为当前窗口的一半,调用画边框函数void drawborder(void)画出边框。()获取特殊函键函数int specialkey(void)。利用bioskey()函数读取按键信息。boskey(0),则返回下一个键盘输入,返回位的二进制数。对于箭头键、功能键等特殊键,低位为,高位存放该键的扫描码。对于普通键,低位为键的码。()设置箭头光标函数int arrow()。图形方式下光标是看不见的,自己设计一个光标。()

3、画边框函数void drawborder(void). ()算函数void computer(void)。界面设置完成,用循环判断光标位置,按回车后,判断所按的键,进行相应的处理。如所选为数字或小数点,先判断是否为负数,若是则符号连上字符串,否则只连所选的数字或小数点。只进行“”、“”、“*”、“”运算。.系统调试: 在tc环境下,调用源程序运行。系统进入主窗口,再通过键盘上的方向键控制并移动光标,选择窗口上的数字键及运算符进行简单计算,再通过光标键入“=”得出结果。该程序可以进行简单的加减乘除,未知数的n次方及三角函数的运算。若进行下一次计算需键入“c”键返清零。当计算结束时,键入“q”键退

4、出程序。(补缺)流程分析(程序简易流程图).课设小结(心得体会):经过两个星期的上机实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践

5、操作,使自己便好地学好计算机。参考文献:. 书名:c语言程序设计实训 出版社:中国水利水电出版社 出版年月:2005年5月第1版. 书名:c语言程序设计(第三版) 出版社:清华大学出版社 出版年月:2005年7月第3版3. 0 书名:21世纪进阶辅导 c语言程序设计 出版社:大连理工大学出版社 出版年月:2005年.附录(源代码):#include <dos.h> /*dos接口函数*/#include <math.h> /*数学函数的定义*/#include <conio.h> /*屏幕操作函数*/#include <stdio.h> /*i/

6、o函数*/#include <stdlib.h> /*库函数*/#include <stdarg.h> /*变量长度参数表*/#include <graphics.h> /*图形函数*/#include <string.h> /*字符串函数*/#include <ctype.h> /*字符操作函数*/#define up 0x48 /*光标上移键*/#define down 0x50 /*光标下移键*/#define left 0x4b /*光标左移键*/#define right 0x4d /*光标右移键*/#define ente

7、r 0x0d /*回车键*/void *rar; /*全局变量,保存光标图象*/struct palettetype palette; /*使用调色板信息*/int graphdriver; /* 图形设备驱动*/int graphmode; /* 图形模式值*/int errorcode; /* 错误代码*/int maxcolors; /* 可用颜色的最大数值*/int maxx, maxy; /* 屏幕的最大分辨率*/double aspectratio; /* 屏幕的像素比*/void drawboder(void); /*画边框函数*/void initialize(void); /

8、*初始化函数*/void computer(void); /*计算器计算函数*/void changetextstyle(int font, int direction, int charsize); /*改变文本样式函数*/void mwindow(char *header); /*窗口函数*/int specialkey(void) ; /*获取特殊键函数*/int arrow(); /*设置箭头光标函数*/*主函数*/int main() initialize();/* 设置系统进入图形模式 */ computer(); /*运行计算器 */ closegraph();/*系统关闭图形模

9、式返回文本模式*/ return(0); /*结束程序*/* 设置系统进入图形模式 */void initialize(void) int xasp, yasp; /* 用于读x和y方向纵横比*/ graphdriver = detect; /* 自动检测显示器*/ initgraph( &graphdriver, &graphmode, "" );/*初始化图形系统*/ errorcode = graphresult(); /*读初始化结果*/ if( errorcode != grok ) /*如果初始化时出现错误*/ printf("grap

10、hics system error: %sn", grapherrormsg( errorcode ) ); /*显示错误代码*/ exit( 1 ); /*退出*/ getpalette( &palette ); /* 读面板信息*/ maxcolors = getmaxcolor() + 1; /* 读取颜色的最大值*/ maxx = getmaxx(); /* 读屏幕尺寸 */ maxy = getmaxy(); /* 读屏幕尺寸 */ getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中*/ aspectratio

11、= (double)xasp/(double)yasp;/* 计算纵横比值*/*计算器函数*/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; /*操作数和计算结果变量*/ char cnum5,str220="",c,temp20="" char str1="1230+456=-789%*<

12、>#/qc.&"/* 定义字符串在按钮图形上显示的符号 */ mwindow( "calculator" ); /* 显示主窗口 */ color = 7; /*设置灰颜色值*/ getviewsettings( &vp ); /* 读取当前窗口的大小*/ width=(vp.right+1)/10; /* 设置按钮宽度 */ height=(vp.bottom-10)/10 ; /*设置按钮高度 */ x = width /2; /*设置x的坐标值*/ y = height/2; /*设置y的坐标值*/ setfillstyle(solid

13、_fill, color+3); bar( x+width*2, y, x+7*width, y+height ); /*画一个二维矩形条显示运算数和结果*/ setcolor( color+3 ); /*设置淡绿颜色边框线*/ rectangle( x+width*2, y, x+7*width, y+height ); /*画一个矩形边框线*/ setcolor(red); /*设置颜色为红色*/ outtextxy(x+3*width,y+height/2,"0."); /*输出字符串"0."*/ x =2*width-width/2; /*设置x

14、的坐标值*/ y =2*height+height/2; /*设置y的坐标值*/ for( j=0 ; j<5 ; +j ) /*画按钮*/ for( i=0 ; i<5 ; +i ) setfillstyle(solid_fill, color); setcolor(red); bar( x, y, x+width, y+height ); /*画一个矩形条*/ rectangle( x, y, x+width, y+height ); sprintf(str2,"%c",str1j*5+i); /*将字符保存到str2中*/ outtextxy( x+(wi

15、dth/2), y+height/2, str2); x =x+width+ (width / 2) ; /*移动列坐标*/ y +=(height/2)*3; /* 移动行坐标*/ x =2*width-width/2; /*复位列坐标*/ x0=2*width; y0=3*height; x=x0; y=y0; gotoxy(x,y); /*移动光标到x,y位置*/ arrow(); /*显示光标*/ putimage(x,y,rar,xor_put); m=0; n=0; strcpy(str2,""); /*设置str2为空串*/ while(v=specialke

16、y()!=45) /*当压下alt+x键结束程序,否则执行下面的循环*/ 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(x<=x0) x=x0+6*width;

17、 m=4; /*如果移到头,再左移,则移动到最右边字符位置*/ else x=x-width-width/2; m-; /*否则,左移到前一个字符位置*/ if(v=up) /*上移箭头时新位置计算*/ if(y<=y0) y=y0+5*height+height/2; n=3; /*如果移到头,再上移,则移动到最下边字符位置*/ else y=y-height-height/2; n-; /*否则,移到上边一个字符位置*/ if(v=down) /*下移箭头时新位置计算*/ if(y>=8*height) y=y0; n=0; /*如果移到尾,再下移,则移动到最上边字符位置*/

18、else y=y+height+height/2; n+; /*否则,移到下边一个字符位置*/ putimage(x,y,rar,xor_put); /*在新的位置显示光标箭头*/ c=str1n*5+m; /*将字符保存到变量c中*/ if(isdigit(c)|c='.') /*判断是否是数字或小数点*/ if(flag=-1) /*如果标志为-1,表明为负数*/ strcpy(str2,"-"); /*将负号连接到字符串中*/ flag=1; /*将标志值恢复为1*/ sprintf(temp,"%c",c); /*将字符保存到字符

19、串变量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); /*将第一个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=1; /*做计算加法标志值*/ setfil

20、lstyle(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为空,说明是负号,而不是减号*/ flag=-1; /*设置负数标志*/ else num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将st

21、r2清空*/ act=2; /*做计算减法标志值*/ 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); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=3; /*做计算乘法标志值*/ setfillstyle(s

22、olid_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); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=4; /*做计算除法标志值*/ setfillstyle(solid_fill,color+3); bar(2*width+width/2,height/2,

23、15*width/2,3*height/2); outtextxy(5*width,height,"0."); /*显示字符串*/ if(c='') num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=5; /*做计算乘方标志值*/ setfillstyle(solid_fill,color+3); /*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/ out

24、textxy(5*width,height,"0."); /*显示字符串*/ if(c='%') num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=6; /*做计算模运算乘方标志值*/ setfillstyle(solid_fill,color+3); /*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/ outtextxy(5*width,height,&

25、quot;0."); /*显示字符串*/ if(c='<') num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=7; /*做sin运算标志值*/ setfillstyle(solid_fill,color+3); /*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/ outtextxy(5*width,height,"0."); /*显示字符

26、串*/ if(c='>') num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=8; /*做cos运算标志值*/ 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='#')

27、num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=9; /*做tan运算标志值*/ 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); /*将第

28、二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/ act=10; /*做cot运算标志值*/ 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); /*将第二个操作数转换为浮点数*/ strcpy(str2

29、,""); /*将str2清空*/ act=11; /*做开方运算标志值*/ 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='=') num2=atof(str2); /*将第二个操作数转换为浮点数*/ switch(act) /*根据运算符号计算*/ case 1:resu

30、lt=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; /*做模运算*/ case 7:result=sin(num1);break;/*做sin运算*/ case 8:result=cos(num

31、1);break;/*做cos运算*/ case 9:result=tan(num1);break;/*做tan运算*/ case 10:result=atan(num1);break;/*做cot运算*/ case 11:result=sqrt(num1);break;/*做开方运算*/ setfillstyle(solid_fill,color+3); /*设置用淡绿色实体填充*/ bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/ sprintf(temp,"%f",result); /*将结果

32、保存到temp中*/ outtextxy(5*width,height,temp); /*显示结果*/ if(c='c') num1=0; /*将两个操作数复位0,符号标志为1*/ num2=0; flag=1; strcpy(str2,""); /*将str2清空*/ 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='q')exit(0); /*如果选择了q回车,结束计算程序*/ putimage(x,y,rar,xor_put); /*在退出之前消去光标箭头*/ return; /*返回*/*窗口函数*/void mwindow( char *header ) int height; cleardevice(); /* 清除图形屏幕 */ setcolor( maxcolors - 1 ); /* 设置当前颜色为白色*/ setviewport( 22, 20,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论