版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序编写实践实践目标培养生综合运用所学知识独立完成课题的能力。
2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑
问题等科学技术人员应具有的素质。
5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的
新途径的悟性,初步培养工程意识和创新能力。
6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面
及口头表达能力进行考核2.课程设计目的
1.培养生综合运用所学知识独立完成课题的能力。
2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
4.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
二、实践内容扫雷游戏是Tndows操作系统自带的一款小游戏。在过去的几年里Windows操作系统历经数次换代更新,变得越来越庞大复杂,功能也越来越强大,但是这款小看戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。参考系统自带的扫雷程序自行开发设计一款扫雷游戏。春重冒要求:(1)鼠标左击排雷,右击插小旗,打问号:(2)方格里面的数字表示方格周围的雷数:(3)能够显示未标记雷数和游戏用时:三、实践过程功能框图启动程序,输入数字启动程序,输入数字输入数字0输入数字1输入数字0输入数字1开始游戏,扫雷开始游戏,扫雷游戏结束游戏结束点到雷区或成功扫雷点到雷区或成功扫雷二、算法设计:
1、算法思路::定义一个二维数组,用来表示扫雷游戏的行,列。定义初始化使得二维数组的行,列为0;将二维数组中的10个数组坐标设置为“雷”,用“1”来表示雷。其余数组坐标全部为0,即为安全地带;在每一个数组坐标周围进行搜寻,每搜寻到一个有“雷”的数组坐标则该数组坐标表示的值加1,但是这种情况会出现数组越界的问题。所以添加一辅助数组,但打印数组时,不打印辅助数组,只打印游戏数组即原来定义的二维数组。将辅助数组全部定义为0,可以表示出雷的个数和位置;在游戏开始后,将辅助和游戏两个二维数组分别初始化为*和0这样就不能看到*下所显示的数字,即可正常游戏。将游戏数组进行排雷操作,重新定义一个变量,使其每找到一个雷便会使这个变量加1,直到变量等于雷数,即可判定游戏胜利。在游戏过程中,玩家每输入一个坐标点便会重新打印组一次游戏数组,打印后的游戏数组不包含玩家已输入过的坐标点。如果玩家在游戏过程中,输入的坐标点正好有雷,便会自动结束游戏。2、算法流程图:3、函数原型:#define用来宏定义定义的子函数:voidinit_board()初始化二维数组voiddisplay()用来打印棋盘voidset_boom()用来布置雷区voidfun()对周围八个方位扫描intget_boom()计算周围八个方位的雷数voidgame()游戏运行voidmenu()游戏开始界面voidtest()游戏选择界面system("pause")冻结屏幕,用户按键结束三、数据组织:1、数据类型定义:整型,空类型,字符型,字符常量2、数据存储:无四、调试和运行:1、调试过程:刚开始出现运行显示错误,仔细检查发现代码没问题,最后在同学提示下才发现是标点符号的错误。最后经过几次彻底检查,程序运行成功。2、运行结果:1,启动程序,运行成功2,执行程序,输入1开始游戏,输入0退出游戏。3,输入坐标,开始游戏。4,结束游戏代码附件#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#defineROW9#defineCOL9#defineROWS(ROW+2)#defineCOLS(COL+2)#defineMAX10//初始化voidinit_board(chararr[ROWS][COLS],charset,introw,intcol){memset(arr,set,row*col*sizeof(arr[0][0]));}//打印棋盘voiddisplay(chararr[ROWS][COLS],introw,intcol){inti=1,j=1;printf("");for(i=1;i<=row-2;i++){printf("%d",i);}printf("\n");for(i=1;i<=row-2;i++){printf("%d",i);for(j=1;j<=col-2;j++){printf("%c",arr[i][j]);}printf("\n");}}//布雷voidset_boom(chararr[ROWS][COLS]){intcount=MAX;while(count>0){intx=rand()%9+1;//产生1~9的随机数inty=rand()%9+1;if(arr[x][y]=='0'){arr[x][y]='1';count--;//布雷}}}//扫描雷intget_boom(chararr[ROWS][COLS],intx,inty){returnarr[x-1][y-1]+arr[x-1][y]+arr[x-1][y+1]+arr[x][y-1]+arr[x][y+1]+arr[x+1][y-1]+arr[x+1][y]+arr[x+1][y+1]-8*'0';//计算周围八个位置雷的个数}//对某一点进行扩展voidfun(chararr[ROWS][COLS],charshow[ROWS][COLS],intx,inty){if((x>=0)&&(x<=11)&&(y>=0)&&(y<=11))//递归约束条件{if(get_boom(arr,x,y)==0)//判断雷的个数{show[x][y]='';if(show[x-1][y-1]=='*')//对周围八个位置分别进行递归{fun(arr,show,x-1,y-1);}if(show[x-1][y]=='*'){fun(arr,show,x-1,y);}if(show[x-1][y+1]=='*'){fun(arr,show,x-1,y+1);}if(show[x][y-1]=='*'){fun(arr,show,x,y-1);}if(show[x][y+1]=='*'){fun(arr,show,x,y+1);}if(show[x+1][y-1]=='*'){fun(arr,show,x+1,y-1);}if(show[x+1][y]=='*'){fun(arr,show,x+1,y);}if(show[x+1][y+1]=='*'){fun(arr,show,x+1,y+1);}}elseshow[x][y]=get_boom(arr,x,y)+'0';//如果周围有雷则显示雷的个数}}voidgame(){chararr[ROWS][COLS]={0};charshow[ROWS][COLS]={0};intwin=0;intx=0;inty=0;init_board(arr,'0',ROWS,COLS);init_board(show,'*',ROWS,COLS);set_boom(arr);display(show,ROWS,COLS);while(win!=MAX)//判断是否排完雷{printf("请输入坐标:");scanf("%d%d",&x,&y);if(((x>=1)&&(x<=ROW))&&((y>=1)&&(y<=COL))){if(arr[x][y]=='1'){printf("游戏结束!\n");break;}else{fun(arr,show,x,y);for(inti=1;i<=9;i++){for(intj=1;j<=9;j++){if(show[i][j]=='*'){win++;}}}display(show,ROWS,COLS);}}else{printf("输入坐标有误\n");}}if(win==MAX){printf("恭喜你赢得游戏!");}printf("雷阵如下:\n");display(arr,ROWS,COLS);}voidmenu(){printf("******************************\n");printf("******1.开始游戏0.退出游戏*******\n");printf("******************************");}voidtest(){intinput=0;srand((unsignedint)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case1:game();break;case0:break;default:printf("选择错误,请重新选择!");break;}}while(input);}intmain(){test();system("pause");return0;}四、实践体会在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为期两个周的时间里,我们明显的感觉到了在实践过程中所面对的与平时上课时所面临的有着很大区别,我们在实践时面对的明显要比在课堂上所面对的更要复杂,困难。但这并没有阻挡我们前进的脚步,我们明天都在不停的学习更多关于C语言方面的知识,为最后程序的完成做好准备。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这次实训中,我在C语言方面有了很大的进步,并不在是最开始什么都不知道的懵懵懂懂的少年了,在这一方面有了很大的进步,有最开始的时候什么都不知道也开始在慢慢的成长,也在不知不觉得进步,有开始的不懂什么是编程,到现在的也会开始写一些简单地小程序,对于我来说,也是一种进步,每天都在尝试编程,虽然也会失败,但也会一次次地在失败中慢慢的吸取经验,也会有成功的一次。还是这次实训,最令人激动的就是合作做项目,最开始的时候,由于彼此之间大家也并不的熟系,所以对大家之间的合作也并没有太大的交流,但慢慢地随着问题的不停探讨,我们之间也变得熟了起来,大家之间的关系也变得越来越好,我们再次问题的探讨中,互相取长补短,大家的技能也得到了提高。而且老师也会在课上给我们讲解他自己在工作时遇到的趣事,是我们的课堂也变得丰富多彩起来,而且老师还鼓励我们去自学,这样才能有着更大的提升,但遇到不会的问题可以随时去询问他。通过这次实训,也使我们发现了许多问题。还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。首先我会每天都继续着关于C语言的学习,不会因为这次实践的结束,而去停下来这样的学习,学好这方面的理论知识,然后在电脑上熟系的操作,加强与同学之间的合作,遇到问题随时和同学们进行讨论,并且还会写一些不同的程序代码,来提高与磨练自己,总之,这一切都成为我记忆里面的一个美好的回忆,我会一直珍藏,,更是我自己在C语言编程道路上的一个里程碑。经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题。当然,每次成功将自己所编写的程序转换成代码都小有激动,虽然它只是电脑屏幕上输出了一些数字和一些简单地图案。编程,虽然还不是很懂,但总感觉不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“。对于我们来来说,一个相同且简单地问题,让大家去解开答案,可能经过一些和口算和纸笔的运算都能得出结果,但是如何把将这个问题转化成简单又不复杂得代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化代码让程序运行时间缩短以及减少可能出现的bug。如果学习代码像是只是单纯的学习知识,我们小组四人,都十分的配合与参与积极,这才使得我们此次实践得以顺利进行。C语言的实用性特别强,特别是在科技、信息快速发展的今天,我们更应该重视它。像是背英语语法知识那样得去学习C语言、背下一定量的代码知识(当然熟识理论知识是必须的),这样可能也可以初步懂得这门语言,但是在深入上却较为困难。我始终觉得学习编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025缝纫机机器租赁合同
- 兰州市政府2025年度合同管理创新试点合同3篇
- 2025年度酒店客房内墙乳胶漆翻新服务合同3篇
- 2025年度知识产权交易及投资合作协议3篇
- 二零二五年度竞业禁止机械租赁与节能技术合同3篇
- 二零二五年度跨国公司股东合伙人战略合作协议3篇
- 二零二五年度航空航天出资入股协议
- 2025年度生态园林景观设计-特色树苗订购与施工合同
- 二零二五年度生物医药研发项目转让合同3篇
- 二零二五年度房产转让合同中的税务筹划及优惠条款协议3篇
- 隐患排查治理管理规定
- 2025材料供货合同样本
- 豪华酒店翻新工程协议
- 经济学原理模拟题含参考答案
- 科技强国建设视域下拔尖创新人才价值观引导研究
- 马鞍山酒柜定制合同范例
- 《电梯曳引系统设计技术要求》
- 【MOOC】中国天气-南京信息工程大学 中国大学慕课MOOC答案
- 2025年攻读博士学位期间拟开展的研究计划
- 2025版国家开放大学法学本科《国际私法》历年期末纸质考试总题库
- 职业道德试题及答案
评论
0/150
提交评论