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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言课程设计数组游戏.docx

1、C语言课程设计数组游戏C语言课程设计-数组游戏前言计算机对社会发展所具有的广泛而深远的影响。人类文化的内涵是随着社会发展而进化的。在现代信息社会中,计算机已不仅仅是一种工具,而且是一种文化。信息技术对人类社会进行的全方位渗透,已经形成一种新的文化形态信息时代的计算机文化。计算机知识成为当代知识分子结构中不可缺少的重要部分。设计是一门重要的计算机基础课程,通过学习,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养问题求解和语言的应用能力。此次上机实习,不但要使同学们的程序设计能力上一台阶,同时要提高与程序设计和软件开发有关的各种综合能力。通过这次对C语言

2、的进一步学习,为我们日后学习单片机安打下了基础。在机电一体化日趋明显的当下,掌握一门计算机语言是多么的重要,这必将为我们机电学院学生日后的发展产生深远的影响。由于课时和上机时间的仓促,所以我对很多内容还来不及消化,对上机演练十分陌生,还有一些知识遗忘,因而这次程序设计的实习实际上是对我的一次集中的强化练习。虽然其时间短,任务重,但我们的确达到了此次课程设计的目的。本次实习得到樊*老师的指导和帮助,至此表示感谢 !第一部分 题目要求数组游戏【要求】 设有n个正整数(n20),将它们连成一排,组成一个最大的多位数。程序输入:n个正整数。程序输出:n个数连接成的多位数。 【提示】 以下是设计思路:

3、可以将问题这样变化一下: 比如输入的是123、2、33、1006、12这样几个数字。 先找出最大的数字的位数为4位,再将所有的数字变成4位数:12302000 3300 1006 1200然后进行排序:33002000 1230 1200 1006这样将后面加上的0去掉的序列不就是最大数字吗?于是最大数字就是:332123121006。 第二部分 程序设计思路1.需求分析根据题目要求,输入若干个数字(中间用空格隔开),输入的数字个数不大于20。然后,让这些数随机连在一起,把组合中的最大数输出。2.程序总体设计输入一组数,输出所需要的数。大致流程图:3.程序详细设计3.1主函数主要负责输入和输出

4、一定的数据。main( ) 输入数字, 进行一定的处理, 输出数字,流程图输入一组数字按字符串进行读取遇到空格 n=n+1n=0YN得到数组an3.2排序函数(选择法)void sort(int x,int n)将数字按从大到小的顺序排列(如果两个数字相等,交换位置)void sort(int x,int n) /*用选择法将正整数按从大到小排列*/ int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;j=xk)k=j; if(k!=i) t=xi; xi=xk; xk=t; 3.3求位数函数int num(int y)求每个数个的位数,以便补位。int

5、num(int y) /*求最大数字的位数*/ int i=0; while(y) y=y/10; i+; return i;3.4变位函数void modificate(int z,int n);把排序后的数字变成最高位数。流程图:数组ai计算需要补的位数y新数组ai=ai10y将新数组a n排序用标记数组bn记录每个数字的变为数3.5 还原函数void revert(int r,int n);把进行过补位的数字还原到原来的样子void revert(int r,int n) /*把变位后的数字还原成原数字*/ int j,h; for(j=0;jn;j+) h=bj; while(h) r

6、j=rj/10; h-; 流程图:变位后的数组ai新数组ai=ai/10h输出还原后的数组a n使用标记数组bn记录的每个数字的变为数h第三部分 程序代码#includestatic int b20; /*作为标记,记录数字的变位个数*/main() void sort(int x,int n); /*用选择法将正整数按从大到小排列*/ int num(int y); /*求数字的位数*/ void modificate(int z,int n); /*变位函数,在数字后面加“0”*/ void sorts(int x,int y,int n); /*把数组和标记数组同时排序*/ void r

7、evert(int r,int n); /*还原函数*/ int a20; char c; char str200; int *p,i,e,d,f=0,n=0; printf(Please input a few numbers(The amount is less than or equal to 20):n); /*输入若干个数字(n=20)*/ gets(str); for(e=0;(c=stre)!=0;e+) switch(c) case1: d=1;break; case2: d=2;break; case3: d=3;break; case4: d=4;break; case5:

8、 d=5;break; case6: d=6;break; case7: d=7;break; case8: d=8;break; case9: d=9;break; case0: d=0;break; case : n+,f=0,d=0;break; default:printf(Error!nAttention:What you input must be number!n); f=f*10+d; an=f; n=n+1; /*输入数字的个数*/ p=a; sort(p,n); for(i=0;in;i+) bi=num(a0)-num(ai); modificate(a,n); sort

9、s(p,b,n); /*对变位后的所有数字进行排序*/ printf(nSort these modificated numbers:n); for(i=0;in;i+) printf(%d ,ai); printf(n); revert(p,n); printf(nThe new number is: ); /*按要求输出输入的数*/ for(p=a,i=0;in;i+) printf(%d,*p); p+; printf(nn);void sort(int x,int n) /*用选择法将正整数按从大到小排列*/ int i,j,k,t; for(i=0;in-1;i+) k=i; for

