ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:143.40KB ,
资源ID:3296739      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3296739.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计报告.docx

1、课程设计报告合肥学院C语言课程设计报告一、 需求分析我的课程设计名称:保龄球计分管理系统。课程设计的目的:将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独

2、立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。设计内容:设计一个保龄球计分管理系统,该系统要求对保龄球计分信息进行管理和维护。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。任务和要求:打保龄球是用一个滚球去撞击10个站立的瓶,将瓶击倒。一局分10 轮,每轮可滚球1次或多次,以击到的瓶数为依据计分,一局得分为10轮得分之和,而每轮的得分不仅与本轮的滚球

3、情况有关,还可能与后一轮或两轮的滚球情况有关,即:某轮某次滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。计分规则如下: 若某一轮的第一次滚球就击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加2次滚球),该轮得分为本次击倒瓶数10与以后2次滚球所击倒瓶数之和。若某一轮的第一次滚球未击倒全部10个球,则对剩下未击倒的瓶再滚球一次,如果这2次滚球击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加1次滚球),该轮得分为这2次击倒瓶数10与以后1次滚球所击倒瓶数之和。若某一轮2次滚球未击倒全部10个瓶,则本轮不在滚球,该轮得分为这2次滚球所击倒瓶数之和.要求实现的功能:模拟10个

4、人各打一局保龄球比赛过程,统计每局各轮得分和累计总分。逐人逐轮逐次输入一次滚球击倒的瓶数。对10人的得分由低到高排序并显示。 最后,把排序的存入文件中。二、算法设计1、设计思想:根据题目要求,要逐人逐轮逐次输入,一次先输入第一人第一轮第一次出手出的得分,如果等于10则直接进行第二轮第一次的出手;如果这一次的得分小于10,则进行第一轮第二次的出手,两次的得分总和为第一轮的得分,然后再进行第二轮第一次的出手,如果第二轮第一次的出手得分等于10,则直接进行第三轮第一次的出手;如果这一次的得分小于10,则进行第二轮第二次的出手,两次的得分总和为第二轮的得分,。依此类推,进行第三次,第四次直到第10轮,

5、如果这一轮的出手为10分,则可以另外加两次出手的机会,则第10轮的得分为三次的得分之和;如果这一轮的出手小于10,则进行第二次的出手,如果两次之和等于10,则可以另外加一次出手的机会,则第10轮的得分为三次的得分之和,如果不等于10,则第10轮的得分为两次得分之和;然后把每人每轮得分和总分算出并打印,对总分进行排序再打印.2流程图通过对题目的分析和理解,我做了一个简单的流程图,如下:3、设计表示程序中定义了子函数Order()用来完成10人总分排序并打印的功能。在主数中计算各人的总分并用动态一维数组q来存储,然后传给子函数Order(),由于是一维数组,我们可以选择冒泡排序和选择排序方法来实现

6、,这里我选择了选择排序。之前我定义了动态二维数组p来存储10人10轮的得分,在总分排序的同时,把各个人和各个人的每轮得分进行交换,并把排序结果写入文件a.txt中进行保存。选择排序算法的基本思想:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:初始状态:无序区为R1.n,有序区为空。第1趟排序在无序区R1.n中选出关键字最小的记录Rk,将它与无序区的第1个记录R1交换,使R1.1和R2.n分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。第i趟排序第i趟排序开始时,当前有序区和无序区分别为R1.i-1和Ri.n(1in-1)。该趟排序从当前无序区中选出关键字最

7、小的记录Rk,将它与无序区的第1个记录Ri交换,使R1.i和Ri+1.n分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。4实现注释每个函数的功能Order()函数的功能是将每人每轮的得及分总分进行排序,首先Order()接受主函数传来的形参p代表每人每轮得分的二维动态数组和q代表每人总分的一维动态数组的地址,为其申请动态存储空间,利用一维数组的选择排序方法对总分进行降序排序,同时将每人交换和每轮得分交换,打开文件,将排序结果和交换结果写到指定文件中,然后关闭文件。5、算法设计中一些新的想法和思路在此程序中

8、我用的是动态一维数组和动态二维数组,动态申请空间,避免了资源的浪费。对于此程序我们可以用结构体来完成,定义一个结构体数组用来存储人数,定义一个成员数组来存储10轮的得分,在定义一个整形数组sum()来存储10人的总分,最后进行排序并把结果保存到指定的文件中。我们也可以用链表来完成,动态申请内存空间用p来保存第一个人的每轮的得分以及总分,用p-next来保存第二人的每轮得分以及总分,用p-next-next保存第三人的每轮得分以及总分,依此类推,最后对总分进行排序并把链表输出,最后把排序结果保存在指定文件中。还有,略微改一下人数本程序可以输入和显示更多人的信息和情况,应用很广泛!三、用户手册使用

9、该程序时用户要注意:本系统可在Turbo C、VC+、C+ Builder环境下进行,在输入格式方面只要是整形直接输入就行,中间不用什么分隔符。在输入每人每轮第一次出手的得分时,如果不等于10时,此时紧接着应该输入第二次的出手的得分;然后再输入下一轮第一次出手的得分,在输入过程中有提示,只要按照提示信息输入就不会有错,当所有的输入都完成之后,调试编译,只要打开你所指向的文件中,即可看到你要的结果。四、 调试及测试当我完成源代码,开始调试时,遇到了很多问题,如程序无法运行、提示信息多余、内存不可读、编译错误、出现随机数等等,当提示信息多余时,我选择的是把一些模块交换,就可避免累赘;还有当我把每人

