C案例实验指导书Word文档下载推荐.docx
《C案例实验指导书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C案例实验指导书Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
![C案例实验指导书Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/23/a03e370c-c300-4d29-831e-28cb9e4e2243/a03e370c-c300-4d29-831e-28cb9e4e22431.gif)
将课本上的理论知识和实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。
为后续课程:
C++,VisualC++,数据结构,软件工程,软件技术基础等奠定必要的实践基础。
实验一教材管理程序
实验学时:
6学时
实验类型:
综合
实验要求:
必做
一、实验目的
1.掌握数组、函数、指针、链表、文件的应用
2.学会使用C语言编写规模稍大的应用程序
二、实验内容
教材管理程序
1功能要求:
能通过键盘输入数据,存到文件中。
提供教材信息显示功能,要求能提供以下显示方式:
按自然顺序显示,即按文件的保存顺序显示。
按教材名称顺序显示教材信息。
按出版社排序顺序显示教材信息。
要求能提供以下两种查询方式:
按教材名称查询
按使用专业查询
能对教材记录进行修改。
要求提供按照教材编号对教材数据库进行修改的功能。
提供初始化功能。
该功能可以将教材文件中的数据清空。
能够向文件添加新的教材数据
能够按照教材编号删除教材数据
2技术要求
每条教材记录至少包含以下信息:
编号,名称,价格,数量,专业,作者,出版社,备注。
教材数据用文件形式保存,存储位置、文件名、文件格式自定
教材管理程序的各项功能要求编写独立的函数或主控函数予以实现,并且,其所属的各项子功能尽量由独立的函数实现。
以菜单方式实现功能选择控制。
(界面可以不用图形显示方式)
初始化数据文件要求输入密码验证功能。
能保存100条记录的管理.
三、实验原理、方法和手段
参考案例、课件和教材相关内容。
上机操作
四、实验组织运行要求
集中授课
五、实验条件
软件配置:
WindowsXPProfessional、vc++6.0
硬件配置:
CPUP42.0G以上、内存512MB以上
六、实验步骤
1.程序功能模块划分
2.设计教材数据结构
3.规划程序结构、各个函数名称,公共变量定义
2.设计系统各个函数
3.设计主函数进行测试
七、思考题
八、实验报告
要求实验报告的内容包括实验目的、实验设备、实验内容、实验结果、思考题五个部分。
九、其它说明
实验二文本编辑器
综合
1.掌握TC环境下文本屏幕输出、键盘输入
2.掌握在TC环境下制作菜单
3.掌握图形交互式应用程序的开发与设计
制作文本编辑器系统。
具备插入、删除行/字符的功能,能查找、替换字符串,能把文本保存到文件,能从文件里读出文本,制作三个下拉式菜单:
file,edit,help
实现键盘按键功能:
退格、删除、回车、上下左右
File菜单下至少包含loadfile,savefile
Edit菜单下至少包含查找替换功能
认真学习教材内容:
文本窗口的定义、文本窗口颜色和其它属性的设置、窗口内文本的输入输出函数、有关屏幕操作的函数、键盘输入、菜单显示
WindowsXPProfessional、TC2.0
2.文本编辑器数据结构
实验三图形显示方式和鼠标输入、汉字显示技术
4学时
掌握图形显示方式和鼠标输入、汉字显示技术
绘制柱状图
根据下列表中的数据绘制下图的柱状图
数据可以转换为整型
在屏幕上制作一个退出按钮,鼠标单击这个按钮,程序运行结束
实现鼠标功能,实现汉字显示
所需要的函数可以在书本或者开发环境里查。
使用图形显示方式
柱状图使用三维立体直方图函数
voidfarbar3d(intx1,inty1,intx2,inty2intdepth,inttopflag);
图形下面的文本显示可以使用outtextxy(intx,inty,charfar*textstring);
画线的函数
颜色控制函数setcolor(intcolor)
WindowsXPProfessional、tc2.0
2.设计数据结构
实验四动画设计
验证
掌握TC环境下图像显示技术与动画技术
编写程序,该程序将在繁星点缀的黑色背景中显示一个经纬线为蓝色的并围绕着一红色光环的地球,光环时隐时现,地球也在自西向东转动,一蓝色宇宙飞船从左自右缓缓飞过,周而复始。
屏幕下方显示AROUNDTHEWORLD字样
在上面的问题中,我们已能解决的是在图形模式下画静态的图形,例如产生星空背景。
当然,若地球、光环甚至宇宙飞船不是动态的,我们同样可以完成。
一旦一个图形画在了屏幕上就成为整个屏幕图象的一部分。
那么如何产生动态的画面呢?
我们知道电影或动画片是由一张张图象组成的,利用人眼不能够分辨出时间间隔在25毫秒内的动态图象变化这一特性,当这些连续图象被放映时,从视觉效果上给人以动的感觉。
所以在计算机屏幕上产生运动的效果需要动画技术。
利用cleardevice()和delay()函数相互配合,先画一幅图形,让它延迟一个时间,然后清屏,再画另一幅,如此反复,形成动态效果。
利用图视口设置技术,可以实现图视口动画效果,例如可在不同图视口中设置同样的图象,而让图视口沿x轴方向移动设置,这次出现前要清除上次图视口的内容,这样就会出现图象沿x轴移动的效果。
也就是说,在位置动态变化,但大小不变的图视口中(用setviewpot()函数),设置固定图形(也可是微小变化的图象),这样虽呈现在观察者面前的是当前图视口位置在动态变化,但视觉上却象是看到图象在屏幕上动态变化一样。
首先用outtextx()函数在屏幕下方显示了AROUNDTHEWORLD字样,然后调用draw_image(x,y)函数画出尾部带有三个72天线的飞船,用imagesize()函数求出了该函数所占字节数,然后用pt_add指针指向存放该图形的缓冲区,并将飞船图形存在该缓冲区,接着调用putstar()函数画星星,该函数用了初始化随机数发生器函数srand(),和随机数发生器random(r),srand使得random()每次重新产生新起点的随机数,该随机数为0~r-1,这样就将在画面随机地产生由小圆点和象素点构成的夜空小星星画面。
在while循环中,当不按键时,就反复产生一个红色光环,接着又是黑色光环,这实际上使得产生的红色光环时隐时现,因而给人以动的感觉,接着的for循环则用来产生地球的经纬线,它们实际上是由不同长短半径的椭圆组成,给人以立体感。
为了造成动的感觉,使当i为偶数时为浅蓝色,奇数时为黑色,这样看起来就象地球自西向东转一样。
纬线则不动。
接着用putimage()将飞船图象以每次x方向增加6复现在屏幕上,当x达到最大边界max时,便重新从x=2处开始。
这个while循环中的第一个putimage()将飞船画面与原来的画面进行异或操作,从而实现原画面的恢复工作,第二个putimage()将在新位置让飞船出现,下一轮循环时,将由第一个putimage将其覆盖并恢复原屏幕图象,这样就实现了飞船的飞行。
实验五制作中断处理程序
2学时
掌握如何用TurboC实现自己的中断服务
1)从键盘I/O端口60H读取一个字节的扫描码,并将它存入一个全局变量中供main程序处理,或者将它存入一个数据表中。
2)读取控制寄存器61H,并用80H完成一个OR操作。
3)将结果写回控制寄存器端口61H。
4)在控制寄存器上用7fh完成一个AND操作,以便复位键盘触发器,告诉硬件一个按键已被处理,可以读下一个键了。
5)复位中断控制器,向端口20h写一个20h。
用TurboC实现编写中断程序的方法可用三部分来实现:
即编写中断服务程序、安装中断服务程序、激活中断服务程序
TurboC为此提供了一种新的函数类型interrupt,它将保存由该类型函数参数指出的各寄存器的值,而在退出该函数,即中断恢复时,再复原这些寄存器的值,因而用户的中断服务程序必须定义成这种类型的函数。
如中断服务程序名定为myp,则必须将这个函数说明成这样:
voidinterruptmyp(unsignedbp,unsieneddi,unsignedsi,unsignedds,unsignedes,
unsigneddx,unsignedcx,unsignedbx,unsignedax,unsignedip,
unsignedcs,un3ignedflags);
若是在小模式下的程序,只有一个段,在中断服务程序中用户就可以像用无符号整数变量一样,使用这些寄存器。
若中断服务程序中不使用上述的寄存器,也就不会改变这些寄存器原来的值,因而也就不需保存它们,这样在定义这种中断类型的函数时,可不写这些寄存器参数,如可写成:
voidinterruptmyp()
{
…
}
对于硬中断,则在中断服务程序结束前要送中断结束命令字给系统的中断控制寄存器,其口地址为0x20,中断结束命令字也为0x20,即outportb(0x20,0x20);
在中断服务程序中,若不允许别的优先级较高的中断打断它,则要禁止中断,可用函数disable()来关闭中断。
若允许中断,则可用开中断函数enable()来开放中断。
WindowsXPProfessional、IE5.5以上、tc2.0
利用每秒18.2次的定时硬中断每秒要调用18.2次的软中断0xlc,将中断0xlc中断服务程序改写为对进入该中断的次数进行计数的程序,每到18次时,在屏幕的右上角开一个窗口(window(50,1,54,3)),在窗口的中间位置显示0~9十个数字中的一个,频率接近于秒表数(不过只显示十个数)。
由于这是一个硬中断演示程序,计时并不准确,若要精确计时,则应91次0xlc中断为5秒。
实验六声音播放技术
掌握TC环境下的声音播放技术
乐谱的1、2、3、4、5、6、7,加上高低音可以谱出动听的曲子,请编写程序,使计算机能够播放歌曲。
在PC机的系统板上装有定时与计数器8253芯片,还有8255可编程并行接口芯片,由它们组成的硬件电路可用来产生PC机内扬声器的声音,对于286、386、486、586等PC微机,由于采用了超大规模集成电路,因而看不到这些芯片,它们均集成在外围电路芯片上了。
当我们操作计算机时,常常听到的发声,就是由软件控制这些电路而产生的。
声音的长短和音调的高低,均可由程序进行控制。
在扬声器电路中,定时器的频率决定了扬声器发音的频率,所以可通过设定定时器电路的频率来使扬声器发出不同的声音。
对定时器电路进行频率设定时,首先对其命令寄存器(口地址为0x43)写命令字,如写入0xb6,这可用outporb(0x43,0xb6);
来实现,则表示选择该定时器的第二个通道,计数频率先送低8位(二进制),后送高8位。
接着用口地址0x42送频率计数值,先送低8位,后送高8位,即用outportb(0x42,低8位频率计数值)和outportb(0x42,高8位频率计数值)来实现。
通过这两步使定时器电路产生一系列方波信号,此信号是否能推动扬声器发音,还要看由8255产生的门控信号和送数信号是否为1,而它们也可编程,口地址为0x61。
为了不影响8255口地址61H中的其他高位,应先输入口地址6lH的现有值bits,即用bits=inportb(0x61)来实现,然后就可用outportb(0x61,bits|3)来允许发声,而用outportb(0x61,bits&
0xfc)来禁止发声,且不改变8255其它位原来的值,关于这方面的详细内容可以参阅IBMPC/XT接口技术方面书籍有关内容。
开辟两个数组freq[96]和dely[96]分别用于存储声音的频率和延时。
采用图形方式,利用printtext()函数在屏幕上分别显示字符串Welcome!
"
,"
Pleasepressanykeytostart......"
Enjoyyourself!
”,"
Pressanykeytoend!
和"
Thankyou!
ByeBye......"
printtext()定义如下:
voidprinttext(unsignedchar*temp[],inti)
setcolor(4);
//设置颜色为red
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);
//设置字符的字体,方向和大小
outtextxy(100,40+i*50,temp[i]);
//显示字符串
另外,在此程序中还调用了conio.h中的函数kbhit(),用于判断是否有键按下,当没有键按下时返回0。
调用sound()和unsound()播放和关闭音乐
调用inportb()和outportb()进行频率设定
实验七扫雷游戏
8学时
巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力,应用模块化的程序思想,设计一个具有选择菜单、文件操作、功能比较丰富的小应用程序。
扫雷游戏
模仿windows的扫雷游戏
功能要求
具备开局功能
挖地雷功能
标记疑问功能
自动挖开功能
制作下拉式菜单
能够使用鼠标功能
显示汉字
能够显示剩余雷数
能够计时
菜单里有扫雷英雄榜
可以显示扫雷英雄榜前十名
可以使用鼠标
各项功能要求编写独立的函数或主控函数予以实现,并且,其所属的各项子功能尽量由独立的函数实现。
WindowsXPProfessional、IE5.5以上、tc2.0开发环境