《擦数游戏数据结构课程设计报告.doc》由会员分享,可在线阅读,更多相关《擦数游戏数据结构课程设计报告.doc(16页珍藏版)》请在三一办公上搜索。
1、数据结构课程设计报告擦 数 游 戏班 级:软件092 姓 名: 指导教师: 成 绩:_ 年 月 日摘要: 随着计算机技术的飞速发展,数据结构在计算机领域内显的尤为重要。而数据结构这门学科,根据数据的不同结构和组织方法以及进行数据处理的不同算法,通过分析和比较选择出较好的设计方案。擦数游戏这道题目,对算法和编程能力都有很高的要求。这正体现出了此次数据结构课程设计的特点。对此题,首先要建立一个合适的数学模型,根据数学模型用C语言编程。建立的数学模型,要求计算平均数的方法,而此题的平均数分子和分母都要求是整数,这就要对分子和分母进行约束。在用C语言编程的时候,要用到的语句主要有判断语句,输入和输出语
2、句等。关键词:数据结构,数学模型,算法,C语言编程 目录1.引言- 4 -2.需求分析:- 5 -3.概要设计- 5 -3.1 课程设计流程图- 5 -3.2主要的数据结构及完成本课程设计所用的方法- 6 -4.详细设计- 7 -4.1建立数学模型- 7 -4.2 编写程序实现建立的数学模型- 8 -4.3 程序各个部分的说明- 10 -5.测试结果- 11 -6.调试分析- 13 -7.设计体会- 15 -8.结束语- 16 -9.参考文献- 16 -擦数游戏1.引言 本次课程设计的目的:是对数据结构所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提
3、高分析问题、解决问题,从而运用所学知识解决实际问题的能力。实验环境:Window 2000及以上,c-free所有版本,Turbo2.0实验的任务要求:任务:对擦数游戏建立数学模型,找合适的工具编写程序要求:1. 完成需求分析2. 建立数学模型3. 用C语言编写程序4. 调试2.需求分析:在黑板上从1开始写出一组连续的自然数,然后擦去其中的一个数k,其余的数的平均值为a/b(a,b为整数)。试编写程序求出被擦去的数k。仔细阅读题目,就可以发现这道题目对算法的要求比较高,正好能体现这次数据结构课程设计的目的。在软硬件方面对系统的需求,软件要求易学,界面友好,容易掌握,因此可以选用c-free3.
4、5。硬件的配置要求也不需要很高,学校提供的机房就行了3.概要设计 3.1 课程设计流程图 开始输入最后一个自然数n输入删除数K后的平均值a/b你输入的平均数错误是否(n-1)%b=0(p-n)/(n-1)/b)=a=(p-1)/(n-1)/b)结 束所删除的数是K图13.2主要的数据结构及完成本课程设计所用的方法在黑板上从1开始写出一组连续的自然数,然后擦去其中的一个数k,其余的数的平均值为a/b(a,b为整数)。试编写程序求出被擦去的数k。分析题目,可以知道:1. 这组数是从1开始的一组连续的自然数;2. 擦去其中的一个数k后,其余的数的平均值a/b;3. a,b为整数;4. 这一组数需自己
5、输入,平均数a/b为已知,但也必须自己输入;5. 删去一个数k后,平均数有范围,需对a/b加一个范围,方便输入。4.详细设计 4.1建立数学模型在黑板上从1开始写出一组连续的自然数,然后擦去其中的一个数k,其余的数的平均值为a/b(a,b为整数)。试编写程序求出被擦去的数k。分析题目,首先假设这一组连续的自然数的最后一个数为n则这一组数的总和为P=1+2+n= 删去一个数k后,其余的数的平均值为由关系可知 所以 在这个题目中,这组连续的自然数,平均数都为已知,但都需要输入者自己输入。这组连续的自然数无需再加任何条件就可以输入,但平均数是有一个范围的。通过对上述模型的分析,就可以对平均数a/b做
6、一个限制。其中:b为擦了一个数k后,这组数的个数n-1的约数,即 (n-1)%b=0在b的基础上,再对a加一个条件,即 (p-n)/(n-1)/b)=a=(p-1)/(n-1)/b)这样通过输入n,a和b就可以得到被删除的数k。4.2 编写程序实现建立的数学模型#includeint main() int n,k,a,b,i,j,q; int p=0; printf(-|n); printf( 请输入这组自然数的最后一个数:); scanf(%d,&n); if(n0) printf(-|n); printf( n必须为自然数:); printf(-|n); else for(i=1;i=n;
7、i+) p=p+i; printf(-|n); printf( 1n这n个数之和为p=%dn,p); printf(-|n); printf( 请输入擦除一个数K后的平均数a/b .n); printf(-|n); printf( 其中:n); printf( b是%d的约数.n,n-1); printf(-b=); scanf(%d,&b); printf(n); if(n-1)%b!=0) printf(你输入的b不正确!); printf(-|n); else j=(p-n)/(n-1)/b); q=(p-1)/(n-1)/b); printf( a必须是%d与%d中的一个整数.nn,j
8、,q); printf(-a=); scanf(%d,&a); printf(n); if(aq) printf(-|n); printf( 在这组数中a不可能为这个数!n); else k=p-a*(n-1)/b); printf( 则所删除的数K为%dn,k); printf(-|n); 4.3 程序各个部分的说明 (1)定义变量int n,k,a,b,i,j,q; int p=0;(2)计算这组数的总和 for(i=1;i=n;i+) p=p+i; printf( 1n这n个数之和为p=%dn,p);(3)输入n,a,b首先输入这组自然数printf( 请输入这组数的最后一个数:); s
9、canf(%d,&n);再输入b: printf( b是%d的约数.n,n-1);scanf(%d,&b);最后输入a: printf( a必须是%d与%d中的一个整数.nn,j,q); scanf(%d,&a);(4)判断输入的平均数是否符合要求最用ifelse语句判断输入的平均数是否正确 if(n-1)%b!=0) printf(你输入的b不正确!); printf(-|n); else j=(p-n)/(n-1)/b); q=(p-1)/(n-1)/b); printf( a必须是%d与%d中的一个整数.nn,j,q); printf(-a=); scanf(%d,&a); printf
10、(n); if(aq) printf(-|n); printf( 在这组数中a不可能为这个数!n); else k=p-a*(n-1)/b); printf( 则所删除的数K为%dn,k); printf(-|n); (5)输出被删除的数kk=p-a*(n-1)/b);printf( 则所删除的数K为%dn,k);5.测试结果 任选三组数来测试程序的可行性。(1) 待添加的隐藏文字内容3(2)(3) 程序运行结果正确。6.调试分析1.输入的n不是自然数:2.输入n为自然数,b不是(n-1)的约数3.输入n为自然数,b是(n-1)的约数,但a不在(p-n)/(n-1)/b)=a=(p-1)/(n
11、-1)/b)这个范围内:4.输入的n为自然数,平均数a/b也符合条件,就可以得到被删除的数k5.在调试过程中还发现,当输入的n过大时,由于计算机配置,结果在运行的过程中得不到预期的结果:7.设计体会经过这次课程设计,我对数据结构这门课程有了进一步的理解,对C编程有了一定的提高。另外也提高了我分析问题、解决问题,从而运用所学知识解决实际问题的能力。就比如数我做的这题,擦数游戏。初看题目,很简单的一个数学问题,但是再看题目,就会发现简单的数学题目,用计算机实现就有难度了。因为计算机语言跟现实中的语言是有差别的,需要把数学的算法转换成数据结构算法,再编程实现。通过这次课程设计,我发现了自己平时学数据
12、结构这门课还有很多没有注意到的地方。虽然说这次的课题顺利完成了,但我对数据结构这门课的学习还没有完成,以后还必须对数据结构进行复习巩固。以前在数据结构这门课上,我学到的仅仅是理论知识,但这次的课程设计让我感受到课上的东西用到实际问题的难处。在今后对计算机方面知识的学习中,我要注意理论联系实际,这样才可以把学到的东西运用出来,真正的做到学以致用!8.结束语感谢我的数据结构老师董跃华在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。感谢学校能够给我们提供这么好的机房,使我有地方上网查资料,能够有地方做这次课程设计。我也很感谢我的同学,我完成我的程序之后,请他们帮我调试,提了不少宝贵的意见,使我的程序有了进一步的完善。9.参考文献1) 谭浩强 C语言程序设计(第三版 )清华大学出版社2)严慰敏. 数据结构(C语言版). 清华大学出版社