C语言推箱子.docx

上传人:b****8 文档编号:9878372 上传时间:2023-02-07 格式:DOCX 页数:12 大小:30.79KB
下载 相关 举报
C语言推箱子.docx_第1页
第1页 / 共12页
C语言推箱子.docx_第2页
第2页 / 共12页
C语言推箱子.docx_第3页
第3页 / 共12页
C语言推箱子.docx_第4页
第4页 / 共12页
C语言推箱子.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言推箱子.docx

《C语言推箱子.docx》由会员分享,可在线阅读,更多相关《C语言推箱子.docx(12页珍藏版)》请在冰豆网上搜索。

C语言推箱子.docx

C语言推箱子

实训报告

 

题目:

推箱子

院系:

信息科技学院

专业:

通信工程

姓名:

学号:

指导教师:

日期:

2009-9-19

 

桂林电子科技大学信息科技学院

目录

1问题定义…………………………………………………………………………..3

2详细设计………………………………………………………………………………4

2.1数据结构设计…………………………………………………………4

2.2主控流程…………………………………………………………………………5

2.3输出记录………………………………………………………………….5

2.4数据功能描述………………………………………………………………….6

3系统实现………………………………………………………………………6

3.1编码………………………………………………………………………6

3.1.1程序预处理……….……………………………………………………………6

3.1.2主函数main()……….………………………………………………………7

3.2测试与调试………………………………………………………………………8

4系统维护………………………………………………………………………9

5归纳总结………………………………………………………………………9

5.1开发经验………………………………………………………………………9

5.2实训中遇到的问题及解决方法………………………………………………9

5.3设计中的不足之处……………………………………………………………………9

5.4感想和心得体会……………………………………………………………………10

6参考资料………………………………………………………………………10

 

推箱子

本题目设计目的是训练学生的基本编程能力,了解推箱子的开发流程,熟悉C语言的文件各种基本操作。

本程序中涉及数组、结构体、公用体及各种语句的运用如for();while();if….等方面的知识。

通过本程序的训练,为进一步应用C语言打下坚实的基础。

1、问题定义

定义二维数组chMap来记录屏幕上各点的状态。

假设地图中图形0表示墙1表示路2表示目标。

通过循环语句for(j=0;j<10;j++)

{

if(chMap[i][j]==0)

printf("#");

if(chMap[i][j]==1)

printf("");

if(chMap[i][j]==2)

printf("X");

}

输出地图,实现相应功能。

在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成设计和实现的任务。

2详细设计

2.1数据结构设计

●定义读取键盘码共用体及函数。

unionkeyboard/*定义读取键盘码的共用体类型*/

{

intfnGetKey(void)/*定义读取键盘码的函数*/

{

unionkeyboarduniKey1;/*定义读取键盘码的共用体变量*/

while(bioskey

(1)==0);/*检测用户是否按键*/

uniKey1.iKeyInfo=bioskey(0);/*读取按键信息*/

return(uniKey1.chKeyBit[0]==0?

uniKey1.chKeyBit[1]:

uniKey1.chKeyBit[0]);/*返回ASCII码或扩充码*/

}unsignedintiKeyInfo;

charchKeyBit[2];

};这样就定义了读取键盘码的函数,用于读取按键信息,通过按键信息改变坐标。

 

2.2.主控main()函数部分执行流程

2.3输出记录

定义二维数组chMap来记录屏幕上各点的状态,移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格。

通过循环语句for(j=0;j<10;j++)

{

if(chMap[i][j]==0)

printf("#");

if(chMap[i][j]==1)

printf("");

if(chMap[i][j]==2)

printf("X");

}

输出地图

2.4函数功能描述

bios.h是turboc下的库文件,其函数有:

intbioscom(intcmd,charabyte,intport);

用于RS232通讯

intbiosmemory(void);

返回内存大小

intbiosdisk(intcmd,intdrive,inthead,

inttrach,intsector,

intnsects,void*buffer);

BIOS磁盘服务

intbiosprintf(intcmd,intabyte,intport);

使用BIOS进行打印机输出

intbiosequip(void)

设备检查

longbiostime(intcmd,longnewtime);

BIOS时间服务入口

intbioskey(intcmd);

按键接口

这几个函数基本上都有相应的API函数或使用Windows下的机制来实现了,没有与之完全相同的头文件,不知道你要使用哪一个接口函数,只能根据你要的函数进行说明了。

3、系统实现

3.1编码

3.1.1程序预处理

包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。

