`
javatoyou
  • 浏览: 1068942 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C语言中产生随机数

 
阅读更多

问:

C语言中产生随机数的函数是什么?

C语言中产生随机数的函数是什么?(好象有两个)以及这两个函数的头文件是什么?

问题补充:rand和srand有什么区别没?

答:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i;
srand((unsigned)time(NULL));
i = rand() % 100;
}
这样产生的随机数就是0-99之间的,
这二个函数的工作过程如下:
1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

------------------------------------------------------------------------------------------------

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int i=0;
float n;
int n1;
while(i<1)
{
n=rand();
if(n>0&&n<10.0)
i++;
}
n1=(int) n;
------------------------------------------------------------------------------------------------
调用rand()函数需要的头文件是 <stdlib.h>

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

srand( (unsigned)time( NULL ) );

for( i = 0; i < 10;i++ )//产生10个随机数
printf( " %6d/n", rand() );
}
------------------------------------------------------------------------------------------------
算法2:线性同余法
1)将种子设为X0,
2)用一个算法X(n+1)=(a*X(n)+b) mod c产生X(n+1)
一般将c取得很大,可产生0到c-1之间的伪随机数
该算法的一个缺点是会出现循环。
给个C的程序
unsigned int seed = 0; //seed 为种子,要设为全局变量
void mysrand(int i) //初始化种子
{
seed = i;
}

int myrand() //产生0--32767之间的随机数
{
seed = (1000*seed+2008) % 32768;
return seed;
}

调用实例
#include <time.h>
main()
{
int a;
mysrand(time(0));
a = myrand();
return 0;
}
------------------------------------------------------------------------------------------------
下面关于一个另问题的解答:
C语言库函数中的rand()的用法??
#include <stdlib.h>
#include <stdio.h>
#include<conio.h>

int main(void)
{
int i;

printf("Ten random numbers from 0 to 99/n/n");
for(i=0; i<10; i++)
printf("%d/n", rand()%100);
getch();
return 0;
}
为什么每次运行的结果都是一样的??关了重启结果还是一样!!
这结果哪像是随机啊?!!
求高手帮忙解释一下这个库函数的用法?如果能解释一下上面结果不随机问题最好.谢谢!
答:
函数rand所产生的随机数实际上是伪随机数,即反复调用函数rand所产生的一系列数似乎是随机的,但每次执行程序所产生的序列则是重复的。要产生真正的随机数序列,必须在每一次运行前为rand函数提供不同的种子,这是由srand函数提供的。
所以加上srand(time(NULL))就可以产生真正的随机数了。

#include <stdlib.h>
#include <stdio.h>
#include<conio.h>
#include <time.h>

int main(void)
{
int i;
srand(time(NULL));

printf("Ten random numbers from 0 to 99/n/n");
for(i=0; i<10; i++)
printf("%d/n", rand()%100);
getch();
return 0;
}
------------------------------------------------------------------------------------------------
在C51下的随机数生成
 /*--------------------------------------------
*描述: 在Windowsserver2003,vs.net2003下调试通过
*
*作者:e.Studio·zhzkl
*参考:rfc4122
*-------------------------------------------
*/

#i nclude
<stdio.h>
#i nclude
<stdlib.h>
#i nclude
<conio.h>

#defineA3

intAdvancedLinearCongrutial(intx,inta,intb,intc,intm,intmax);


intmain(intargc,char*
argv[])
{
char*nums=argv[1];//取得参数

charmynums[10];//预定义10位长度的字符数组,单片机为8位应该不会超过这个范围了
intres=0,pos=0,length=0;

//
将字符流转换为Int
//
while(nums[pos]!='/0'
)
{
length
=length+1
;
pos
=pos+1
;
}

pos
=0;
length
=length-1
;

while(nums[pos]!='/0'
)
{
mynums[length
-pos]=
nums[pos];
pos
++
;
}


pos
=0;
while(nums[pos]!='/0'
)
{
intm=1
;
for(intk=0;k<pos;k++
)
{
m
=m*10
;
}


res
=res+(mynums[pos]-48)*m;
pos
=pos+1
;
}


//定义随机种子
//
srand(res);
intx=rand(),a=2,b=3,c=5,m=65536
;

//改进的线性同余算法

inti=AdvancedLinearCongrutial(x,a,b,c,65536,rand()%100);
printf(
"i=%d"
,i);
printf(
"/tres=%d"
,res);
return
i;
}


//改进的线性同余算法
intAdvancedLinearCongrutial(intx,inta,intb,intc,intm,intmax)
{
for(inti=0;i<max;i++
)
{
a
=
A;
for(intj=0;j<i;j++
)
{
a
*=
A;
}

x
=(a*x+(a-1)*c/b)%m;
}


returnx;
}
分享到:
评论

相关推荐

    C语言如何产生随机数[借鉴].pdf

    在C语言中,产生随机数的函数是rand()和srand(),这两个函数被声明在头文件stdlib.h中。下面我们将详细探讨C语言中如何产生随机数。 首先,需要包含头文件stdlib.h,以便使用rand()和srand()函数。rand()函数返回一...

    C语言产生随机数详解

    C语言产生随机数详解 本文档详细叙述了srand和rand函数的使用方法和注意事项。在C语言中,rand函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,以某个...

    C语言实现产生随机数的四则运算小程序

    "C语言实现产生随机数的四则运算小程序" 在本课程设计中,我们将使用 C 语言实现一个产生随机数的四则运算小程序。该程序将具备以下功能: 1. 实现一个加减乘除运算的小型系统,进行整数的加、减、乘、除运算。 2....

    使用C语言产生正态分布的随机数的源代码

    在C语言中生成正态分布的随机数是一项常见的任务,特别是在模拟、统计分析以及各种科学计算中。正态分布,也称为高斯分布,是一种连续概率分布,具有钟形曲线的特点,广泛存在于自然界和工程领域。这个压缩包提供的...

    C语言产生随机数C语言产生随机数.doc

    C 语言产生随机数 C 语言中的随机数生成是通过 rand() 函数和 srand() 函数实现的。rand() 函数可以生成一个伪随机数,但这不是真正的随机数,而是一个根据种子值计算出来的一系数。srand() 函数用于设置随机数的...

    用c语言产生随机数

    在C语言中,生成随机数是编程中常见的需求,尽管计算机生成的随机数实际上是伪随机数,因为它们是通过算法产生的,而非真正的不可预测的随机过程。在C语言中,我们可以利用标准库提供的rand()函数来生成伪随机数,而...

    C语言中怎样产生随机数

    ### C语言中如何生成随机数 #### 一、概述 在C语言中生成随机数是一项基本但非常重要的技能,尤其在模拟、游戏开发以及其他需要随机性的应用中。C语言提供了两个核心函数:`rand()` 和 `srand()` 来帮助我们生成...

    C语言产生随机数

    C语言产生随机数 C语言中产生随机数可以使用rand()函数,但这不是真正的随机数,而是一个伪随机数。伪随机数是根据一个种子生成的,种子可以是任意一个数值。C语言中提供了srand()函数来设置种子。srand()函数的...

    C语言线性同余法产生随机数.rar_C语言线性同余法产生随机数_seed

    总结来说,"C语言线性同余法产生随机数"是通过设置特定的线性同余方程参数,结合C语言编程,实现一个高效的伪随机数生成器。`readme.docx` 文件可能提供了更多关于如何使用这些示例或函数的说明。理解并掌握这种...

    用c语言产生高斯随机数,瑞利,泊松随机数。

    在C语言中,可以使用`stdlib.h`库中的`rand()`函数生成0到 RAND_MAX 之间的均匀随机数,然后通过某种转换方法(如Box-Muller变换)将其转换为高斯分布。 2. **瑞利分布**,在无线通信和信号处理中特别重要,它描述...

    C语言笔记关于随机数的笔记

    在C语言中,随机数是程序设计中非常重要的一个元素,尤其在模拟、游戏开发、数据分析等领域中。本文将深入探讨C语言中的随机数生成及其应用。 首先,我们需要理解C语言如何生成随机数。C语言提供了`rand()`函数来...

    c语言产生随机数.pdf

    ### C语言产生随机数的方法与实践 #### 一、引言 在计算机编程中,随机数的生成是一项非常重要的技术,广泛应用于各种场景,如密码学、模拟仿真、游戏开发等。C语言作为一门基础且强大的编程语言,提供了多种方法来...

    c语言随机数组求最大值

    c语言学习资料,数据结构简单练习题,产生随机数并求亲自的最大值

    C语言C++中怎样产生随机数.pdf

    "C语言C++中产生随机数的方法和应用" C语言和C++是一种非常流行的编程语言,在各种应用程序中广泛使用。产生随机数是C语言和C++中的一种非常重要的功能,用于模拟随机事件、生成随机数队列、进行模拟试验等。下面...

    用c语言产生随机数.doc

    ### 用C语言产生随机数 #### 概述 在C语言编程中,生成随机数是一项常见的需求,尤其是在游戏开发、模拟仿真等场景下尤为重要。本文将详细介绍如何使用C语言中的`rand()`函数以及配套的`srand()`函数来生成伪随机...

    C语言产生随机数的代码

    在C语言中,`rand()` 函数用于生成伪随机数序列,而 `srand()` 函数则用于设置随机数生成器的种子值。这两个函数通常结合使用来生成一系列的随机数。 - **`rand()`**: 此函数返回一个介于0到`RAND_MAX`之间的整数。...

    C语言- 浅谈C语言编程中生成随机数

    ### C语言中生成随机数详解 #### 一、引言 在C语言编程中,随机数的生成是一项非常实用的功能,特别是在模拟实验、游戏开发、密码学等领域有着广泛的应用。本文将详细介绍如何在C语言中生成随机数,包括基本概念、...

    C语言学习中随机数的应用-猜数字游戏的实现-vs2022.rar

    使用C语言中的分支及循环结构,及rand、srand、time函数实现了随机数的生成,进而实现猜数字游戏。 通过该文件,玩家可以通过输入数字1或0决定是否开始玩游戏,进入游戏后,根据所猜测的数值与游戏内产生的随机数...

Global site tag (gtag.js) - Google Analytics