计算器C程序设计报告
一. 设计要求
运用C语言所具有的函数,模仿画出计算器的界面,并实现计算器的基本功能:浮点数加、减、乘、除、乘方和求模运算。
(1)收集资料,全面分析课题,分析问题,形成总体编程思路。
(2)深入分析各个小问题,编写各部分程序模块并进行具体介绍。(如初始化函数、主窗口函数、计算器函数等等。)
(3)上机调试,修改出现的错误,确保程序能正确运行。
二. 设计的作用、目的
(1)通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、各种函数等方面的基本知识。
(2)通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C程序的调试过程。
(3)培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。
(4)通过自己动手,培养、提高对编程的兴趣,为将来从事相关工作打好基础。
三.课题分析
要实现计算器功能,先要输出计算器的样式,再是通过按键的方式实现数值的运算,故程序大致可分两部分实现,一部分是显示计算器,另一部分是实现计算功能。
Turbo C提供了PC系统环境下扩充的屏幕和图形支持系统,利用系统提供的字符屏幕处理函数和图形系统的有关信息以及函数的实现,这样就可以显示计算器了。计算功能主要解决的是接收按键信息的处理和进行识别,如果按键是数字符号,要将其转变为操作数,如果是运算操作符,则进行相应的处理。
四.设计的具体实现
1.系统组成模块结构及功能
(1)Main主函数
设置了程序的流程,首先初始化图形系统,然后调用计算器computer()函数进行计算,当从计算器程序返回时,关闭图形系统,程序结束。
(2)Initialize()初始化函数
Turbo C通常的工作方式是字符文本模式,要显示图形,调用图形函数,则必须进入图形工作方式,应首先调用函数initgraph(&GraphDriver,&GraphMode,)初始化图形系统,并装入相应的图形驱动器。
(3)Mwindow()主窗口函数
设置视口大小为当前窗口的一半,再调用drawboder()函数画出边框。我们将可以在屏幕的左上角看到本程序的运行结果视口;
(4)Drawboder()画边框函数
通过getviewsettings(&vp) 函数把当前视口的信息装入由vp所指向的结构中。vp是struct viewporttype类型,其结构定义如下:
struct viewporttype {
int left,top,right,bottom; int clip;
void far rectangle(int left,int top,int right,int bottom); void far setlinestyle(int linestype,unsigned upattern); }
域left、top、right、bottom中存放视口左上角和右下角的坐标。当clip为0时,不进行对超出视口边界输出的剪裁,否则,执行剪裁以防止超出边界。
字符屏幕操作和图形函数的核心是窗口,它是屏幕的活动部分,在这个活动窗口中将显示输出。为保持两个系统的独立性,Turbo C在字符屏幕和图形系统之间用了两个不同的术语。
字符屏幕的函数提供了窗口,而图形系统提供了视口,但是当屏幕用字符模式时,左上角坐标为(1,1),而在图形状态下,左上角坐标为(0,0)。
根据视口坐标,利用rectangle()函数画出矩形边框线。我们将可以在屏幕的左上角看到程序运行的窗口;
(5)Computer()计算器函数
计算器函数是本程序的主要函数部分,其流程是先调用mwindow()主窗口函数显示一黄色边框的窗口,再在窗口中显示计算器,最后接收按键进行计算。为了合理布局、方便操作,根据窗口的大小设计按钮的大小和位置。读取当前窗口的大小后,设置了两个单位变量width和height,图形显示以这两个单位变量为计算单位,布局如下图所示:
2.5w h/2 w/2 h/2 h/2 1 2 3 0 . 1.5w 4 5 6 + - 7 8 9 * / Q C = ^ %
注:w表示width ;h表示height
图中的符号按钮利用函数setfillstyle()设置用绿色实体进行填充,然后用bar()函数画一个二维矩形条,setcolor()函数设置边框颜色,retangle()函数画一个矩形边框线,利用outtextxy()函数将预先存储在strl中的字符串中的字符输出,因为outtextxy()输出的是字符串,所以先要用sprintf()函数将输出的字符写入字符数组str2,转变为字符串,再输出。
界面设置完成后,首先在第一个按钮位置显示光标,此时可以移动和按下光标,当按下Alt+X键时可以结束程序,否则执行循环判断移动的是哪一个光标键,变量m和n分别记录光标的坐标(x,y)位置,光标移动到某个位置按回车键后,则程序判断所按的是哪个字符,并进行相应的处理:
①当所选为数字或小数点,则先判断是否为负数,如果是负数则将符号连接到字符串中,否则只连接所选的数字或小数点,并显示数据;
②当所选为“-”时,先判断有无操作数,如果没有操作则表示负数,组负数标记,否则是做减法,做减法标志,并将当前的操作数保存;
③当所选为“+”、“*”、“/”、“^”、“%”时,处理方式与(b)步骤一样,均是先保存第一个操作数,做为运算标志。准备接收第二个操作数;
④当所选为“=”时,根据运算符号标志act进行相应的运算,并结果显示; ⑤当所选为“c”时,表示归零,所以将第一和第二操作数均置0; ⑥当所选为“Q”时,则结束运算,桌面切换到原程序桌面状态;
(6)Arrow()设计图形鼠标函数
由于在图形函数方式下,光标是不可见的,所以为了能正确地选择按钮,自己设计一个光标图形。方法是用fillpoly(8,raw)画一个由raw所指向的数组定义的8个(x,y)坐标点所围成的封闭图形,用当前填充颜色对该形状进行填充后形状像鼠标的光标,利用函
数imagesize()测试图像和函数putimage(x,y,rar,XOR_PUT)操作实现光标图像的显示和隐藏;
(7)Specialkey()读取特殊键函数
利用函数bioskey()读取所按键的信息,int bioskey(int cmd)函数原型在bios.h中功能是完成直接键盘操作。
如果cmd是0,bioskey()返回下一个在键盘输入的值(它将等待到下一个按键)。它返回严格16位的二进制数,包括两种不同的值。当按下“普通键”时,它的低8位数存放在该字符的ASCII码;对于“特殊键”,低8位为0。特殊键包括箭头键、功能键等。高8位字节存放该键的扫描码,所以程序中用到了语句key=bioskey(0),表示返回下一个在键盘上按下的键,并保存在变量key中,key=key&0xff:key>>8,对所按的键进行判断,如果key&0xff为真,即低8位不为0,则说明按下的是“普通键”,因为0xff16进制数代表的二进制码高8位为0,低8位为1,和0相遇,结果为0,和1相遇,结果保持原数,这样就将低8位(也就是该字符的ASCII码值)赋给key。如果key&0xff为假,即低8位为0,署名按下的是“特殊键”,将key右移8位后,也就是将其高8位值赋给key。
Cmd如果是1,bioskey()查询是否按下一个键时返回非0值,否则返回0值,所以用while(bioskey(1)==0)语句等待按键。
2.系统程序结构及流程图
有错 开 始 初始化图形系统
输入Q 有错? 进入图形系统 输入mun1、mun2和符号 判断符号 显示结果 输入C
结 束
相关推荐: