真随机c语言
‘壹’ c语言中能否产生真正的随机数,如果可以的话,语句是什么谢谢!
这是数学问题了。
可以理解的是,计算机作为通用图灵机,只能储存有限个状态,在稳定运行的情况下,对于确定的输入,输出是确定的,无法实现“真正”的随机性。
但是,日常情况下,需要随机数时,可以用计算机实现。理由是计算机储存的状态是一个不确定的大的整数,利用某种伪随机数算法可以使输入和输出的关联性被隐藏。这时候,尽管随机数不是“真正”的,但是对于使用者来说,和“真正”的随机数看上去并没有什么区别。
C语言库函数提供伪随机数算法封装的库函数srand()/rand(),随机性并不强。只要能自己表达出硬件无关(例如要求用量子计算机实现的就不算)的随机性足够强的算法,C语言都可以实现。至于需要多少随机性,是否实用,就不是设计者能够完全决定的了。
====
[原创回答团]
‘贰’ 如何制作随机数 C语言……
首先使用srand(unsigned
int)
函数
设置种子,然后使用rand()返回一个
随机数
。
使用这两个函数时需要包含头文件
#include <stdlib.h>
1、在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX
是stdlib.h
中定义的一个
整数
,它与系统有关;
2、因为rand()函数是按指定的
顺序
来产生整数,因此每次执行上面的
语句
都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数;
3、通常通过为随机数
生成器
提供一个新的
随机种子
来达到使
程序
在每次执行时都能生成一个新
序列
的随机值的效果。函数
srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器;
示例代码:
#include <time.h> //用到了time函数
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, number;
srand((unsigned int) time(NULL)); //用时间做种,每次产生随机数不一样
for (i=0; i<10; i++)//产生10个随机数
{
number = rand() % 12 + 1;//产生1-13的随机数
printf("%d\n", number);
}
return 0;
}
‘叁’ c语言中如何生成1个0到1的随机数
C语言中生成1个0到1的随机数可以执行语句:float b=rand()/(RAND_MAX+1.0);
解析:
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。rand()函数没有输入参数,直接通过表达式rand()来引用;
用函数rand取得的随机数除以(RAND_MAX+1.0),即可确保得到的结果在0到1之间。ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。
(3)真随机c语言扩展阅读:
相关说明:
1、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机。
2、为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
3、随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
‘肆’ 怎样让c语言中的随机函数真正随机
一般就是采用设置种子的方式 实现真随机
种子往往是由当前时间
比如
srand(time(NULL));
计算机语言中,很难做到真正的随机。
‘伍’ C语言哪个函数才是真正意义上的随机听说rand()和srand()都是经过某些复杂的运算得到的结
计算机没有真正的随机
‘陆’ c语言,如何产生随机数
1、第一步,先定义int一个数组和int一个指针变量。