10、(j=i+1;j=xk)k=j; if(k!=i) t=xi; xi=xk; xk=t; int num(int y) /*求最大数字的位数*/ int i=0; while(y) y=y/10; i+; return i;void modificate(int z,int n) /*通过在数字后面加一定数目的“0”后,将所有的数字变为最高位*/ int i,k,maxnum; maxnum=num(z0); for(i=0;in;i+) k=maxnum-num(zi); while(k) zi=zi*10; k-; void sorts(int x,int y,int n) /*正整数按从

11、大到小排列*/ int i,j,k,t,w; for(i=0;in-1;i+) k=i; for(j=i+1;j=xk)k=j; if(k!=i) t=xi; xi=xk; xk=t; w=bi; bi=bk; bk=w; void revert(int r,int n) /*把变位后的数字还原成原数字*/ int j,h; for(j=0;jn;j+) h=bj; while(h) rj=rj/10; h-; 第四部分 设计数据和运行结果4.1 运用举例的数据进行验证需要输入一组数字进行输入运行结果4.2 自行设计数据进行验证输入一组数字进行输入运行结果第五部分 所遇问题及解决方案5.1 数

12、字的输入问题当定义的数组(int)为a20时,如果输入的数字个数小于20个,那么剩下的元素将会被赋予初值“0”。如果这样的话,在数组的最后输出时,就会在所输入的数字所组成的最大数字的后面多加一定数量的“0”,这样就得不到预期的效果。比如:12 34 367 4563 235,在输出它们组成的最大的数字中,正确结果为45633673423512,但是输出的结果却是45633673423512000000000000000。这是因为输入数字的个数为5,那么数组的其余15个元素会被赋“0”值,自然会在输出结果后面加上15个“0”。进过思考后,决定以字符(char)的形式输入,再将字符转换为数字。这样

13、做的好处是:(1)可以很快的计算出所输入数字的个数n;(2)通过以上计算,就可以确定所需数组的长度an;(3)这样还避免了不必要的计算时间和存储空间。5.2 switch和break的用法 在把字符转换为数字时,发现“09”的ASC代码值与其本身不相等(char1的值不等于int1),所以选用了switch机构来实现。这是break的使用就必须注意一下,可以说break使用错误会使结果完全不同。正确的使用方法为:switch(c) case1: d=1;break; case2: d=2;break; case3: d=3;break; case4: d=4;break; case5: d=5

14、;break; case6: d=6;break; case7: d=7;break; case8: d=8;break; case9: d=9;break; case0: d=0;break; case : n+,f=0,d=0;break; default:printf(Error!nAttention:What you input must be number!n); 如果将以上语句该为:switch(c) case1: d=1; case2: d=2; case3: d=3; case4: d=4; case5: d=5; case6: d=6; case7: d=7; case8:

15、d=8; case9: d=9; case0: d=0; case : n+,f=0,d=0;break; default:printf(Error!nAttention:What you input must be number!n); 那么,数组an的值都将是1234567890,。所以,break的准确使用是很重要的。5.3数组排序问题在这次程序设计中,特别要注意的是在补位后相等的那些数字,如12 120,34 3400,4500 45等。变位后再排序时,如果处理不当。就会出现12012,340034,450045的不正确的结果。我是这样处理的:第一步:在确定数组元素的之后,将其按从大到

16、小排序,得到新的数组an,这样就把小的数字放在数字后面。 第二步:将变为后的数组按从大到小排序,相等的数字交换位置,在还原为原来的数字。类似12 120,34 3400,4500 45等,会变为12 120,34 3400,45 4500。这样就保证了结果的正确性。5.4 标记数组的使用在还原数字的时候,因为不知道那些数字进行了变位,所以致使程序无法运行。这就需要用一些东西来记录所变位的数字,记录其变位的个数。我选用了标记数组bn,其下标随数组an的改变而改变,这就将解决了还原阶段遇到的问题。5.5 最后结果的输出题目要求的是最后的结果必须是一个数字,所以,我觉得只要结果看上去是一个数就行了,

17、不必将数组在变位一个数。于是,我把最后的数组的输出格式中,取消了它们各自之间的间隔,最后的结果就看上去是一个数字了。具体操作:printf(%d ,*p) 该为printf(%d,*p),这样就完成了正确结果的输出。 以上遇到的问题是我切实遇到的,它们的解决进一步提升了我的C语言知识。可以说,在解决问题的过程中,我学到了很多自己平时不注意的地方。第六部分 总结与感受上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。刚开始基本上都是在看书,把基本知识再熟悉一遍。接着,只是在照着书上写一些程序模块,感觉异常艰难。但是还是有很大的收获,学到了一些

18、东西。而看了两天书之后,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。但是,写了一部分程序后,我们由不得不再次陷入困境。在整个程序的编写过程中。最难的就是补位和还原这两个模块,这也是我要解决的重点问题。开始编写补位和还原时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,我通过上网查资料,了解所需语句的具体功能,完成了补位和还原。这样的话,整个程序基本上全部完成了,就剩下完善工作了。程序中遇到的困难及解决的思路:1. 数字的读取。使用数组时不能按要求排序,只能把

19、数字当作字符串来读取,这样增加了程序的运行效率。 2. 标记函数的使用,必须知道那些数字发生了变位,记录其补位的个数。3. 所需的数字在输出时,它不是一个数字,而还是一个数组,只是改变了它们的输出格式,让他们外表看上去像一个数。4.我深刻了解了switch和break的用法,以及函数的调用方式。通过这次实习,我收获很多,感触也颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几 天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。其次,在几天编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。第四,在几天的实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查。第五,通过几天的实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。第六,通过天的实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。总之,通过天的实习对我自身有了很大的提高。

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

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