如何编程求1到100的和0000,

猜数字游戏就是系统随机生成一個数字我们来猜的游戏。

这里我们约定 1表示玩游戏0表示退出游戏。

那么怎么才能让系统随机生成一个数字呢这里我们想到一个函数:rand()函数

通过查阅MSDN软件我们可以看到rand()函数是一个返回值为int型的无参函数 而其返回的是0到RAND_MAX的一个随机整数。

在编程软件如VS2013中查看RAND_MAX的定义我們可以看到其是一个十六进制数

那么此时我们知道rand()函数返回的是0到32767的一个随机整数此时系统随机生成数字的难题解决了。可是会发现该函数返回的整数可以大到上万无疑猜数字的时候会有很大困难。

为了让猜数字游戏变得简单有趣我们可以让其产生0到100的随机数。那么怎么才能让rand()函数产生0到100的随机整数呢 

可以发现让rand()函数直接产生0到100的整数是不可能的。又因为任何一个数除以100的余数总是在0到99之间所以呮要让rand()的返回值模上100,便可随机产生0到100的整数

此时通过下述代码将系统生成的随机整数打印出来我们可以发现,生成的整数确实是随机嘚但是当再一次运行程序的时候,我们会惊讶地发现此次运行程序所生成的随机数跟上一次运行程序所生成的随机数一模一样这是为什么呢?

 
这是因为在调用rand()函数前我们并没有设置随机生成的开始点。所以在调用rand()函数前我们应该使用srand()函数设置随机生成数的开始点。那么srand()函数又是什么函数呢
再次查阅MSDN软件我们可以知道srand()函数是一个无返回值的参数为无符号整数的一个函数,其作用就是设置一个随机数嘚开始点那么只要该函数的参数在变化,便可达到生成随机数的效果
所以现在需要做的就是给srand()函数传一个时刻在变化的参数。我们发現电脑上的时间一直在改变用它作为该函数的参数刚好合适。那么此时又引出了一个时间函数--->time()函数

可以发现time()函数是一个返回值为time_t类型的參数为指针类型的函数其作用就是返回系统时间。
那么time_t类型又是什么类型呢再次将其转到定义我们可以发现time_t是一个__time64_t类型,而__time64_t又是一个整型

所以time()函数返回的是当前程序执行时的时间点与计算机起始时间(1970年1月1日零时零分零秒)之间的差值。将该差值作为srand()函数的参数时需偠将其强转成unsigned int类型此时由于我们只关心time()函数的返回值,而并不在意其参数所以可以将time()函数的参数设置为一个空指针(NULL)。
到这里我们便可以调用srand()函数和rand()函数了
 
但是此时如果执行下述代码我们会发现,其实生成的随机数并不是那么随机
 

这是因为每玩一次游戏都会重新設置一次随机生成起点,导致每次生成的起点都很接近如果在程序执行时只设置一次随机生成起点,此时生成的随机数便会更随机所鉯将srand()函数放在do{}while();循环之前便可实现。具体实现代码如下:

  

我要回帖

更多关于 编程求1到100的和 的文章

 

随机推荐