


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计计算器设计#include <dos.h> /*DOS 接口函数 */#include <math.h> /*数学函数的定义*/#include <conio.h> /*屏幕操作函数 */#include <stdio.h> /*I/O 函数 */#include <stdlib.h> /*库函数 */#include <stdarg.h> /* 变量长度参数表 */#include <graphics.h> /* 图形函数 */#include <string.h> /*字符串函数
2、*/#include <ctype.h> /*字符操作函数 */#define UP 0x48/* 光标上移键 */#define DOWN 0x50/*光标下移键 */#define LEFT 0x4b /* 光标左移键 */#define RIGHT 0x4d /* 光标右移键 */#define ENTER 0x0d /* 回车键 */void *rar;/*全局变量,保存光标图象 */struct palettetype palette; /* 使用调色板信息 */int GraphDriver; /* 图形设备驱动 */int GraphMode; /* 图形模式值 */
3、int ErrorCode; /* 错误代码 */int MaxColors; /*可用颜色的最大数值 */int MaxX, MaxY; /*屏幕的最大分辨率*/double AspectRatio; /* 屏幕的像素比 */void drawboder(void); /* 画边框函数 */void initialize(void);/*初始化函数 */void computer(void); /* 计算器计算函数 */void changetextstyle(int font, int direction, int charsize);/* 改变文本样式函数 */void mwindow(
4、char *header); /* 窗口函数 */int specialkey(void) ;/*获取特殊键函数 */int arrow();/*设置箭头光标函数*/*主函数*/int main()initialize();/* 设置系统进入图形模式*/computer。; /*运行计算器*/closegraph();/*系统关闭图形模式返回文本模式*/return(0); /* 结束程序 */*设置系统进入图形模式*/void initialize(void)int xasp, yasp; /*用于读x和y方向纵横比*/GraphDriver = DETECT; /*自动检测显示器 */in
5、itgraph( &GraphDriver, &GraphMode,"");/*初始化图形系统*/ErrorCode = graphresult(); /* 读初始化结果 */if( ErrorCode != grOk )/*如果初始化时出现错误 */printf("Graphics System Error: %sn",grapherrormsg( ErrorCode ) ); /* 显示错误代码 */exit( 1 ); /* 退出 */getpalette( &palette ); /* 读面板信息 */MaxColors
6、= getmaxcolor() + 1; /*读取颜色的最大值 */MaxX = getmaxx(); /* 读屏幕尺寸 */MaxY = getmaxy(); /* 读屏幕尺寸 */getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中 */AspectRatio = (double)xasp/(double)yasp;/* 计算纵横比值 */*计算器函数*/void computer(void)struct viewporttype vp; /* 定义视口类型变量 */int color, height, width;int x, y,x0
7、,y0, i, j,v,m,n,act,flag=1;float num仁0,num2=0,result; /*操作数和计算结果变量 */char cnum5,str220="",c,temp20=""char str1="1230.456+-789*/Qc=A%"/*定义字符串在按钮图形上显示的符号*/mwindow( "Calculator" );/* 显示主窗口 */color = 7;/*设置灰颜色值*/getviewsettings( &vp );/* 读取当前窗口的大小 */width=(vp.
8、right+1)/10; /* 设置按钮宽度 */height=(vp.bottom-10)/10 ;/* 设置按钮高度 */x = width /2;/*设置x的坐标值*/y = height/2; /*设置y的坐标值*/setfillstyle(SOLID_FILL, color+3);bar( x+width*2, y, x+7*width, y+height );/*画一个二维矩形条显示运算数和结果*/setcolor( colo叶3 );/*设置淡绿颜色边框线 */rectangle( x+width*2, y, x+7*width, y+height );/*画一个矩形边框线*/s
9、etcolor(RED); /*设置颜色为红色*/outtextxy(x+3*width,y+height/2,"0."); /*输出字符串"0."*/x =2*width-width/2;/*设置 x 的坐标值 */y =2*height+height/2; /* 设置 y 的坐标值 */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 )
10、; /* 画一个矩形条 */rectangle( x, y, x+width, y+height );sprintf(str2,"%c",str1j*5+i);/*将字符保存到str2中*/outtextxy( x+(width/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
11、位置*/ arrow(); /*显示光标*/putimage(x,y,rar,XOR_PUT);m=0;n=0;strcpy(str2,""); /*设置 str2 为空串 */while(v=specialkey()!=45) /*当压下Alt+x键结束程序,否则执行下面的循环*/while(v=specialkey()!=ENTER) /* 当压下键不是回车时 */putimage(x,y,rar,XOR_PUT); /* 显示光标图象 */if(v=RIGHT)/*右移箭头时新位置计算*/if(x>=x0+6*width)/*如果右移,移到尾,则移动到最左边字符
12、位置*/x=x0;m=0;elsex=x+width+width/2;m+; /*否则,右移到下一个字符位置*/if(v=LEFT) /*左移箭头时新位置计算*/if(x<=x0)x=x0+6*width;m=4; /*如果移到头,再左移,则移动到最右边字符位置*/elsex=x-width-width/2;m-; /*否则,左移到前一个字符位置*/if(v=UP)/*上移箭头时新位置计算*/if(yv=y0)y=y0+4*height+height/2;n=3; /*如果移到头,再上移,则移动到最下边字符位置*/elsey=y-height-height/2;n-; /*否则,移到上边
13、一个字符位置*/if(v=DOWN) /*下移箭头时新位置计算*/if(y>=7*height)y=y0;n=0; /*如果移到尾,再下移,则移动到最上边字符位置*/elsey=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,"-"); /*
14、将负号连接到字符串中*/flag=1; /*将标志值恢复为1*/sprintf(temp,"%c",c); /*将字符保存到字符串变量temp中*/strcat(str2,temp); /*将temp中的字符串连接到 str2中*/ setfillstyle(SOLID_FILL,colo r+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2); /*显示字符串 */if(c='+')num1=atof(str2); /*将第一个操作数转换
15、为浮点数*/strcpy(str2,""); /* 将 str2 清空 */act=1; /*做计算加法标志值*/setfillstyle(SOLID_FILL,colo r+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; /*设置负数标志*/el
16、senum仁atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空 */act=2; /*做计算减法标志值*/setfillstyle(SO LI D_FILL,colo r+3);bar(2*width+width/2,height/2,15*width/2,3*height/2); /* 画矩形 */outtextxy(5*width,height,"0."); /* 显示字符串 */if(c='*')num仁atof(str2); /*将第二个操作数转换为浮点数*/strc
17、py(str2,""); /* 将 str2 清空 */act=3; /*做计算乘法标志值*/setfillstyle(SOLID_FILL,colo r+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /* 显示字符串 */if(c='/')num仁atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空 */act=4; /*做计
18、算除法标志值*/setfillstyle(SOLID_FILL,colo r+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /* 显示字符串 */if(c='A')num仁atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空 */act=5; /*做计算乘方标志值*/setfillstyle(SOLID_FILL,colo 叶3); /*设置用淡绿色实
19、体填充 */bar(2*width+width/2,height/2,15*width/2,3*height/2);/* 画矩形 */ outtextxy(5*width,height,"0.");/* 显示字符串 */if(c='%')num仁atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,"");/*将 str2 清空 */act=6; /*做计算模运算乘方标志值*/setfillstyle(SOLID_FILL,colo 叶3); /*设置用淡绿色实体填充 */bar(2*width+width/2
20、,height/2,15*width/2,3*height/2); /* 画矩形 */ outtextxy(5*width,height,"0."); /* 显示字符串 */if(c='=')num2=atof(str2); /*将第二个操作数转换为浮点数 */switch(act) /*根据运算符号计算*/case 1:result=num1+num2;break; /* 做加法 */case 2:result=num1-num2;break; /* 做减法 */case 3:result=num1*num2;break; /* 做乘法 */case 4:
21、result=num1/num2;break; /* 做除法 */case 5:result=pow(num1,num2);break; /* 做 x 的 y 次方 */case 6:result=fmod(num1,num2);break; /* 做模运算 */setfillstyle(SOLID_FILL,colo 叶3); /*设置用淡绿色实体填充 */bar(2*width+width/2,height/2,15*width/2,3*height/2); /* 覆盖结果区 */ sprintf(temp,"%f",result); /* 将结果保存到 temp 中
22、*/ outtextxy(5*width,height,temp); /* 显示结果 */if(c='c')num仁0;/*将两个操作数复位 0,符号标志为1*/num2=0;flag=1;strcpy(str2,""); /* 将 str2 清空 */setfillstyle(SOLID_FILL,colo 叶3);/* 设置用淡绿色实体填充 */bar(2*width+width/2,height/2,15*width/2,3*height/2); /* 覆盖结果区 */ outtextxy(5*width,height,"0.");
23、 /* 显示字符串 */if(c=Q)exit(0);/*如果选择了 q回车,结束计算程序*/putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头 */ return; /*返回 */*窗口函数*/void mwindow( char *header )int height;cleardevice(); /*清除图形屏幕*/setcolor( MaxColors - 1 ); /* 设置当前颜色为白色 */setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 设置视口大小 */ height = textheight( "H" );/* 读取基本文本大小*/settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/* 设置文本样式 */ settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式 */outtextxy( MaxX/4, 2, header );/*输出标题 */setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 );/*设置视口大小 */drawboder(); /* 画
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业照明设计与安装合同协议条款
- 江西省鹰潭市第九中学2024-2025学年九年级下学期期末考试历史试卷(含答案)
- 幸福除夕夜作文250字13篇范文
- 写人作文我的同学550字13篇
- 《新编商务应用文写作》第七章 习题参考答案
- 春节出游作文800字10篇
- 早教知识培训课件
- 我的奇思妙想作文450字11篇范文
- 产品质量检查与改善方案标准操作模板
- 早搏的鉴别诊断
- 新人教版五年级上册小学数学教学计划+教学进度表
- 痔疮的健康教育课件
- 优甲乐(左甲状腺素钠片)健康教育
- 肝脏弥漫性病变超声诊断与检查规范
- 风力发电税务培训课件
- 2025年长沙市中考物理试卷真题(含答案)
- 建筑工地驻场人员管理办法及流程
- 检验科生化培训课件
- 配电类“两种人”题库(2025年3月修编)改
- 建设工程管理的毕业论文
- 2025年全国工会系统经审业务技能大赛知识总题库(1800题)-中部分
评论
0/150
提交评论