#include"stdio.h"/*标准输入输出函数库*/

#include"bios.h"

#defineLEFT75

#defineRIGHT77

#defineUPPER72

#defineDOWN80

#defineESC27/*宏定义*/

structBoxss/*定义箱子结构体,其中包含坐标属性*/

{

intx,y;

};

 

3.1.2主函数main()

main()函数主要实现了对整个程序的运行控制,以及功能的运行。

voidmain()

{

intiKey,x=11,y=6,tx=11,ty=6;/*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/

structBoxssBox[4];/*定义箱子数量*/

intchMap[10][10]={/*用二维数组定义地图*/

{0,0,0,0,0,0,0,0,0,0},/*0表示墙1表示路2表示目标*/

{0,1,0,0,0,0,1,1,1,0},

{0,1,0,2,0,0,1,0,1,0},

{0,1,0,1,0,0,1,0,1,0},

{0,1,1,1,0,0,1,0,1,0},

{0,1,0,0,0,0,1,0,1,0},

{0,1,1,1,1,1,1,0,1,0},

{0,1,0,1,0,0,0,0,2,0},

{0,2,0,1,1,1,1,2,0,0},

{0,0,0,0,0,0,0,0,0,0},

};

iKey=fnGetKey();

if(iKey==LEFT&&chMap[y-5][x-1-10]!

=0)

x--;

if(iKey==RIGHT&&chMap[y-5][x+1-10]!

=0)

x++;

if(iKey==UPPER&&chMap[y-1-5][x-10]!

=0)

y--;

if(iKey==DOWN&&chMap[y+1-5][x-10]!

=0)

调用函数,按读取的按键信息改变坐标。

3.2测试与调试

概述

一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。

在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。

测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“{}”等等。

调试则是确定测试中找到的错误性质并改正错误的过程。

测试与调试通常交替进行,即测试——调试——再测试——再调试。

能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。

测试程序需要测试用例,测试用例可用如下公式表示:

测试用例=测试数据+预期结果。

好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。

要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。

还应分别测试输入合法数据与非法数据时,程序的运行情况,。

对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。

测试可按模块测试、组装测试和确认测试的步骤进行。

(1)模块测试就是分别对各模块进行测试的过程。

在编写一个模块后应立即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易构造测试数据,能方便地检查和改正错误。

(2)组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。

一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。

(3)确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件是否确实满足用户的要求,通常使用接近实际的用例进行测试。

测试程序时,用监视窗口可以随时查看变量或表达式的值,有时还可以将部分程序代码用注释符暂时括起来,缩短程序,以便压缩出错代码测试与调试

 

4、系统维护

经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。

一般维护的工作有:

更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。

5、归纳总结

5.1开发经验

通过对本题目的开发,体会到要掌握以下几点内容。

 程序。

●先进行人工检查,即静态检查。

在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。

这一步是十分重要的,它能发现由于疏忽而造成的多数错误。

而这一步骤往往容易被人忽视。

有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的。

●编写主函数,并进行测试与调试。

当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。

C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。

●定义函数时,应选好参数的个数和数据类型。

5.2实训中遇到的问题及解决方法

提示的出错信息多,应当从上到下一一改正。

有时显示出一大片出错信息往往使人感到问题严重,无从下手。

其实可能只有一二个错误。

例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。

编程的过程当中找出了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。

综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。

我对做完的习题检查不再是走马观花,而是仔细核对、认真检查。

改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。

5.3设计中尚存的不足之处

所编的程序把学过的一些知识巧妙用上。

不过,程序编的过于简单,应用的新识过少,关于这次的程序,还有些不足的地方。

首先就是该程序界面不够美观大方。

 

5.4感想和心得体会

程序设计是一项细致深入的工作,需要下功夫,动脑子,善于累积经验。

忙碌了两个多星期,在大家的共同努力下,我们总算将此程序设计出来。

尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。

另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。

为了解决此。

类问题,最好就是多向同学,老师请教,不要怕难为情。

尤其是老师,评他们多年的编写程序的经验,来要解决我们的问题,

很感谢这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。

总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:

C语言功能高、表达能力强、使用灵活方便、目标程序效率高。

6、参考资料

[1]黄明等.21世纪进阶辅导C语言程序设计[M].大连理工大学出版社,2005

[2]马靖善等.C语言程序设计[M].清华大学出版社,2005

[3]谭浩强.C语言程序设计(第二版)[M].北京:

高等教育出版社,2002

 

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

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1