c语言随机函数自动赋值,C语言中的随机数问题

C语言函数库中包含了一个产生随机数的函数:int rand( void ); 函数返回的是一个界于0~32767之间的伪随机数,包括0和32767。但是,这里产生的是伪随机数,不是真正意义上的随机数,看下面的程序:

#include "stdlib.h"

#include "stdio.h"

void main( )

{

printf( " %d\n",rand() );

}

运行结果:41

多次运行程序,发现每次运行结果均相同(不同的计算机运行结果可能不同),这说明这种方法产生的随机数并不是一个真正随机的数,而是一个伪随机数。这是因为C语言中,随机数表有很多列,srand函数是根据其参数(unsigned类型)来获得一个种子(seed),根据种子来设置从哪一列开始取随机数。rand无参数,返回一个相应的随机数。种子相同,则从同一列随机数中选取,rand每次选取之后会自动选取下一个随机数。如果srand设置的种子相同,则会从同一列随机数中选取。

那么,如何产生一个真正意义的随机数呢?

问题的关键在于种子的选取。我们的目的是要在不同的时间生成不同的随机数。因此,只要有一个只和时间有关的数,将其传递给srand,就可以达到目的了。这样的函数位于time.h头文件中。函数名即为time。调用time会返回一个和时间有关的整数。

例如,运行下面的程序:

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

void main()

{

int i;    /*将当前时间设置成随机函数的种子,所以每次产生的数都不一样*/

srand( (unsigned)time( NULL ) );   /* 输出10个随机数*/

for( i = 0; i < 10;i++ )

printf( "%d\n", rand() );

}

结果为

20333

21010

16307

24721

8549

4749

2651

20114

5814

30943

再次运行程序,结果为:

20555

31006

18655

22627

21812

9622

17690

17668

14490

6090

每次运行程序得到的随机数均不同,达到了随机数的要求。

容易得知,A=rand()%x+y则表示产生一个x~x+y之间的随机数。

如果要输出1~10的随机数,可写为printf( "%d\n", rand() %10+1);

例如,

int a;

a=rand()%89+10;

执行该语句后,a即可得到一个10~100之间的整数赋值。

到x+y之间的随机数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值