C语言程序设计论文C语言在生活中的运用以计算器为例.docx

上传人:b****8 文档编号:9941768 上传时间:2023-05-22 格式:DOCX 页数:28 大小:50.93KB
下载 相关 举报
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第1页
第1页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第2页
第2页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第3页
第3页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第4页
第4页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第5页
第5页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第6页
第6页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第7页
第7页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第8页
第8页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第9页
第9页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第10页
第10页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第11页
第11页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第12页
第12页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第13页
第13页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第14页
第14页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第15页
第15页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第16页
第16页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第17页
第17页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第18页
第18页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第19页
第19页 / 共28页
C语言程序设计论文C语言在生活中的运用以计算器为例.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计论文C语言在生活中的运用以计算器为例.docx

《C语言程序设计论文C语言在生活中的运用以计算器为例.docx》由会员分享,可在线阅读,更多相关《C语言程序设计论文C语言在生活中的运用以计算器为例.docx(28页珍藏版)》请在冰点文库上搜索。

C语言程序设计论文C语言在生活中的运用以计算器为例.docx

C语言程序设计论文C语言在生活中的运用以计算器为例

C语言程序设计在生活中的应用

——以计算器为例

 

**************

学号:

**********

班级:

10351

*************

 

2012年05月29日

 

【摘要】计算器是我们生活中常用的工具,本文中我们将看到C语言在计算器程序中的应用并实现简单初步的计算。

程序的编写基础是TubroC2.0,它在tubroc的原有基础上实现了多汉字的支持方便了我们的使用。

生成的程序可移植性强兼容性好。

现在实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,以及一个时钟原代码。

这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。

本文主要介绍了程序的开发背景,开发的过程和所要完成的功能。

重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。

【关键词】C语言;程序编写;计算器;时钟

1.综述

1.1设计的现实意义

现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。

人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。

现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。

这些大大方便了我们的生活给我们更多的选择和实现方式。

这个程序可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。

并且操作简单、界面清晰、灵活、实用、方便等要求出发,它所能完成的主要计算功能有以下几个方面:

加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos,求Log10。

计算器的设计使我们所学到的c语言知识在现实中得到检验!

信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强!

1.2硬件环境

一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz

<1>386,486,586及兼容机.640K基本内存;

<2>1M以上扩充内存,10M以上的显示内存。

1.3软件环境

开发环境:

本系统的设计采用的是TC语言开发

WindowsXPsp2操作系统,TurboC2.0汉化版,WPSword

2.程序设计流程图

2.1系统流程图(图1)

图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

退出

 

表1

 

3.系统分析和设计

3.1图形的绘制和输出

在TurboC环境下,绘制程序中的计算器的图形,计算器的输入输出和显示结果的显示屏,绘制计算器的按键,绘制边框。

TurboC为用户提供了一个功能很强的画图软件库,它又称为BorLand图形接口,它包括图形库文件(graphics.lib),图形头文件(graphics.h)和许多图形显示器(图形终端)的驱动程序(如CGA.BGI、EGAVGA.BGI等)。

还有一些字符集的字体驱坳程序(如goth.chr黑体字符集等)。

编写图形程序时用到的一些图形库函数均在graphics.lib中,执行这些函数时,所需的有关信息(如宏定义等)则包含在graphics.h头文件中。

因此用户在自已的画图源程序中必须包括graphics.h头文件,在进行目标程序连接时,要将graphics.lib连接到自己的目标程序中去。

在编制图形程序时,进入图形方式前,首先要在程序中对使用的图形系统初始化,即要用什么类型的图形显示适配器的驱动程序,采用什么模式的图形方式(也就是相应程序的入口地址),以及该适配器驱动程序的寻找路径名。

所用系统的显示适配器一定要支持所选用的显示模式,否则将出错。

Turbo.C提供了一个图形系统初始化函数initgraph可完成这些功能。

当我们使用的存储模式为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()函数的用法完全一样,区别在于cprintf()函数的输出受窗口限制,而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程序的运行和退出

3.4.1运行

通过TubroC安装路径找到TC2.0文件夹中的tc.exe文件,双击该文件,即可进入TC2.0环境。

3.4.2退出

退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。

(也可以在TC环境下直接按Alt+X键退出程序。

这是TC环境下的热键)

4.系统测试

程序调试是指对程序的查错和排错。

为了便于查错、阅读,在设计该程序的过程中我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。

经过仔细检查之后进行上机调试。

进行编译,如果在编译和连接过程中发现错误,

屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。

在本次实习过程中碰到的编译、连接的错误主要有:

缺少变量定义,定义位置不正确、语法错误、转义字符漏用、逻辑错误等。

