‘壹’ c语言中获得随机数的方法
问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。
专家解答:
之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。
问题2: 我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
专家解答:
你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
//相关语句
}
‘贰’ C语言随机数序列编程:用C语言程序编写。生成随机数序列。范围:1-15要求生成1-15的随机序列,中间无重复
//希望您你有帮助!
#include <stdio.h>
#include <time.h>
int main()
{
int a[15] = {0};
int count = 0;
srand(time(NULL));
while ( 1 )
{
int r = rand()%15 + 1;
if (++a[r] > 1)
continue;
else
{
printf("%02d ", r);
if (count++ > 15)
break;
}
}
return 0;
}
运行结果:07 08 06 14 11 13 01 04 09 02 10 05 12 03
‘叁’ c语言里面用rand()函数产生无重复的0-15的随机数
键盘输入不同数字,得不同的0-15无重复
随机数
#include
#include
main()
{
int
seed=1000;
//
种子
int
i;
int
m[16]
;
int
nn=0;
double
r;
printf("enter
seed
please\n");
scanf("%d",&seed);
srand(seed);
//
初始化随机数生成器
for
(i=0;i<=15;i++)
m[i]
=
0;
while
(nn
<
10
){
//
r
是双精度浮点随机数,范围0.0到1.0
r
=
(
(double)rand()
/
((double)(RAND_MAX)+(double)(1))
);
i
=(int)
(
r
*
15.0);
if
(m[i]
==
0)
{
m[i]
=
1;
nn
=
nn
+
1;
printf("%d
",i);
};
}
}
‘肆’ c语言用随机函数产生15个100以内的随机整数
定义个数组
srand((unsigned)time(NULL));
for(i=0;i<15;i++)
a[i]=rand()%100;
然后输出数组。
完成~!
‘伍’ C语言怎么样产生随机数,比如从15到135之间的整数啊,最好旁边有讲解,这块我们没有学
#include <stdlib.h>
#include <stdio.h>
#include <time.h> //先要加入 time 头文件 随机数根据计算机内部时间来获取
随机数
void main( void )
{int i;
srand( (unsigned)time( NULL ) ); //获取随机数
k=rand()%131+5; //因为是5-135 所以随机数要模131个 即取0-130之内的
数然后 +5就是 5-135了 rand()是个随机值
printf(
‘陆’ 51单片机用c语言怎么让i得到一个0-15的随机数
启动计数器0,将TL0的值%16即可得到!
static unsigned char random=5; //再次运行时值已改变。
char i;
TMOD= 0x20;
TR0 =1;
for(i=0;i<random; i++)
;//运行一段时间
ramdom *= TH0;
random %=16;
‘柒’ C语言怎样产生一定范围的随机数
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,可以称它为种子。
为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。
C语言产生一定范围的随机数的源代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //随机产生10个数。
{
printf("%d ", rand());
}
return 0;
}
(7)c语言如何获得15个随机数扩展阅读
1、如果要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数。
2、在对rand()的前三次调用中,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此,只有再次给srand()提供一个随机的“种子”值,才能再次得到一个随机数。
‘捌’ 怎么用C语言生成随机数
假设要生成的随机数是大于等于20且小于等于100的整数
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
voidmain(){inta,b,x;
a=20;b=100;
srand((unsignedint)time(NULL));//用当前时间生成一个随机数种子
x=rand()%(b-a+1)+a;
printf("得到一个随机数:%d ",x);
}
‘玖’ C语言中获得随机数的方法是什么
可以使用库函数rand()。
rand声明于stdlib.h,其原型为
int rand(void);
功能为返回一个随机整型值。在C语言中,该值是一个正数值。
在需要限定获取到的随机数范围时,如范围要求为[m,n] m<n且m,n均为整数,可以用
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]。