文曲星上玩过的最简单的游戏猜数字!代码: /*本代码是:猜数字游戏(可多局玩)的源代码!*/ #include /*下面的rand()函数包含于头文件stdlib.h中*/ #include #include main() { int a=0,b=0; struct tm *newtime; long ltime; while(1) { printf("Hello, My friend,if you want to close this game,please input 'z'!\nIf you want to play this game,please input a char ,it isn't 'z'!\n"); if(getchar()=='z') { break; } else { time(<ime); newtime=gmtime(<ime); /*printf("%d",newtime->tm_sec);*/ /*上面的printf语句是为了输出当前系统时间中的秒数。*/ a=rand()%100+rand()%(newtime->tm_sec); printf("Please guess the number(please input a interger number):\n"); scanf("%d",&b); while(1) { if(a>b) { printf("Your number is low!Please input again:\n"); scanf("%d",&b); } else if(a {
printf("Your number is high!Please input again:\n");
scanf("%d",&b); } else
if(a==b) {
printf("OK!You are right!\n"); break; } }
getchar();
/*接受最后这个数,即正确数字输入后的回车符!*/ } } }
我第一次做的时候不是这样的,我当时仅仅用了rand()%100,这样以来程序虽然可以运行,但是太没意思了,因为每次猜的数字都一样,虽然第一次肯能要多次才能猜对,但是只要猜对后,下次猜时肯定还是这个数,只要记住这个数,除了第一次,以后每次猜时一次肯定能猜对。
这是因为rand()函数是个伪随机函数,即用这个函数产生的数都不是绝对的随机数,虽然现在我们没有办法产生绝对的随机数,但是我们有办法,产生一些改善的伪随机数,我当时就在想别人以前肯定也遇到过这类问题,网上肯定有解决办法,但是我还是想自己先动动脑子,如果实在做不出来,再去google或baidu吧!
最后,我还是想出了自己的方法,由于随机数的特性是没有规律变化的,rand()函数只是实现了一次没有规律的数,但是没有变化。我当时在想计算机中哪种东西是变化的呢?最后我想到了系统时间。于是我的想法是在rand()%100的基础上,在与(rand()%(当前系统时间的秒数))结合,这样就会产生相对效果好点的随机数了!具体实现见上面的代码吧!
本文来源:https://www.wddqw.com/doc/59319a1b3c1ec5da50e2708c.html