《程序设计专题实践》指导书doc.docx
- 文档编号:10633115
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:21
- 大小:69.69KB
《程序设计专题实践》指导书doc.docx
《《程序设计专题实践》指导书doc.docx》由会员分享,可在线阅读,更多相关《《程序设计专题实践》指导书doc.docx(21页珍藏版)》请在冰豆网上搜索。
《程序设计专题实践》指导书doc
执笔人:
杨崇
实验一利用梯形法求函数的积分。
一实验目的:
通过实验了解并掌握利用计算机实现数值计算的基本原理与方法,了解数学理论与利用计算机进行实际应用的联系与区别,培养针对数学模型进行建模的能力,掌握计算特殊函数积分的基本方法和技巧。
二实验内容:
在TurboC平台下编程利用梯形法求出使用常规方法无法求出原函数的特殊函数的积分值,积分函数为
。
要求将积分结果的精度控制在要求的范围内。
三实验原理:
普通的函数可以通过寻找原函数求得定积分值,而某些特殊函数是无法找到原函数的,那么,利用牛顿-莱布尼兹公式求积分法将无所适从,通过积分中值定理我们知道:
在积分区间[a,b]内存在一点ξ,成立
,也就是说,底为b-a而高为f(ξ)的矩形面积恰等于所求曲面梯形的面积。
问题在于点ξ的具体位置一般是不知道的,因而难以准确f(ξ)的值。
我们将f(ξ)成为区间[a,b]上的平均高度,这样,只要对平均高度f(ξ)提供一种算法,相应地获得一种数值求积分法。
如果我们用两个端点的高度f(a),f(b)取算术平均值作为f(ξ)的近似值,这样导出的求积公式T=
[f(a)+f(b)]便是我们所熟悉的梯形公式。
设将积分区间[a,b]划分为n等份,步长h=(b-a)/2,分点为xk=a+kh,k=0,1,2,3,…..,n。
利用低阶的牛顿—轲特斯公式求得每个子区间[xk,xk+1]上的积分值Ik,然后再求和,用来作为所求积分I的近似值。
复化梯形公式:
Tn=
[f(xk)+f]xk+1)]=
[f(a)+2
f(xk)+f(b)]。
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
五、实验中应注意的问题:
1当变量值为0时,根据罗必塔法则函数值取1。
2对步长进行运算时,应采用for循环,可避免产生死循环。
3运算时数值类型应为float或者double,打印数据时,小数点后应保留足够的位数。
4在取除数时,由于使用了实型数据,因此分子或分母的数字部分也应该采取实数形式:
如1.0/x,否则将无法得到正确结果。
5上机时应注意随时存盘,尤其是调试时,避免因为死循环造成无法正常退出而丢失源文件或数据。
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
4误差分析。
实验二矩阵的运算
一实验目的:
通过实验了解并掌握利用计算机实现矩阵计算的基本原理与方法,了解数学抽象概念在实际应用中的引用和计算方法、技巧,培养针对数学模型进行建模的能力,掌握矩阵的基本运算方法。
二实验内容:
在TurboC平台下编程求出矩阵的加/减,以及M×N矩阵和N×M矩阵的乘运算。
三实验原理:
矩阵实际上就是一张表,可以认为是数的集合,它表示了一个一维、二维、空间的抽象特征。
本实验涉及的是二维矩阵。
矩阵在进行加/减运算时,进行运算的两个矩阵必须是行数必须相同,列数也必须相同。
也就是说M×N的矩阵A只能与M×N的矩阵B进行运算,运算的规则是:
Cij=Aij±Bij
矩阵在进行乘运算的时候,进行运算的两个矩阵应为M×N矩阵乘以N×M的矩阵,反之亦然,但相乘的结果可能不同,运算规则是:
Cij=
(i=1,2,…m,j=1,2,…,n)
在计算机中,矩阵的存储方式是以数组的方式以行为主或以列为主的形式存放在内存中,C语言的缺省存储方式是以行为主。
利用二维数组存储矩阵的时候,应当注意,C语言定义数组的下标起始值为0,即第一个元素的下角标为(0,0)而不是(1,1),第(M,N)个数据的下角标为(M-1,N-1)。
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
五、实验中应注意的问题:
1C语言数组下角标的定义特性,如数组个数为N,则下角标从0开始到N-1结束上机时应充分考虑这一特点,防止下标越界。
2矩阵运算时,循环结构采用for循环,避免死循环的发生。
3数据类型的定义要统一,不同类型的矩阵是不可以进行运算的。
4打印运算结果时,矩阵的打印要遵照一定的格式,应该以按行为主打印。
5矩阵数据的输入可采取静态装入,也可以采取运行时动态输入,但要保证输入数据对号入座。
建议按行输入,每次输一行。
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
实验三利用二分法求方程的根
一实验目的:
通过实验了解并掌握利用二分法求方程的跟的基本原理和方法。
了解方程求跟问题在工程中的应用于理论的联系和区别。
培养针对数学模型进行建模的能力,以及在工程中解决实际问题的创造能力。
二实验内容:
在TurboC平台下编程利用二分法求出高阶方程的根,要求根的精度限定在一定的范围内,高阶方程为x3-x-1=0,设定有根区间为[1.0,1.5]。
三实验原理:
数学物理中的许多问题常常归结为求解函数方程f(x)=0,这里,f(x)可以是代数多项式,也可以是超越函数,方程f(x)=0的解x*成为它的根,或称为f(x)的零点。
设函数f(x)在[a,b]上连续,且f(a)f(b)<0,根据连续函数的性质可知道方程f(x)在区间[a,b]内一定有实根。
这时称区间[a,b]为方程f(x)=0的有根区间。
考察有根区间[a,b],取中点x0=(a+b)/2将它分为两半,然后进行根的搜索,即检查f(x0)与f(a)是否同号,如果确系同号,说明所求的根x*在x0的右侧,这时令a1=x0,b1=b;否则x*必在x0的左侧,这时令a1=a,b1=x0。
不管出现哪种情况,新的有根区间[a1,b1]的长度仅为[a,b]的一半。
对压缩了的有根区间[a1,b1]又可以实行同样的步骤,即用中点x1=(a1+b1)/2再分为两半,然后通过根的搜索判定所求的根在x1的那一侧,从而又确定了一个新的有根区间[a2,b2],其长度为[a1,b1]的一半。
如此反复下去,将会有[a3,b3],[a4,b4],…..,[ak,bk],当区间长度bk-ak→0时,也就是说当二分空间逐渐趋近于一个点x*时,该点即为所求函数之根。
在工程上,往往不可能完成这个接近于无限的过程,其实也没有必要,因为在工程上,只要结果在一定的误差范围内即可,即|bk-ak|<ε。
算法:
1计算f(x)在有根区间[a,b]端点处的函数值f(a),f(b)。
2计算f(x)在区间中点
处的值f(
)。
3判断f(
)=0则
即是根,计算过程结束;否则检验:
若f(
)与f(a)异号,则根位于区间[a,
]内,这时以
代替b;
若f(
)与f(a)同号则根位于区间[
,b]内,这时以
代替a。
反复执行步2和步3,直到区间[a,b]缩小到允许的误差范围之内,此时区间中点
即可作为所求的根。
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
5提高误差控制值,查看计算时间高精度求值余低精度求值时运算次数的区别。
五、实验中应注意的问题与思考题:
1求值区间为估算区间,如该区间无根,则应该如何考虑程序的健壮性?
2调整寻根区间时,定义区间端点的变量应为全局变量,为什么?
3误差区间应适度,过大则会造成运算结果不准确,太小则会造成浪费大量计算时间。
4如何选取适当的误差区间?
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
4回答思考题。
实验四基于单向链表的学生信息处理程序
一实验目的:
通过实验了解并掌握利用线性链表、结构体的定义与使用方法。
了解线性链表的基本运算规则,掌握线形逻辑结构采取非线性存储情况下的软件开发技巧,进一步熟悉并掌握C语言中指针的用法。
二实验内容:
在TurboC2.0平台下,开发基于单项链表的学生信息处理程序,利用链表对学生信息处理,应提供创建、编辑、删除、查询、排序等基本功能。
学生的信息应采用结构体进行组织。
三实验原理:
线性链表是常见的线性表之一,它的特点是逻辑结构为线性,即遵守除头结点和尾结点外,其他结点均有且只有一个钱件,有且只有一个后件,头结点只有后件而无前件,尾结点只有前件而无后件。
线性链表的物理结构与逻辑结构不一定对应,通常是杂乱无章的,通过指针作为前后件的连接手段,即前件保存后件的物理地址。
它的结构如下图:
Head
其中,Data域为数据域,用来加载用户数据,Next域为指针域,用来存放后件的物理地址.但这些地址通常不连续。
线性链表的存储方式充分利用了系统的零散空间,对提高计算机内存利用率有很好的作用。
线性链表的创建:
创建过程实际上是链表结点的申请和连接的过程。
向系统申请内存单元,输入用户数据,将结点加入到链表中,连接前后件,明确关系后添加下一个结点。
线性链表的删除:
选定要删除的结点,将该结点前件的指针域数据修改为后件的物理地址值,释放该节点占用的内存空间。
线性链表的查找:
给定查找条件,从链表头开始,顺延向后查找,当找到符合条件的结点时,返回该结点的地址值。
线性链表的编辑:
给定查找条件,查找到符合条件的结点后,修改相应的用户数据,但不能改变该结点的指针值。
线性链表的排序:
按照指定的用户数据用指定的的排序要求(升序或降序)对链表的逻辑结构进行重组,重组的过程中,只改变逻辑结构,而不是物理结构,也不改变结点的数据。
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
5完成对链表的打印,要求程序可以循环执行。
五、实验中应注意的问题与思考题:
1删除链表中的结点时应释放该节点所占用的空间。
为什么?
2定义工作指针时,应注意避免造成内存泄漏?
3定义学生信息资料时应定义为结构体,信息应尽量全面。
4对链表进行运算时应保证线性链表的逻辑完整性。
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
4回答思考题。
实验五使用图形函数实现计算机绘图和动画显示
一实验目的:
通过实验了解并掌握利用图形函数进行绘图的基本方法和技巧,熟悉图形函数的使用,了解并掌握计算机坐标系统的相关知识。
二实验内容:
在TurboC2.0平台下,使用图形函数绘制滑行小车,具体图形绘画模式由学生自主开发。
应了解并掌握计算机坐标的特性和使用方法,做好绘画对象的数学建模。
三实验原理:
PC机显示系统一般是由显示器和显示卡组成。
显示器(Monitor)是独立于主机的一种外部设备。
显示卡(Adapter)是插在PC主机上的一块电路板。
PC机对显示屏幕的所有操作都是通过显示卡来实现的。
显示系统的主要特性
1.显示分辨率
显示分辨率是指屏幕上所能显示的像素点数,通常用列数和行数的乘积来表示。
为了获得良好的显示效果,要求显示器的分辨率与对应分辨率的显示卡相匹配。
通常,高分辨率的显示效果比低分辨率的效果好。
但是,显示分辨率的提高对显示器与显示卡的硬、软件要求更高。
特别是分辨率的提高在很大程度上受到显示器的显示尺寸和扫描频率的限制,也受到显示卡的显存的限制。
根据应用情况的不同,在不超过显示器最高分辨率的条件下,可以通过对显示卡的设置而使用不同的分辨率。
2.显示速度
显示速度是指在屏幕上显示图形和字符的速度。
显示速度与显示分辨率和显示器的扫描频率密切相关。
显示分辨率越高,整个屏幕上的像素点数就越多,显示速度就越慢。
在这种情况下,为了提高显示速度,就需要提高扫描频率。
如果显示器只有一种扫描频率,则它只能与一种显示卡相匹配使用。
随着显示技术的发展,目前一般的显示器可以适应具有多种分辨率与显示速度的显示卡。
颜色与灰度是衡量显示系统的重要参数。
单色显示器只有亮和暗两种灰度;彩色显示器的颜色和灰度要受显示内存的限制,分辨率越高,颜色越丰富,所需要的显示内存就越多。
4.图形显示能力
图形显示能力是显示系统对屏幕上的每一个像素点都可以设置成不同的值的能力。
通常,图形显示对硬件的要求比字符显示要求高得多,同时,图形显示对显示缓冲区的要求也比字符显示时高得多。
显示卡的种类
常用的显示卡有以下几种
1.MDA卡
MDA卡(MonochromeDisplayAdapter——单色字符显示器适配卡)与单色字符显示器配接,它只支持字符显示功能,无图形功能。
2.HGC卡
HGC卡(HerculesGraphicsCard——单色显示图形卡)不仅支持字符显示,而且支持单色图形功能。
在图形方式下,其图形显示分辨率最高可达720~348点阵。
通过软件的设置,还可以支持640~400单色图形显示以及模拟CGA卡图形方式。
3.CGA卡
CGA卡(ColorGraphicsAdapter--彩色图形显示卡)支持字符/图形两种方式。
在字符方式下,它支持80列、25行及奶列、25行的方式,颜色可选16种。
但是字符的质量比较差,只有8X8点阵。
在图形方式下,它支持最大为640~200分辨率,但只有黑、白两种颜色。
此外,它还支持320~200的分辨率,每个像素点可以有四种颜色。
CGA卡有16K的显示缓冲区,用于显示字符及属性或图形方式下的图形数据。
4.EGA卡
EGA卡(EnhancedGraphicsAdapter——增强型图形显示卡)的字符显示能力和图形显示能力都比CGA卡有了较大的提高,显示分辨率达到640~350,最高分辨率图形方式的颜色达到了16种。
EGA卡的显示模式也比CGA卡丰富,并且兼容CGA卡及MDA卡的显示模式。
5.VGA卡
VGA卡(VideoGraphicsArray一一视频图形阵列)是一种功能十分强大、颜色丰富的显示卡。
VGA的标准分辨率可达到640~480,并且具有16种颜色。
一些兼容的VGA卡(如TVGA卡、EVGA卡)的分辨率可达640~480(256种颜色)、800~600(16种颜色)或1024~768(16种颜色)。
VGA卡兼容MDA卡、CGA卡、EGA卡的所有显示模式。
随着显示技术的发展,目前的显示卡的分辨率一般都可以达到1024X768,显示32位真彩(232种颜色)。
视频BIOS
视频BIOS(BasicI/OSystem基本输入/输出系统)是与显示卡配套的一个重要组成部分。
用户通过调用它可以完成一些与显示有关的控制功能。
对于要用到显示系统的一般程序设计都可以通过调用视频BIOs或视频函数库来完成。
但要想获得更高性能的显示程序,还需要对显示卡的寄存器和显示内存直接进行编程。
显示模式
显示模式按功能可以分为字符模式和图形模式两大类。
字符模式也称为字母数字模式,即A/N模式(A1phaNumbermode)。
在这种模式下,显示缓冲区中存放的是显示字符的代码和属性,而显示屏幕被分为若干个字符显示行和列。
图形模式(Graphicsmode)也称为APA模式(A1lPointsAddressablemode)。
在这种模式下,显示缓冲区中存放的是显示器屏幕上的每个像素点的颜色或灰度值,而显示屏幕被划分为像素行和像素列。
由于显示卡的种类很多,其中有些显示模式在不同类型的显示卡及不同厂家的显示卡之间是通用的,这类显示模式称为标准模式。
还有些模式是专用的,称为非标准模式。
通常,显示模式号小于14H的是标准模式;其他则为非标准模式。
图形模式的初始化
不同的显示器适配器有不同的图形分辨率。
即使是同一显示器适配器,在不同模式下也有不同分辨率。
因此,在屏幕作图之前,必须根据显示器适配器的种类将显示器设置成为某种图形模式。
在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。
设置屏幕为图形模式,可用下列图形初始化函数:
voidfarinitgraph(intfar*gdriver,intfar*gmode,char*path);
其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。
图形驱动程序由TurboC出版商提供,文件扩展名为.BGI。
根据不同的图形适配器有不同的图形驱动程序。
例如对于EGA、VGA图形适配器的图形驱动程序为EGAVGA.BGI。
有时编程者并不知道所用的图形显示器适配器种类,而且我们为了将编写的程序可以用于不同图形驱动器,增强程序的通用性,我们通常不指定图形显示器适配器种类,而使用TurboC提供了一个自动检测显示器硬件的函数,其调用格式为:
voidfardetectgraph(int*gdriver,*gmode);
其中gdriver和gmode意义同上。
基本图形函数
基本图形函数包括画点,线以及其它一些基本图形的函数。
具体内容详见上机参考书
《C程序设计上机指导》谭浩强编著北京清华大学出版社1999
屏幕坐标系统
PC机的屏幕坐标原点位于屏幕的左上方。
从左至右为X轴正方向,从上至下为Y轴正方向。
如下图
第三象限第四象限
(0,0)
X
第一象限
第二象限
Y
坐标系统的单位为像素,如系统分辨率为640×480时,屏幕的横向(X轴)为640点,纵向(Y轴)为480点。
在采用计算机进行绘图和仿真时,应该注意屏幕坐标系统与迪卡尔坐标系的区别。
小车绘图示例见下图。
(0,0)X
200
280
300
20
4012040
Y
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
五、实验中应注意的问题与思考题:
1小车向前走动的时候循环结构应采取for循环,可避免产生死循环。
2单次循环结束后应该清空屏幕,为什么?
3延时函数设置值与计算机硬件速度有关,可酌情设定,但不宜延时太长。
4如何让小车在某个位置停止?
如何让小车向后退?
5小车的外观自行设计,但应充分考虑各元素,避免产生不协调运动。
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
4回答思考题。
实验六使用图像函数制作圆盘式时钟的动画显示
一实验目的:
通过实验了解并掌握利用图形函数进行绘图的基本方法和技巧,熟悉图形函数的使用,了解并掌握计算机坐标系统的相关知识。
二实验内容:
在TurboC2.0平台下,使用图形函数绘制圆盘式时钟,应实现对时针、分针、秒针三者之间数学关系的准确描述。
三实验原理:
基础知识部分同实验五
圆盘式时钟的示例见下图
X
(0,0)
秒针
时针
分针
Y
圆盘式时钟的三个指针:
时针、分针、秒针均为顺时针旋转。
它们的数学关系如下:
1秒=1/60分=1/3600小时。
而对于圆盘式时钟而言,由于圆周为2π。
则秒针单位转动增量弧度为2π/30=π/30。
当每秒钟秒针运行π/30时,分针的转动增量弧度为π/(30×60)=π/1800。
由于圆盘式时钟的一个圆周为12小时,则时针此时的转动增量弧度为:
π/(1800×12)=π/21600。
即,每秒钟秒针转动π/30,分针转动π/1800,时针转动π/21600。
当顺时针转动时,转动时弧度均为增量。
当某个指针转动一定的角度时,它的坐标位置会随着自身的转动而发生改变,当然,在这里指针的“轴”位置(x1,y1)不会发生改变,发生改变的是指针位置的坐标值(x2,y2)。
转动时,它们的数学关系为:
x2=x1+Cos(当前弧度)*指针长度。
其中,自身长度通过平面两点间距离公式可以得到,该公式为:
指针长度=
当前弧度为指针在坐标系统中的弧度值,当指针指向0点时,弧度为3π/2
四、实验步骤
1打开开始->程序->附件->命令提示符,进入TurboC2.0,输入程序。
2按F2存盘。
3按F9键检查语法是否存在错误。
4按Ctrl+F9运行程序,调试编译。
五、实验中应注意的问题与思考题:
1循环结构应采取for循环,可避免产生死循环。
2单次循环结束后应该清空屏幕。
3延时函数设置值与计算机硬件速度有关,可酌情设定,但不宜延时太长。
4若要让时钟逆时针转动,将怎么设计?
5时钟样式和具体绘图元素自行编写。
六、实验报告内容:
1实验原理及实现方法。
2上机源程序代码。
3实验结果。
4回答思考题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计专题实践 程序设计 专题 实践 指导书 doc