4.1系统测试

系统测试结果如下:

输出:

错误C:

\jisuanqibyjzj.TXT183:

未定义的符号'LEFT'在Run函数中

错误C:

\jisuanqibyjzj.TXT183:

需要用常量表达式在Run函数中

错误:

C:

\jisuanqibyjzj.TXT393:

’main’的宣告;

开始编译文件:

C:

jisuanqibyjzj.TXT

4.2调试

根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。

主要是平时看书不仔细、不太注意而产生的。

如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。

这些语法错误有信息框的提示一般是能够排除的。

另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。

所以更要对程序仔细的检查。

经认真修改之后重新保存文件。

4.3错误原因分析一

4.3.1缺少变量定义,定义位置不正确

由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。

不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。

为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。

例如:

未定义voidmwindow(char*header);/*窗口函数*/或mwindow("Calculator");/*显示主窗口*/,所以输出voidmwindow(char*header)中就有错误,因为缺少定义。

4.3.2语法错误

大多的语法错误在通过书本参考下能够修改。

主要是平时缺乏锻炼、不太注意而产生的。

如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式

4.4错误原因分析二

4.4.1注释的位置

程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。

注释中不能含有c语言可执行的语句!

4.4.2逻辑错误

编译、连接的成功并不意味着程序的最终成功。

逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。

这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。

这也是本次程序编辑过程中碰到的最大的难题。

往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。

若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。

如此循环往复,直到最后程序运行成功。

在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。

诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。

所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。

5.用户使用说明书

5.1运行TurboC程序进入计算器界面

通过他Tubroc的路径找到TC文件夹;

找到TC文件夹中的tc.exe文件,并用鼠标双击该文件名,

进入TC环境;

打开jisuanqibyjzj.c文件。

5.2计算器的使用

基本使用:

用→←↑↓控制鼠标图形移动,当移动到相应得按钮时按回车键输入当前数字或执行对应的函数。

加法:

输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。

减法:

输入被减数数,按“-”,输入减数,按“=”,输出结果。

乘法:

输入一个数,按“*”,输入另个数,按“=”,输出结果。

除法:

输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。

求x的y次方:

输入数x,按“^”,输入数y,按“=”,输出结果。

求x/y的模:

输入数x,按“%”,输入数y,按“=”,输出结果。

求sin:

输入一个数,按“O”,按“=”,输出结果。

求cos:

输入一个数,按“I”,按“=”,输出结果。

求log10:

输入一个数,按“L”,按“=”,输出结果。

C键:

把寄存器清零

Q键:

退出计算器界面

5.3退出程序

退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。

(也可以在TC环境下直接按Alt+X键退出程序。

这是TC环境下的热键)

6.总结

经过了一个多星期程序设计终于在老师的指导和同学的帮助下完成了计算器课题的设计修改任务。

虽然有些地方不尽如人意但是初步达到了对自己的要求!

刚开始设计的时候找不到头绪,不知道该从哪里下手!

通过向同学询问和向老师寻求帮助找走进了设计的门槛!

通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。

并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的!

万事开头难,可是对于并不是很熟悉的c语言在下面的工作中困难处处能遇见.通过查找c语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。

测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。

在这次的c语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。

在实际的编程操作中发现自己c语言知识的不足,加深了对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*3.14);

cosang=cos((float)angle/180*3.14);

for(i=0;i<8;i+=2)

{

usedata[i]=CENTERX+cosang*data[i]-sinang*data[i+1]+.5;

usedata[i+1]=CENTERY+sinang*data[i]+cosang*data[i+1]+.5;

}

setfillstyle(SOLID_FILL,color);

fillpoly(4,usedata);

}

voidDrawClock(structtime*cutime)

{

intang;

floathourrate,minrate,secrate;

setbkcolor(BLUE);

cleardevice();

setcolor(WHITE);

for(ang=0;ang<360;ang+=90)

{

DrawPoly(Mrk_1,ang,WHITE);

DrawPoly(Mrk_2,ang+30,WHITE);

DrawPoly(Mrk_2,ang+60,WHITE);

}

secrate=(float)cutime->ti_sec/60;

minrate=((float)cutime->ti_min+secrate)/60;

hourrate=(((float)cutime->ti_hour/12)+minrate)/12;

ang=hourrate*360;

DrawPoly(HourHand,ang,YELLOW);/*画时针*/

ang=minrate*360;

DrawPoly(MiHand,ang,GREEN);/*画分针*/

ang=secrate*360;

DrawPoly(SecHand,ang,RED);/*画秒针*/

}

/*主函数*/

intmain()

{intgdriver=EGA,

gmode=EGAHI;

intcurpag

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2