基于c语言的电子计算器设计.docx
《基于c语言的电子计算器设计.docx》由会员分享,可在线阅读,更多相关《基于c语言的电子计算器设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于c语言的电子计算器设计
基于C语言的电子计算器设计
【摘要】当今社会,随着人们物质生活的不断提高,电子产品已经走进家家户户,无论是生活和学习还是娱乐和消遣几乎样样都离不开电子产品,计算器可谓是我们最亲密的电子伙伴之一。
随着科技的发展,人们对计算要求的精确度越来越高,各种不同功能的计算器已经悄悄走进我们的生活和学习中。
对于学生来说一个功能齐全的计算器对我们的学习有着莫大的帮助。
借着C语言程序设计的机会,我决定自己动手来研究一下计算器。
在练习巩固C语言学习的同时又可以从中体会到计算器的强大功能,然而由于学习的内容和时间有限,至今为止我只能实现四则运算加、减、乘、除、平方、立方和开方的一些简单功能,并且在计算器的里面加了一个漂亮的时钟,用来方便我们的学习。
在今后的学习中,我会继续研究,争取进一步来完善它的功能。
本系统采用TurboC语言开发,生成可执行文件在任何系统下都可以执行,具有很好的数据处理能力和稳定性。
本论文主要介绍了该课题的开发背景以及过程和所要完成的功能。
并且重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。
由于“初来乍到”,这个程序设计还有一些漏洞和缺陷,希望您多多提出!
【关键词】Turboc:
c语言:
计算器程:
四则数值运算
BasedontheClanguagedesignofelectroniccalculator
Author:
(Grade2009,Class2,Electronic&InformationEngineering,DepartmentofElectronic&InformationEngineering.,AnkangUniversity,Ankang725000,Shaanxi)
Tutor:
Abstract:
Intoday'ssociety,withpeopleconstantlyimprovethemateriallife,electronicproductshavebeenintoeachandeveryfamily,boththelivingandlearningorentertainmentandrecreationalmosteverythingwithoutelectronics,calculatorisourmostintimateelectronicpartners.,Withthedevelopmentofscienceandtechnology,peopleonthecalculationofrequiredaccuracyishigherandhigher,avarietyofdifferentfunctionsofthecalculatorhascreptintoourlifeandlearning.Forstudentswithafullyfunctionalcalculatorforourlearninghasagreathelp.WiththeClanguageprogramdesignopportunities,Idecidedtodoitmyselftostudythecalculator.IntheexercisestoconsolidatetheClanguagelearningatthesametimetorealizecalculatorfunctions,howeverasaresultoflearningcontentandtimeislimited,sofarIhadfouroperationsadd,subtract,multiply,divide,square,cubicandsquarerootofthenumberofsimplefunctions,andinthecalculatorwithabeautifulclock,usedtofacilitateourstudy.Inthefuture,Iwillcontinuetostudy,tofurtherimproveitsfunctions.,ThissystemadoptsTurboClanguagedevelopment,togenerateanexecutablefileinanysystemcanperform,andhasgoodcapabilityofdataprocessingandstability.Thispapermainlyintroducesthetopicdevelopmentbackgroundandprocessandthefunctiontoachieve.Andthekeythatthesystemdesignidea,designsteps,technicaldifficultiesandsolutions.Duetothe"new".Keyword:
TurboC;Clanguagecalculator:
fournumericalcomputation
0引言
我们在学习生活中,常会遇到一些繁杂的数值运算,徒手算将是一件非常头痛的事,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。
现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。
这些大大方便了我们的生活。
这个程序可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
并且操作简单、界面清晰、灵活、实用、方便等要求出发,它所能完成的主要计算功能有以下几个方面:
加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos,求Log10。
它让我真正体会到了学以致用。
伴随着经济全球化,计算机的普及发展,软件行业在社会占着举足轻重的作用。
借着软件发展的周期,我研究了这个课题,既紧随科技发展的前沿,又方便了我们的生活,具有着一定的现实意义。
在TurboC环境下,绘制程序中的计算器的图形,计算器的输入输出和显示结果的显示屏,绘制计算器的按键,绘制边框。
TurboC为用户提供了一个功能很强的画图软件库,它又称为Borland图形接口,它包括图形库文件(graphics.lib),图形头文件(graphics’)和许多图形显示器(图形终端)的驱动程序(如CGA.BGI、EGAVGA.BGI等)。
还有一些字符集的字体驱坳程序(如goth.chr黑体字符集等)。
编写图形程序时用到的一些图形库函数均在graphics.lib中,执行这些函数时,所需的有关信息(如宏定义等)则包含在graphics.h头文件中。
因此用户在自已的画图源程序中必须包括graphics.h头文件,在进行目标程序连接时,要将graphics.lib连接到自己的目标程序中去。
在编制图形程序时,进入图形方式前,首先要在程序中对使用的图形系统初始化,即要用什么类型的图形显示适配器的驱动程序,采用什么模式的图形方式(也就是相应程序的入口地址),以及该适配器驱动程序的寻找路径名。
所用系统的显示适配器一定要支持所选用的显示模式,否则将出错。
Turbo.C提供了一个图形系统初始化函数initgraph可完成这些功能。
1电子计算器概要设计
1.1设计目标
1.1.1了解由C语言设计电子计算器原理,并学会更好地利用turboC软件。
1.1.2学习调试运行结果的方法,提高实际动手能力。
1.1.3培养自己对此软件的了解和兴趣。
2电子计算器设计程序设计流程图
2.1系统流程图
图2.1系统流程图
2.2主要功能表
表1主要功能表
序号
文件名
主要功能
备注
1
+
加法
两个操作数
2
-
减法
两个操作数
3
*
乘法
两个操作数
4
/
除法
两个操作数
5
%
求模
两个操作数
6
^
求x的y次幂
两个操作数
7
S
求平方根
一个操作数
8
O
求Sin
一个操作数
9
I
求Cos
一个操作数
10
L
求Log10
一个操作数
11
=
等于
12
C
寄存器清零
13
Q
退出
3系统分析和设计
3.1图形的绘制和输出
在TurboC环境下,绘制程序中的计算器的图形,计算器的输入输出和显示结果的显示屏,绘制计算器的按键,绘制边框。
当我们使用的存储模式为tiny(微型)、small(小型)或medium(中型)时,不需要远指针,因而可以将初始化函数调用格式写成如下形式(该说明适用于后面所述的任一函数):
intitgrapg(&graphdriver,&graphmode,,””);其中驱动程序目录路径为空字符“”时,表示就在当前目录下,参数graphmode用所示的模式号或标示符来定义,参数graphdriver是一个枚举变量{DETECT,CGA,VGA,…},一般:
graphdriver=DETECT一旦执行了初始化,显示器即被设置成相应模式的图形方式。
上面初始化过程中,将由DETECT检测所用适配器类型,并将当前目录下相应的驱动程序装入,并采用最高分辩率显示模式作为graphmode的值。
如检测到为CGA适配器时,则graphmode等于4或为CGAHI,若检测到VGA适配器,则graphmode等于2或为VGAHI。
由于图形程序运行并显示图象直接与显示器有关,而如何控制驱动显示器进行显示,TurboC并没有向用户提供这种技术,而这也是不必要的,因它与显示器硬件结构息息相关,编程者并不需要知道这些东西,否则太复杂了!
但用户的图形程序要能运行并显示,则必须要包含有驱动显示器的这种程序。
不同种类的显示器因硬件结构不同,因而驱动程序也不同,这些驱动程序已经在TubroC系统盘上提供。
在用户的图形程序中,进行图形系统初始化时,即执行函数。
initgraph(&graphdriver,&graphmode,charpath-for-driver)时,程序就按照path-for-driver所指的路径将图形驱动程序装入内存。
这样,以后的图形功能才能被支持。
若在所指路径下找不到相应显示器的驱动程序,或没有对驱动程序进行装入操作,则运行图形程序时,就会在屏幕上显示出错信息:
BGIError:
Graphicsnotinitialized(use”initgraph”)必须在工作盘上复制上这些文件,否则图形程序就无法运行,而出现上述的错误信息。
3.2文本的输出显示
TurboC2.0的字符屏幕函数主要包括文本窗口大小的设定、窗口颜色的设置、窗口文本的清除和输入输出等函数。
在TurboC2.0环境下,用ottextxy定位输出文本,如计算器上的函数意义的解释,一些使用说明,程序设计人。
TurboC2.0默认定义的文本窗口为整个屏幕,共有80列(或40列)25行的文本单元,每个单元包括一个字符和一个属性,字符即ASCII码字符,属性规定该字符的颜色和强度。
TurboC2.0可以定义屏幕上的一个矩形域作为窗口,使用window()函数定义。
窗口定义之后,用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超出窗口的边界。
window()函数的调用格式为:
voidwindow(intleft,inttop,intright,intbottom);
函数中形式参数(intleft,inttop)是窗口左上角的坐标,(intright,intbottom)是窗口的右下角坐标,其中(left,top)和(right,bottom)是相对于整个屏幕而言的。
TurboC2.0规定整个屏幕的左上角坐标为(1,1),右下角坐标为(80,25)。
并规定沿水平方向为X轴,方向朝右;沿垂直方向为Y轴,方向朝下。
若window()函数中的坐标超过了屏幕坐标的界限,则窗口的定义就失去了意义,也就是说定义将不起作用,但程序编译链接时并不出错。
另外,一个屏幕可以定义多个窗口,但现行窗口只能有一个(因为DOS为单任务操作系统),当需要用另一窗口时,可将定义该窗口的window()函数再调用一次,此时该窗口便成为现行窗口了。
如要定义一个窗口左上角在屏幕(20,5)处,大小为30列15行的窗口可写成:
window(20,5,50,25);窗口内文本的输出函数
intcprintf("<格式化字符串>",<变量表>);
intcputs(char*string);
intputch(intch);
cprintf()函数输出一个格式化的字符串或数值到窗口中。
它与printf()函数的用法完全一样,区别在于sprints()函数的输出受窗口限制,而printf()函数的输出为整个屏幕。
cputs()函数输出一个字符串到屏幕上,它与puts()函数用法完全一样,只是受窗口大小的限制。
putch()函数输出一个字符到窗口内。
intgetche(void);
该函数在前面已经讲过,需要说明的是,getche()函数从键盘上获得一个字符,在屏幕上显示的时候,如果字符超过了窗口右边界,则会被自动转移到下一行的开始位置。
voidclrscr(void);清除当前窗口中的文本内容,并把光标定位在窗口的左上角(1,1)处。
voidclreol(void);清除当前窗口中从光标位置到行尾的所有字符,光标位置不变。
voidgotoxy(x,y);该函数很有用,它用来定位光标在当前窗口中的位置。
这里x,y是指光标要定位处的坐标(相对于窗口而言),当x,y超出了窗口的大小时,该函数就不起作用了。
3.3计算函数的调用
1.调用C库函数中的函数,数学函数#inchude如:
sin,cos,sqrt,log10
2.建立一些函数,如c键清空寄存器
3.4程序的运行和退出
1.运行通过“资源管理器”找到TC文件夹中的tc.exe文件,用鼠标双击该文件名,即可进入TC环境。
2.退出退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
4系统测试
程序调试是指对程序的查错和排错。
为了便于查错、阅读,在设计该程序的过程中我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。
经过仔细检查之后进行上机调试。
进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
在本次实习过程中碰到的编译、连接的错误主要有:
缺少变量定义,定义位置不正确、语法错误、转义字符漏用、逻辑错误等。
4.1缺少变量定义,定义位置不正确
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。
不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。
为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。
例如:
未定义voidmwindow(char*header);/*窗口函数*/或mwindow("Calculator");/*显示主窗口*/,所以输出voidmwindow(char*header)中就有错误,因为缺少定义。
4.2语法错误
大多的语法错误在通过书本参考下能够修改。
主要是平时看书不仔细、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。
这些语法错误有信息框的提示一般是能够排除的。
4.3注释的位置
程序设计中在注释的时候不能同我们平常做笔记一样随心所欲地爱写哪就写哪,这造成我最后本来已经编译成功的程序一下子又多了很多错误。
注释的时候,注释文字应写在一起中间不能有中断包含了c语言的语句,不然又引起错误格式不正确或是多了字符等。
4.4逻辑错误
编译、连接的成功并不意味着程序的最终成功。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。
这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。
这也是本次程序编辑过程中碰到的最大的难题。
往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。
若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。
如此循环往复,直到最后程序运行成功。
在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。
诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。
所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。
5使用说明书及调试结果
5.1运行TurboC程序进入计算器界面
通过“资源管理器”找到TC文件夹
找到TC文件夹中的tc.exe文件,并用鼠标双击该文件名
进入TC环境。
进入计算器界面
图5.1计算器界面
5.2计算器的使用
基本使用:
用→←↑↓控制鼠标图形移动,当移动到相应得按钮时按回车键输入当前数字或执行对应的函数。
加法:
输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。
减法:
输入被减数数,按“-”,输入减数,按“=”,输出结果。
乘法:
输入一个数,按“*”,输入另个数,按“=”,输出结果。
除法:
输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。
求x的y次方:
输入数x,按“^”,输入数y,按“=”,输出结果。
求x/y的模:
输入数x,按“%”,输入数y,按“=”,输出结果。
求sin:
输入一个数,按“O”,按“=”,输出结果。
求cos:
输入一个数,按“I”,按“=”,输出结果。
求log10:
输入一个数,按“L”,按“=”,输出结果。
C键:
把寄存器清零
Q键:
退出计算器界面
5.3调试结果
(1)输入算式25-13
输入步骤
第一步:
图5.2输入25
第二步:
输入-13
图5.3输入-13
第三步:
图5.4等于12
(2)输入33/11
输入步骤
第一步:
图5.5输入33
第二步:
图5.6输入11
第三步:
图5.7等于3
5.3退出程序
退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
6.工作小结
对我来说本次课题很成功,虽然没有按要求完成,但在研究的过程之中,我学会了额外的运算功能。
这些大大增强了我对研究本次课题的信心。
刚选这个课题时,头一下子就昏了,这么复杂的课题要怎么才会完成?
可是随着老师的指导以及自己认真的查阅资料,边学习边研究,渐渐的明白了许多。
写代码时虽然重写了好多次,每次又都有不同的错误,真的好想放弃,可是在老师的耐心帮助下,我没有灰心,坚信一定会取得成功!
经过反复练习终于我的计算器取得了成功。
接着我又研究来怎么实现漂亮时钟功能,经过几天的研究,我学会怎样实现时钟的功能。
可是由于时间的限制,我的时钟还不够完善,还没有达到预想的要求,但我不会让它变成一个遗憾,我会继续努力研究的!
这次课题也大大增强了我做事情的决心,使我深深领悟了“世上无难事,只怕有心人”这句话的道理。
它将成为我以后学习和工作的座右铭。
通过本次研究,我也大大体会了C语言这一高级语言的方便之处。
我会努力学习这门学科来方便我的生活!
另外作为软件专业的我更要从现在开始学好这一科,来为以后更好的工作奠定一个好的根基!
[参考文献]
【1】黄明等.21世纪进阶辅导C语言程序设计.大连理工大学出版社,2005.
【2】马靖善等.C语言程序设计.清华大学出版社,2005.
【3】谭浩强.C语言程序设计(第二版).北京:
高等教育出版社,2002.
【4】张毅坤等.C语言程序设计教程[M].西安交通大学出版社,2003.
【5】张龙祥等.面向对象程序设计[M].北京:
人民邮电出版社,2001.
电子与信息工程系学年论文(设计)成绩评定表
学生姓名
专业班级
学号
指导老师
职称
工作单位
题目:
指导教师评语:
建议成绩:
指导教师(签字):
年月日
教研室意见:
教研室主任(签字):
年月日