首页 > 其他分享 >c语言生成随机数(c语言生成随机数并排序)

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

时间:2022-10-24 15:06:59浏览次数:63  
标签:rand 语言 int srand 生成 种子 随机数 time

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了。

标签:rand,语言,int,srand,生成,种子,随机数,time
From: https://blog.51cto.com/yetaotao/5789768

相关文章

  • 如何在Java语言中使用爬虫ip
    企业客户做大数据抓取都会用到爬虫IP,质量好的爬虫IP可以让爬虫工作事半功倍,如何高效的爬取目标数据就显得尤为重要。影响这样的结果不仅仅是因为爬虫IP问题,还有可能是技术在......
  • c语言转义字符(c语言转义字符是什么意思)
    c语言中转义字符是什么意思转义字符C语言表示字符种特殊形式通常使用转义字符表示ASCII码字符集打印控制字符和特定功能字符用于表示字符常量单撇号(')用于表示字符串常量......
  • c语言简单心形代码(c语言简单心形代码手机版)
    c语言心形中间带字程序#include#includevoidput_ch(charch,inta,intb)//在a个空格后,显示b个字符chinti;for(i=0;iprintf("%c",'');//printf("")......
  • c语言语法(c语言语法保留字)
    c语言有什么基本语法?区别是有的,不过所有的语言都是相通的基本上来说是相同,C语言支持指针操作,能直接对内存进行操作,BASIC不具备这样的功能,一些著名的操作系统也是C开发,因为......
  • c语言输入输出语句(c语言输入输出语句例子)
    C语言中常用语句有哪些呢?C语言中常用语句有哪些呢?以下是C语言中常用语句的精辟总结:跳转语句判断语句循环语句goto语句(“转舵”语句)if语句(“如果”语句)while语句(“当…......
  • c语言注释(c语言注释可以出现在任何位置)
    什么是注释-C语言注中什么是注释?C语言注中什么是注释,注释是什么意思啊!注释是解释编程语言功能的什么是注释-C语言注中什么是注释?C语言注中什么是注释,注释是什么意思啊!注释是......
  • c语言编程代码大全(c语言简单代码大全)
    html代码和c语言等编程语言有什么联系吗?HTML叫做超文本标记语言(标准通用标记语言下的一个应用)或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主......
  • c语言运算符号(c语言运算符号的优先级表)
    符号的运算系统用英语怎么翻?学生是一个语言、符号的运算系统用英语学生是一个语言、符号的运算系统Thestudentistheoperationsystem,alanguagesymbolc语言运算符号......
  • c语言菜鸟(C语言菜鸟工具)
    小弟新学C语言在此问一个C语言的菜鸟问题啊在C语言中能否不用第三?对于数值型变量x与y:x=x+yy=x-yx=x-y我想请教C语言几个超级菜鸟的问题请问C语言的粘贴,复制语句的快捷......
  • c语言换行(c语言换行是什么意思)
    什么是C语言C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I系統的發展,而UNIX作?I系統(是......