c语言程序设计课程计算器设计报告.docx
- 文档编号:24368326
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:31
- 大小:179.85KB
c语言程序设计课程计算器设计报告.docx
《c语言程序设计课程计算器设计报告.docx》由会员分享,可在线阅读,更多相关《c语言程序设计课程计算器设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
c语言程序设计课程计算器设计报告
课程设计说明书
题目计算器程序设计
起讫日期2006年7月3日至2006年8月6日
所在院系软件学院
专业机械+软件班级04-2
学生姓名偶偶哦学号
指导教师
2006年8月
摘要
当今社会是信息社会,科技经济高速发展的社会!
为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品!
随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小!
电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成!
电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延!
下面我们将用我们学习的c语言编写一个简易的计算器程序!
实现简单的初步的计算功能!
本程序的编写基础是Tubro汉化版,它在tubroc的原有基础上实现了多汉字的支持方便了我们的使用。
生成的程序可移植性强兼容性好稳定!
现在只实现了加、减、乘、除、求幕、求模,求平方根,求Sin,求Cos,求LoglO,以及一个时钟原代码。
这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
但是,每次只能运算一个表达式。
不能运算多个表达式。
在程序里面在添加一组选择函数即可。
本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。
重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。
关键词:
C语言Tubroc汉化版计算器时钟
第一章综述1
1.1课题的现实意义1
1.2软件环境1
1.3硬件环境1
第二章系统设计流程图2
2.1系统流程图2
2.2主要功能表2
第三章系统分析和设计3
3.1图形的绘制和输出3
3.2文本的输出显示3
3.3计算函数的调用4
3.4程序的运行和退出5
第四章系统测试6
4.1系统测试6
4.2调试6
4.3错误原因分析一6
4.4错误原因分析二6
第五章用户使用说明书8
5.1运行TurboC程序进入计算器界面8
5.2计算器的使用9
5.3退出程序9
第六章工作总结10
参考文献11
附录:
源代码
第一章综述
课题的现实意义
现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困
难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己
的学习工作。
人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。
现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。
这些大大方便了我们的生活给我们更多的选择和实现方式。
这个程序可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
并且操作简单、界面清晰、灵活、实用、方便等要求出发,它所能完成的主要计算功能有以下几个方面:
加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos,求LoglO。
计算器的设计使我们所学到的c语言知识在现实中得到检验!
信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强!
硬件环境
一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz
<1>386,486,586及兼容机.64OK基本内存;
<2>1M以上扩充内存,10M以上的显示内存.
软件环境
开发环境:
本系统的设计采用的是TC语言开发
WindowsXPsp2操作系统,TurboC汉化版,WPSword
第二章程序设计流程图
2.1系统流程图(图1)
2.2主要功能表(表1)
序号
文件名
主要功能
备注
1
+
加法
两个操作数
2
-
减法
两个操作数
3
*
乘法
两个操作数
4
/
除法
两个操作数
5
%
求模
两个操作数
6
A
求x的y次幕
两个操作数
7
S
求平方根
一个操作数
8
O
求Sin
一个操作数
9
I
求Cos
一个操作数
10
L
求表og1o
一个操作数
11
=
等于
12
C
寄存器清零
13
Q
退出
三章系
分析和
计
图形的绘制和输出
在TurboC环境下,绘制程序中的计算器的图形,计算器的输入输出和显示结果的显示屏,绘制计算器的按键,绘制边框。
TurboC为用户提供了一个功能很强的画图软件库,它又称为BorLand图形接口,它
包括图形库文件,图形头文件()和许多图形显示器(图形终端)的驱动程序(如、等)还有一些字符集的字体驱坳程序(如黑体字符集等)。
编写图形程序时用到的一些图形库
函数均在中,执行这些函数时,所需的有关信息(如宏定义等)则包含在头文件中。
因此用户在自已的画图源程序中必须包括头文件,在进行目标程序连接时,要将连接到自己的目标程序中去。
在编制图形程序时,进入图形方式前,首先要在程序中对使用的图形系统初始化,即要用什么类型的图形显示适配器的驱动程序,采用什么模式的图形方式(也就是相应程序的入口地址),以及该适配器驱动程序的寻找路径名。
所用系统的显示适配器一定要支持所选用的显示模式,否则将出错。
提供了一个图形系统初始化函数initgraph可完成这些功能。
当我们使用的存储模式为tiny(微型)、small(小型)或medium(中型)时,不
需要远指针,因而可以将初始化函数调用格式写成如下形式(该说明适用于后面所述的任一函数):
intitgrapg(&graphdriver,&graphmode,,””);其中驱动程序目录路径
为空字符“”时,表示就在当前目录下,参数graphmode用所示的模式号或标示符来定义,参数graphdriver是一个枚举变量{DETECT,CGA,VGA;・・},一般:
graphdriver=DETECT一旦执行了初始化,显示器即被设置成相应模式的图形方式。
上面初始化过程中,将由DETECT佥测所用适配器类型,并将当前目录下相应的驱动
程序装入,并采用最高分辩率显示模式作为graphmode的值。
如检测到为CGA适配器时,
则graphmode等于4或为CGAHI若检测到VGA适配器,贝Ugraphmode等于2或为VGAH。
由于图形程序运行并显示图象直接与显示器有关,而如何控制驱动显示器进行显示,
TurboC并没有向用户提供这种技术,而这也是不必要的,因它与显示器硬件结构息息相
关,编程者并不需要知道这些东西,否则太复杂了!
但用户的图形程序要能运行并显示,则必须要包含有驱动显示器的这种程序。
不同种类的显示器因硬件结构不同,因而驱动程序也不同,这些驱动程序已经在TubroC系统盘上提供。
在用户的图形程序中,进行图形系统初始化时,即执行函数。
initgraph(&graphdriver,&graphmode,charpath-for-driver)时,程序就按照path-for-driver所指的路径将图形驱动程序装入内存。
这样,以后的图形功能才能被支持。
若在所指路径下找不到相应显示器的驱动程序,或没有对驱动程序进行装入操作,则运行图形程序时,就会在屏幕上显示出错信息:
BGIError:
Graphicsnotinitialized(use”initgraph”)必须在工作盘上复制上这
些文件,否则图形程序就无法运行,而出现上述的错误信息。
文本的输出显示
Turbo的字符屏幕函数主要包括文本窗口大小的设定、窗口颜色的设置、窗口文本的清除和输入输出等函数。
在Turbo环境下,用ottextxy定位输出文本,如计算器上的函数意义的解释,一些使用说明,程序设计人。
Turbo默认定义的文本窗口为整个屏幕,共有80列(或40列)25行的文本单元,每个单元包括一个字符和一个属性,字符即ASCII码字符,属性规定该字符的颜色和强度。
Turbo可以定义屏幕上的一个矩形域作为窗口,使用window()函数定义。
窗口定义之后,用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超出窗口的边界。
window()函数的调用格式为:
voidwindow(intleft,inttop,intright,intbottom);
函数中形式参数(intleft,inttop)是窗口左上角的坐标,(intright,intbottom)是窗口的右下角坐标,其中(left,top)和(right,bottom)是相对于整个屏幕而言的。
TurboC规定整个屏幕的左上角坐标为(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()函数的用法完全一样,区别在于cprintf()函数的输出受窗口限制,而printf()函数的输出为整个屏幕。
cputs()函数输出一个字符串到屏幕上,它与puts()函数用法完全一样,只是受窗口大小的限制。
putch()函数输出一个字符到窗口内。
intgetche(void);
该函数在前面已经讲过,需要说明的是,getche()函数从键盘上获得一个字符,在屏幕上显示的时候,如果字符超过了窗口右边界,则会被自动转移到下一行的开始位置。
voidclrscr(void);清除当前窗口中的文本内容,并把光标定位在窗口的左上角(1,1)处。
voidclreol(void);清除当前窗口中从光标位置到行尾的所有字符,光标位置不变。
voidgotoxy(x,y);该函数很有用,它用来定位光标在当前窗口中的位置。
这里x,y是指光标要定位处的坐标(相对于窗口而言),当x,y超出了窗口的大小时,该函数就不起作用了。
计算函数的调用
1.调用C库函数中的函数,数学函数#inchude<>如:
sin,cos,sqrt,log10
2.建立一些函数,如c键清空寄存器
程序的运行和退出
1.运行
通过TubroC安装路径找到文件夹中的文件,双击该文件,即可进入环境。
2.退出
退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可
退出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
第四章系统测试
程序调试是指对程序的查错和排错。
为了便于查错、阅读,在设计该程序的过程中
我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带
来了很多方便。
经过仔细检查之后进行上机调试。
进行编译,如果在编译和连接过程中发现错误,
屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反
复,直到顺利通过编译和连接为止。
在本次实习过程中碰到的编译、连接的错误主要有:
缺少变量定义,定义位置不正确、语法错误、转义字符漏用、逻辑错误等。
.1系统测试
系统测试结果如下:
输出:
错误C:
\183:
未定义的符号'LEFT'在Run函数中
错误C:
\183:
需要用常量表达式在Run函数中
错误:
C:
\393:
'main'的宣告;
开始编译文件:
C:
4.2调试
根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。
主要是平时看书不仔细、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加
分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。
这些语法错误有信息框的提示一般是能够排除的。
另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。
所以更要对程序仔细的检查。
经认真修改之后重新保存文件。
错误原因分析一
缺少变量定义,定义位置不正确
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。
不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。
为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。
例如:
未定义voidmwindow(char*header);/*窗口函数*/或mwindow("Calculator");/*显示主窗口*/,所以输出voidmwindow(char*header)中就有错误,因为缺少定义。
语法错误
大多的语法错误在通过书本参考下能够修改。
主要是平时缺乏锻炼、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、
while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式
错误原因分析二
注释的位置
程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。
注释中不能含有c语言可执行的语句!
逻辑错误
编译、连接的成功并不意味着程序的最终成功。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。
这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。
这也是本次程序编辑过程中碰到的最大的难题。
往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。
若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。
如此循环往复,直到最后程序运行成功。
在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或
使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。
诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。
所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。
第五章用户使用说明书
5.1运行TurboC程序进入计算器界面
通过他Tubroc的路径找到TC文件夹
L>
找到TC文件夹中的文件,并用鼠标双击该文件名
TC.EJCE
进入TC环境。
打开文件
5.2计算器的使用
基本使用:
用控制鼠标图形移动,当移动到相应得按钮时按回车键输入当前数
字或执行对应的函数。
减法:
输入被减数数,按“-”,输入减数,按“=”,输出结果。
乘法:
输入一个数,按“*”,输入另个数,按“=”,输出结果。
除法:
输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。
求x的y次方:
输入数x,按“八”,输入数y,按“=”,输出结果。
求x/y的模:
输入数x,按“%,输入数y,按“=”,输出结果。
求sin:
输入一个数,按“0”,按“=”,输出结果。
求cos:
输入一个数,按“I”,按“=”,输出结果。
求Iog10:
输入一个数,按“L”,按“=”,输出结果。
C键:
把寄存器清零
Q键:
退出计算器界面
5.3退出程序
退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退
出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
第六章工作总结
经过了四个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计算器课题的设计修改任务!
虽然有些地方不尽如人意但是初步达到了对自己的要求!
刚开始设计的时候找不到头绪,不知道该从哪里下手!
通过向同学询问和向老师寻求帮助找走进了设计的门槛!
通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。
并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的!
万事开头难,可是对于并不是很熟悉的c语言在下面的工作中困难处处能遇见.通过查找c语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。
测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。
在这次的c语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。
在实际的编程操作中发现自己c语言知识的不足,加深了对c语言的理解。
在学习之余体验到收获的感觉。
同时认识到程序员的工作并不是我们想象的那么简单轻松的,在现在的编程中要有足够的耐心和热情。
参考文献
[1]黄明等.21世纪进阶辅导C语言程序设计.大连理工大学出版
社,2005
[2]马靖善等.C语言程序设计.清华大学出版社,2005
[3]谭浩强.C语言程序设计(第二版)•北京:
高等教育出版社,
[4]
2002
2003
张毅坤等.C语言程序设计教程[M].西安交通大学出版社,
参考文献
[1]谭浩强.C程序设计.北京:
清华大学出版社,1999
[2]
1997
1995
薛刚等.C语言实用教程.长春:
吉林科学技术出版社,
[3]高福祥等.汇编语言程序设计.沈阳:
东北大学出版社,
[4]C语言程序设计网
附录:
源代码:
#include<>/*DOS#include<>/*#include<>/*#include<>/*I/O
#include<>/*#include<>/*#include<>/*#include<>/*
#include<>/*
#defineUP0x48/*
#defineDOWN0x50/*
#defineLEFT0x4b/*
#defineRIGHT0x4d/*
接口函数*/数学函数的定义*/屏幕操作函数*/函数*/库函数*/变量长度参数表*/图形函数*/字符串函数*/字符操作函数*/光标上移键*/光标下移键*/光标左移键*/光标右移键*/
#defineENTER0x0d/*回车键*/#include<>
#include<>
#include<>
#defineCENTERX320
#defineCENTERY175
#defineCLICK100
#defineCLICKDELAY30
#defineHEBEEP10000
#defineLOWBEEP500
改变文本
#defineBEEPDELAY200
void*rar;/*
全局变量,保存光标图象*/
structpalettetypepalette;/*使用调色板信息
intGraphDriver;/*
图形设备驱动*/
intGraphMode;/*
图形模式值*/
intErrorCode;/*
错误代码*/
intMaxColors;/*
可用颜色的最大数值*/
intMaxX,MaxY;/*
屏幕的最大分辨率*/
doubleAspectRatio;/*
屏幕的像素比*/
voiddrawboder(void);/*
画边框函数*/
voidinitialize(void);/*
初始化函数*/
voidcomputer(void);/*
计算器计算函数*/
voidchangetextstyle(intfont,intdirection,intcharsize);/*
样式函数*/
voidmwindow(char*header);/*窗口函数*/intspecialkey(void);/*获取特殊键函数*/intarrow();/*设置箭头光标函数*/intMrk_1[8]={-5,-160,5,-160,5,-130,-5,-130,};
intMrk_2[8]={-5,-160,5,-160,2,-130,-2-130,};
intHourHand[8]={-3,-100,3,-120,4,10,-4,10};
intMiHand[8]={-3,-120,3,-120,4,10,-4,10};
intSecHand[8]={-2,-150,2,-150,3,10,-3,10};
voidClick()
{
sound(CLICK);
delay(CLICKDELAY);
nosound();
}
voidHighBeep()
{
sound(HEBEEP);
delay(BEEPDELAY);
nosound;
voidLowBeep()
{
sound(LOWBEEP);
}
voidDrawPoly(int*data,intangle,intcolor)
{
intusedata[8];
floatsinang,cosang;
inti;
sinang=sin((float)angle/180*;
cosang=cos((float)angle/180*;
for(i=0;i<8;i+=2)
{
usedat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程 计算器 设计 报告