10、的总分排序之后,结果发现对应的人没有交换,此时我定义了一个动态的一维数组,来存储每个人,当排序的同时,将对应的人进行交换,就能实现。当我设计和编码时,我一开始选择了链表,考虑到我的链表操作不如数组,因此我选择了使用动态数组,我定义了动态二维数组p,它的外循环控制人数,内循环控制每人的每轮的得分,用一维数组q保存总分,再用一维数组的选择排序方法对总分进行排序,再进行程序实践操作,一步一个脚印,稳扎稳打,最终成功。通过调试以及测试,我收获了C语言在VC+中的调试方法。五、小结本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出

11、结果。在刚开始的几次调试中曾经出现过不能运行、排序不成功、总分出现随机数、数据不能交换等等一系列问题能和错误,幸好在指导老师及同学们的帮助,这些问题得到克服,并且使程序的功能也得到了一定的完善。现在、它能对总分进行排序并把人们的位置进行交换,能在文件中显示并且给出正确答案。最后还能得到正确的结果。在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个

12、字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。通过这次的课程设计让我将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通。熟练掌握C语言的基本语法,灵活运用各种数据类型。但本系统有一些不足的情况,有待进一步完善。六、参考文献1 贾宗璞、许合利,C语言程序设计,江苏:中国矿业大学出版社,2007.62 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.13 附录:1、程序源代码:#include stdio.h#inc

13、lude stdlib.h#include malloc.h/*函数功能:将每人每局难总分从小到大排序 然后输出*/void Order(int *p,int *q) int i,j,k,temp; int *n,*c; FILE *fp; n=(int *)malloc(10*sizeof(int);/*申请10个存储空间*/ c=(int *)malloc(10*10,sizeof(int);/*申请100个存储空间*/ for (i=0;i10;i+) *(n+i)=i; for(i=0;i=9;i+) for(j=i+1;j*(q+i)/*按总分从大到小排序*/ temp=*(q+j)

14、; *(q+j)=*(q+i); *(q+i)=temp; for(k=0;k10;k+) temp=ci*10+k; ci*10+k=cj*10+k; cj*10+k=temp; temp=*(n+j); *(n+j)=*(n+i); *(n+i)=temp; fp=fopen(a.txt,a+);/*将排序结果追加到文件中*/ fprintf(fp,排序后1-10轮的分数及总分n); fprintf(fp,*n); fprintf(fp,第1轮 第2轮 第3轮 第4轮 第5轮 第6轮 第7轮 第8轮 第9轮 第10轮 总分n); for(i=0;i10;i+) fprintf(fp,第%d

15、人,*(n+i)+1);/*将排序后的每人每局得分及总分输出*/ for(j=0;j10;j+) fprintf(fp,%5d,pi*10+j); fprintf(fp,%5dn,*(q+i); fprintf(fp,*n);fclose(fp); void main() int j,i,k,num,nu; int *p,*q,*m; FILE *fp; p=(int *)malloc(10*10,sizeof(int);/*申请100个存储空间*/ q=(int *)malloc(10*sizeof(int);/*申请10个存储空间*/ m=(int *)malloc(2*sizeof(in

16、t);/*申请2个存储空间*/ for(i=0;i10;i+) *(q+i)=0; for(j=0;j10;j+) printf(请输入第%d人第%d轮第一次得分:,i+1,j+1); scanf(%d,&pi*10+j); /*输入某人第几轮的第一次得分*/ if(pi*10+j10&j=9) printf(请输入第二次击中的瓶数:); scanf(%d,&num);/*第一次不是10分,输入第二次得分*/ pi*10+j=pi*10+j+num; if(pi*10+j=10) printf(由于两次击中十个球且第10轮,输入另加一次击中的瓶数:); scanf(%d,&nu);/*两次击中

17、十个球且第10轮,输入另加一次的得分*/ pi*10+j=10+nu; if(pi*10+j10&j!=9) printf(请输入第二次击中的瓶数:); scanf(%d,&num);/*第一次不是10分,输入第二次得分*/ pi*10+j=pi*10+j+num; if(pi*10+j=10&j=9) printf(由于是第10轮且是一次击中10,输入另加两次击中的瓶数:); for(k=0;k2;k+) scanf(%d,m+k);/*第10轮且是一次击中10,输入另加两次的得分*/ pi*10+j=10+*m+*(m+1); if(pi*10+j=10&j!=9) printf(为10n

18、); pi*10+j=10; *(q+i)=*(q+i)+pi*10+j;/*计算每人的一局总分*/ fp=fopen(a.txt,w+);/*将输入的结果写入文件中*/ fprintf(fp,1-10轮的分数及总分n); fprintf(fp,*n); fprintf(fp,第1轮 第2轮 第3轮 第4轮 第5轮 第6轮 第7轮 第8轮 第9轮 第10轮 总分n); for(i=0;i10;i+) fprintf(fp,第%d人,i+1);/*将每人每局得分及总分输出*/ for(j=0;j10;j+) fprintf(fp,%5d,pi*10+j); fprintf(fp,%5dn,*(q+i); fprintf(fp,*n); fclose(fp); Order(p,q);/*调用总分排序函数*/2、调试输入测试数据:测试数据如下所示:显示结果如下图所示:注释:输入数据时是逐人逐轮逐次输入。由于在输入数据时测试数据在显示屏不能完全显示(如最上面的图),因此我选择了在文件中显示(如中间的一个图),这不是程序中有的,只是为了看数据方便而已。最后将程序运行的结果在指定的文件a.txt中显示(如最后一个图),最后得出正确结论。

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

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