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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

设计源程序.docx

1、设计源程序四、设计源程序#include#include#includevoid chuansong(int ar) int i; FILE *fp; if(fp=fopen(d:data.txt,w+)=NULL) printf(Cannot open filen); exit(0); for(i=0;i10;i+) fprintf(fp,%4d,ari); fclose(fp);void sort(int ar,int sz)int i,j,tmp;for(i=0;isz-1;+i) for(j=i+1;jarj) tmp=ari;ari=arj;arj=tmp; /*for(i=0;i1

2、1;i+) printf(%d,ari); */ /此处可以打印出data中的成绩排名情况。 chuansong(ar);duqu(n1)int i,paixu11; FILE *fp; paixu10=n1; if(fp=fopen(d:data.txt,r+)=NULL) printf(Cannot open filen); exit(0); while(!feof(fp) for(i=0;i10;i+) fscanf(fp,%d,&paixui); printf(n); fclose(fp); sort(paixu,11);void main() int i,j,n=0,m=0; int

3、 suiji5; int caice5; int k3;srand(int)time(NULL); /定义rand的随机种子,如果不定义,rand默认种子值是1。 for(i=0;i5;i+) /每次运行时刻产生不同的随机数列。 suijii=rand()%10; do k0=0; k1=0; k2=0; printf(Please enter your 5 guess numbers:n); for(i=0;i5;i+) scanf(%d,&caicei); for(i=0;i5;i+) if(suijii=caicei) k0+; for(i=0;i5;i+) for(j=0;j5;j+)

4、 if(caicej=suijii) k2+; break; k1=(k2-k0); printf(The result is:n) printf(%dY%dNn,k0,k1); printf(The real result is:n); for(i=0;i5;i+) printf(%dn,suijii); /此处用于打印电脑产生的随机数的真实值。 n+; m+; while(m9&(k0!=5) ; if(m9&(k0=5) printf(You are winn); duqu(n); else printf(The game is over);五、结果分析 (1)、先调试主函数, 主函数主

5、要功能是完成电脑产生的随机数与用户输入的5个数进行比较,并给出结果,同时会调用子函数,调试主函数时,先把duqu()子函数屏蔽掉,仅看输出的n值来判定主函数的正误,从而确保主函数是正确的,即如果用户输入超过9次,屏幕显示“The game is over” n值大于9,如果用户在9次机会内猜对的话,输出的n值小于9。(2)、编写duqu() 函数,duqu()的形参值是main()函数传递过来的n值,主要功能读取d盘下的data文档中的十个数,定义大小为11的数组来存放读取的10个数和n的值,在编写duqu()函数时,最好单独编写,至于n的值,先可当成已知值给予,然后调试,看数组中的数是否正确

6、,若不正确,则继续调试,直至正确为止。(3)、编写sort()函数,其编法采用冒泡法对数组中的11个数进行排序,各位同学对此已经很熟悉,在此不作多讲。(4)、编写chuansong()函数,此函数通俗点说可以看成是duqu()函数的逆过程,即把排序好的11个数前10位送到data文档中保存起来。(5)、在确保以上四个模块正确的前提下,把这四个模块“缝合”到一起,并调试观察结果。(6)、例如某用户在9次内没有猜对其5个数的过程如下:例如用户在第二次就猜对了六、调试过程中的问题 1、在主函数中首先遇到的问题是产生随机数问题,rand() ,srand()的使用,我们先运行两个程序:(1)#incl

7、ude#includemain()int i,j;for(i=0;i10;i+)j=rand()%10;printf(%d ,j);第一次运行:7 5 2 4 0 8 1 8 5 2 第二次运行:7 5 2 4 0 8 1 8 5 2 我们会发现两次运行的结果会一样,其实是每次程序运行的结果都会一样。(2)#include#include#includemain()int i,j;srand(int)time(NULL);for(i=0;i10;i+)j=rand()%10;printf(%d ,j); 第一次运行:1 9 9 9 9 2 8 6 3 9 第二次运行:3 5 1 8 2 8 3

8、 1 4 6 函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。我们知道rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推

9、算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand(unsign)(time(NULL)是一种方法,因为每一次运行程序的时间是不同的,对了,你知道time

10、() 函数的功能是返回从1970/01/01到现在的秒数的吧,可能这个起始时间不正确,用户可以自己查一下对不对吧,C还提供了另一个更方便的函数, randomize()原形是void randomize(),功能是用来始初rand() 的种子的初始值,而且该值是不确定的,它相当于srand(unsign)(time(NULL) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h罢了。七、软件设计总结首先说明本次实验我选择的是“五位数猜谜游戏”这道题,有人说这道题比较容易,老师打分的时候起点会低,还是不选的好,但是最终我还是选择了这道所谓容易的题

11、目,理由是:第一,题目简单容易掌控,更会让自己去动脑筋,以积极的心态去写程序,怎样去完美一个程序,而不是抱着一颗以尽早完成任务的心态去完成任务,网上拷,背地抄,以老师的评分为最终宗旨;如果那样我个人觉得倒不如选择一道难度适合自己,让自己稍微轻松的题目,你有没有付出,有没有努力,老师也是从学生时代走过来的,老师会心中有数。第二,也许是最主要的理由吧,当我看到这道题的时候,给我的第一感觉就是很多以前学过的知识现在已经似懂非懂了,还有的知识点就是当时老师提了一下,并没有着重去讲解,比如“文件处理”一个章节,在此情况下,自己正好理一下以前的一些基础知识,同时也学习一下“文件处理”一章,以课本为基础,学

12、过的知识为基础,我想自己是可以胜任这道题的,事实也证明了这一点,程序是我自己通过思考一条一条编出来的,调试也是我自己一步一步调过来的,别人说这题简单,我不介意,正确的结果出现在我的眼前,我已经很满足了。至于编程过程中的一些心得,这必须要提到的,最让我自己感到满足的有两点:(1)、就是rand()函数的应用,不说假话,rand()函数的一些知识点是我上网查的,在函数的说明中有一部分是引用别人的,但请放心,程序依然是我自己的了。(2)、是“*Y*N”中N的确定,我个人认为这也是整个程序的一大亮点,刚开始的时候想了3种方法,但最后都被我否定了,并不是出不来结果,而是程序编的比较长、烦,最后通过使用“

13、break”的办法,让程序编的十分简洁,这可是我好不容易才想到的,呵呵,rand()函数前面已经详细介绍过了,在此不作过多讨论,下面就N的确定的函数作一下阐述:for(i=0;i5;i+) for(j=0;j5;j+) if(caicej=suijii) k2+; break; k1=(k2-k0);引用两个for循环“随机数”为比较对象,用户猜测的5个数为被比较对象,首先拿随机数第一个数与用户猜测数逐一比较,只有比较到当两个数相同时k2+,并且break跳出内层的for循环,继续拿“随机数”的第二个数与猜测数逐一比较,同样遇到两个数相同的时候k2才自加加,并且break跳出内层循环,继续外层的循环,这样算的k2再减去位置正确数字也正确的个数,就是位置不正确但数字正确的数字个数了。还有最重要的一点用户必须要知道的,在本程序运行前必须要把此文件夹中名为“data”的文档拷到d盘中,此文档是记录用户猜测随机数的次数(即成绩),初次使用时,文档中的内容已经被初始化为“ 10 10 10 10 10 10 10 10 10 10”,如果不把此文档考到d盘中或者内部没有数等,程序都会报错!最后还是要声明一下本程序全部为本人自己所写,真金不怕火炼,同时也希望老师能给予批评与建议,学生我会由衷感激。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2