1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言生成随机数(c语言生成随机数并排序)

c语言生成随机数(c语言生成随机数并排序)

时间:2024-02-11 13:15:03

相关推荐

c语言生成随机数(c语言生成随机数并排序)

vc环境下c语言怎么生成随机数能给个0-100之间的程序最好了…

r = ( (double)rand() / ((double)(RAND_MAX) (double)(1)) );

请问如何用C语言写随机数产生器?给个代码谢谢!

一个可移植的rand 和srand 的实现方法

ststic long next= 1;

int rand(void ) //RAND_MAX= 32767

next= next* 1103515245+ 12345;

return (int) (next/ 65536)% 32768;

void srand(int seed)

next= seed;

C语言中怎样生成随机数?

C语言生成

为rand。

rand(void);

stdlib.h

获取一个非负随机

注意事项:

rand是

,由一个种子计算得来。

如果种子相同,每次启动

,获取到的

是固定的。

可以通过srand设置当前时间作为种子,使随机效果更好。

srand(time(NULL));

要获取[m,n]范围的随机数,可以使用代码

rand()%(n-m+1)+m例子如下

如果我们想得到一个

0-60的随机数那么可以写成

这样就OK了,简单;

i=rand()%60;

i=rand()%60;

srand((unsigned)time(

)),否则得到的随机数就是一个固定数

2:srand()

里的值必须是动态变化的:

当然最好有个统一的标注如下;

就可以了,省事:其实可以不用写srand()

,只用rand()就可以了,rand()根据种子而产生随机数

1,提供每次获得随机数的基数而已在VC中设计到随机数有两个函数

srand()

rand()

srand()

的作用是是一个种子在vc中设计到随机数有两个函数 srand() and rand() srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数 注意 1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数 2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下 如果我们想得到一个 0-60的随机数那么可以写成 int i; i=rand()%60; 就可以了。 当然最好有个统一的标注如下: int i; srand((unsigned)time( null )); i=rand()%60; 这样就ok了。在VC中设计到随机数有两个函数

srand() and rand()

srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数

1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数

2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下

如果我们想得到一个 0-60的随机数那么可以写成

int i;

i=rand()%60;

就可以了。

当然最好有个统一的标注如下:

int i;

srand((unsigned)time( NULL ));

i=rand()%60;

这样就OK了。利用时间再附加一些算法,可以达到效果

rand()的结果每次一样,不好用RANDOM()函数

在文件里

此函数产生的是0-1之间的随机数

C语言中获得随机数的方法

C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。

(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。

例如:#include

#include

void main()

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

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

}(2) 如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:例如:随机生成10个0~100的数:

#include

#include

#define random(x) (rand()%x)

void main()

for(int x=0;x<10;x++)

printf("%d\n",random(100));

} (3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。srand()函数定义 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值来当做seed

如果你用time(0)的话,要加入头文件#include例如:

#include

#include

#include

#define random(x) (rand()%x)

void main()

{srand((int)time(0));

for(int x=0;x<10;x++)

printf("%d\n",random(100));

}这样两次运行的结果就会不一样了!!问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。

专家解答:

之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。

问题2: 我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列:

#include

#include

#include

#include

void main()

{

for(int i=0;i<100000;i++)

{

srand( (unsigned)time( NULL ) );

cout<

}

}

专家解答:

你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外:

srand( (unsigned)time( NULL ) );

for(int i=0;i<100000;i++)

{

//相关语句

}可以使用库函数rand()。

rand声明于stdlib.h,其原型为

int rand(void);

功能为返回一个随机整型值。在C语言中,该值是一个正数值。

在需要限定获取到的随机数范围时,如范围要求为[m,n] m

rand()%(n-m+1)+m

的形式进行获取。原理为:

%为取余计算,当%k时,结果是[0,k-1]之间的数值;

于是rand()%(n-m+1) ∈ [0, n-m];

所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。

有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。

下面讲一讲在c语言里所提供的随机数发生器的用法。现在的c编译器都提供了一个基于ansi标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。用随机数函数要区分编程环境。TC和VC(VC代表win32编译器)是不同的。TC下用以下两个函数初始化随机数产生器void randomize(void)产生随机数(max表示 产生从0~max-1的随机数)

int random(int max)例子:int main(){ int rand; randomize(); rand=random(10)+1; /*产生1~10的随机数*/}vc下也有两个函数 srand(unsigned long seed) 用于初始化随机数,参数为随机数种子,一般使用当前时间作为随机数种子。 unsigned long rand(void)返回一个随机数,范围可用取余运算控制。例子:#include int main(){ int a; srand(time(0));//time(0)以秒为单位。 a=rand()%10+1;//产生1~10的随机数}在VC中设计到随机数有两个函数

srand() and rand()

srand() 的作用是是一个种子,提供每次获得随机数的而已,rand()根据种子而产生随机数

1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数

2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下

如果我们想得到一个 0-60的随机数那么可以写成

int i;

i=rand()%60;

就可以了。

当然最好有个统一的标注如下:

int i;

srand((unsigned)time( NULL ));

i=rand()%60;

这样就OK了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。