用c语言产生随机数rand()
C语言使用rand()函数随机生成数,让用户猜数字游戏简单小程序。使用if,dowhile

10
11 printf("我已经想好一个1-100之间的数了\n");
12 do{
13 printf("请你猜这个数:\n");
14 scanf("%d",&a);
15 count++;
16 if(a>number){
17
printf("你输入的数大了\n");
18 }else if(a<number){
19
printf("你数入的数小了\n");
20 }
21
22 }while(a!=number);
23 printf("太棒了,你用了%d次就猜对了答案 \n",count);
24 return 0;
25 }
运行结果
请求出错错误代码400请尝试刷新页面重试
C语言使用 rand()函数随机生成数,让用户猜数字游戏简单小 程序。使用 if, dowhile
使用随机数生成一个 1-100的随机数,让用户输入数字去猜测此数并且记录猜测的次 数。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 int main(){
6 srand(time(0));
//先设置种子
7 int number=rand()%100+1; //然后产生随机数 +1是1-100之间的数 如果用户输入的是0则加1
8 int count=0;
//定义计数变量
9 int a=0;
rand()的用法

rand()函数是产生随机数的一个随机函数。
C语言里还有srand()函数等。
详述rand()(1)使用该函数首先应在开头包含头文件stdlib.h #include<stdlib.h>(2)在标准的C库中函数rand()可以生成0~RAND_MAX 之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。
(3)rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:printf("Random numbers are: %i %i\n",rand(),rand());(4)因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。
(5)为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。
函数srand()(来自stdlib.h)可以为随机数生成器播散种子。
只要种子不同rand()函数就会产生不同的随机数序列。
srand()称为随机数生成器的初始化器。
例子文件名:rand_srand.c /* This program generates and prints ten random integers between 1 and RAND_MAX*/#include <stdio.h>#include <stdlib.h>int main(){ unsigned int seed; /*申明初始化器的种子,注意是usigned int 型的*/int k;printf("Enter a positive integer seed value: \n"); scanf("%u",&seed);srand(seed);printf("Random Numbers are:\n");for(k = 1; k <= 10; k++){ printf("%i",rand()); printf("\n"); } return 0; }当提供的种子相同时,随机数序列也是相同的。
用c语言产生随机数rand()

用c语言产生随机数rand()在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。
可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。
rand()会返回一随机数值,范围在0至RAND_MAX 间。
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
一般用for语句来设置种子的个数。
具体见下面的例子。
一如何产生不可预见的随机序列呢利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。
在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。
它们就是rand()和srand()函数。
这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3) 根据需要多次调用rand(),从而不间断地得到新的随机数;4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
c语言rand的用法

c语言rand的用法C语言中rand用于产生随机数,与他相关的是srand ,下面将详细说明c语言rand的用法。
rand(产生随机数)表头文件: #include定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
rand ()产生的是假随机数字,每次执行时是相同的。
若要不同,以不同的值来初始化它.初始化的函数就是srand()。
返回值:返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。
若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。
rand的用法范例1:/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考srand()*/#includemain(){int i,j;for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d ",j);}}执行:9 4 8 8 10 2 4 8 3 69 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数srand(设置随机数种子)表头文件:#include定义函数:void srand (unsigned int seed);函数说明:srand()用来设置rand()产生随机数时的随机数种子。
参数seed 必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。
随机函数c语言用法

随机函数c语言用法
随机函数在C语言中是非常常用的,它可以用来生成随机数,为程序添加一些随机性和变化性。
在C语言中,我们可以使用stdlib.h头文件中的rand()函数来生成随机数。
下面是一个简单的例子:
c.
#include <stdio.h>。
#include <stdlib.h>。
#include <time.h>。
int main() {。
int i;
// 使用当前时间作为随机数种子。
srand((unsigned)time(NULL));
// 生成10个随机数并打印出来。
for(i = 0; i < 10; i++) {。
printf("%d\n", rand());
}。
return 0;
}。
在这个例子中,我们首先包含了stdio.h、stdlib.h和time.h 这三个头文件,然后在main函数中使用srand()函数设置了随机数种子,这样可以确保每次运行程序时生成的随机数是不同的。
接着使用for循环生成了10个随机数并打印出来。
除了生成简单的随机数外,我们还可以使用rand()函数生成特定范围内的随机数,例如生成1到100之间的随机数可以使用rand() % 100 + 1。
总之,随机函数在C语言中的用法非常灵活,可以为程序添加一些随机性,使得程序更加有趣和具有挑战性。
C语言中的随机数

C语言中的随机数作者:王璐随机数,顾名思义就是随机产生的、无规则的数。
在编程中,有时我们不想手动从键盘输入数据,而想让电脑自动产生一些数据供我们使用(例如生成100个两位数),就要用到随机数。
随机数的生成方法很简单,在C语言中,我们通过调用随机函数rand()来产生随机数。
rand函数是C语言的标准库函数,和我们常用的输入输出函数(scanf和printf)一样可以在程序中直接调用。
rand函数的用法如下:首先在程序开头预处理命令部分加上#include<stdlib.h>,其中<stdlib.h>是C中的标准库头文件,我们在用rand函数时需要用到这个头文件 [注1]。
它的作用是为了对rand()函数进行引用性声明,以便在下面的程序中使用它。
这和我们在用到scanf和printf函数时需要在程序开头写上#include<stdio.h>(标准输入/输出头文件)是一样的。
随机函数rand使用的格式为:A=rand()%x+y;这条语句的意思是,自动产生一个以y为下限,以x+y为上限的随机数,并把值赋给A。
即A为y到x+y之间的随机数。
例如,有语句:int a;a=rand()%89+10;执行该语句后,a即可得到一个10~100之间的整数赋值。
注意区别于:a=rand()%100;执行这条语句,a可能取值的上限同样为100,但下限为0,a可以取到10以下的数。
相当于:a=rand()%100+0;下面我们来看一个完整的例子:[eg.1]输入10个两位数,并把他们的和打印出来。
1.从键盘输入数据:#include<stdio.h>void main(){int a[10],sum=0;int i;printf("请输入10个2位数:\n");for(i=0;i<10;i++){scanf("%d",&a[i]);sum=sum+a[i];}printf("\n");printf("这10个数的和是:%d \n",sum);}运行结果:2.使用随机数:#include<stdio.h>#include<stdlib.h>void main(){int a[10],sum=0;int i;printf("系统自动生成随机数:\n");for(i=0;i<10;i++){a[i]=rand()%89+10; /* a从10-99之间取值,即a是两位数 */printf("%d ",a[i]);sum=sum+a[i];}printf("\n");printf("这10个两位数的和是:%d \n",sum);}运行结果:经运行比较后可以感觉到,使用随机数可以简化程序运行,方便人的工作。
产生随机数(rand()函数和srand()函数)

产⽣随机数(rand()函数和srand()函数) 有时候,我们需要随机产⽣⼀个在某范围的数,C/C++提供了⼀个库函数rand()来产⽣随机数。
函数原型:int rand(void);功能:返回⼀个[0,RAND_MAX]间的随机整数。
其中RAND_MAX是定义在stdlib.h头⽂件中的⼀个常量。
注意: rand()函数包含在头⽂件stdlib.h中,要使⽤它必须⽤#include<stdlib.h>引⼊该头⽂件; 计算机实际上并没有真正做到产⽣⼀个随机数,只是在⼀串预先定义好的数据中选择⼀个返回给函数。
那么,如何得到⼀个在a到b的整数呢?有两种⽅法:法⼀:公式:a+rand()%(b-a+1)⽰例:n=1000+rand()%9000;//随机⽣成⼀个四位数返回给n。
a+rand()%(b-a+1),四位数即1000-9999,此时a=1000,b=9999法⼆:公式:a+rand()*(b-a+1)/RAND_MAX⽰例:n=1000+rand()*9000/RAND_MAX;//随机⽣成⼀个四位数返回给n。
a+rand()*(b-a+1)/RAND_MAX,四位数即1000-9999,此时a=1000,b=9999 当要产⽣多个随机数时,rand()会重复调⽤产⽣相同的数字序列。
如果想要每次执⾏产⽣的随机数不同,就需要进⾏随机初始化。
因此引⼊srand()函数。
函数原型:void srand(unsigned seed);功能:根据随机数⽣成器的种⼦seed的值初始化随机数。
我们当然可以⽤数组和循环来设置种⼦的值,那么有没有什么我们可以直接利⽤的⼀直变化的值呢? 当然有,时间就是。
我们可以借助time.h头⽂件中的time(NULL)返回机器当前的时间。
函数原型:time_t time(time_t *t)功能:返回⾃纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间。
用C语言产生随机数1

} 而产生 1~100 之间的随机数可以这样写:
#include <stdlib.h> #include <stdio.h> #include <time.h> main( ) {int i; srand( (unsigned)time( NULL ) );
int a[100]={0}; int i,m; for(i=1; i<=99; ++i)
printf("%4d",a[i] );
srand( (unsigned)time( NULL ) );
or(i=1; i<=99; i++)
{
while(a[m=rand()%100+1]);
a[m] = i;
int i; randomize(); printf("Ten random numbers from 0 to 99\n\n"); for(i=0; i<10; i++)
printf("%d\n", rand() % 100); return 0; } 在《计算机常用算法》中有介绍随机数的生成算法 三 如何产生设定范围内的随机数
for( i = 0; i < 10;i++ ) printf( "%d\n", rand()%100+1);
} 二,三个通用的随机数发生器,推荐用第三个 函数名: rand 功 能: 随机数发生器 用 法: void rand(void);
c语言生成整型随机数算法

c语言生成整型随机数算法随机数在计算机科学和数学中有着广泛的应用。
在很多场景下,我们需要生成随机的整型数来模拟实际情况或进行随机化处理。
C语言是一种被广泛使用的编程语言,它提供了一些生成随机数的函数和算法。
接下来,我们将介绍一种常用的C语言生成整型随机数的算法。
在C语言中,我们可以使用rand()函数来生成随机数。
该函数是C 标准库中的一个伪随机数生成器,它返回一个范围在0到RAND_MAX 之间的整型随机数。
但是,该函数生成的随机数是伪随机数,并非真正的随机数。
为了获得更加随机的结果,我们可以结合其他算法来提高随机性。
一种常见的提高随机性的方法是使用时间作为随机数种子。
在C语言中,我们可以使用time()函数来获取当前的时间,然后将其作为种子传递给srand()函数。
srand()函数会初始化随机数生成器,并根据种子的值进行一系列的计算,从而生成更加随机的数列。
下面是一个生成指定范围内整型随机数的C语言算法示例:```c#include <stdio.h>#include <stdlib.h>#include <time.h>int generateRandomNumber(int min, int max) {srand(time(NULL)); // 使用时间作为种子初始化随机数生成器int randomNumber = rand() % (max - min + 1) + min; // 生成min到max范围内的随机数return randomNumber;}int main() {int min = 1;int max = 100;int randomNumber = generateRandomNumber(min, max);printf("生成的随机数为:%d\n", randomNumber);return 0;}```在上述代码中,我们定义了一个名为generateRandomNumber的函数,该函数接受两个参数min和max,分别表示生成随机数的范围的最小值和最大值。
rand的用法

rand的用法在编程中,rand() 函数是一个常用的随机数生成函数,通常用于生成一系列随机数。
它通常在 C 语言和许多其他编程语言中使用。
本篇文章将详细介绍rand() 函数的用法,包括其基本概念、常见用法和注意事项。
一、基本概念rand() 函数是 C 语言标准库中的一个函数,用于生成一个伪随机数。
这个函数会根据一个种子(seed)值来生成随机数,每次调用 rand() 函数时,都会得到一个新的随机数。
通常,我们使用 time(NULL) 来作为种子值,以确保每次运行程序时生成的随机数序列不同。
二、常见用法1. 生成随机整数rand() 函数可以用于生成指定范围内的随机整数。
例如,可以使用rand() % 100 来生成 0 到 99 之间的随机整数。
2. 生成随机数组可以使用 rand() 函数来生成一个随机数组。
例如,可以定义一个数组,并使用 rand() 函数来填充数组中的元素。
3. 组合随机数rand() 函数可以与其他函数或表达式组合使用,以生成更复杂的随机数序列。
例如,可以使用 rand() % array_size 来生成一个指定范围内的随机索引,然后使用该索引来访问一个数组中的元素。
三、注意事项1. 种子值的使用在使用 rand() 函数时,需要注意种子值的选取。
通常,我们使用time(NULL) 作为种子值,以确保每次运行程序时生成的随机数序列不同。
但是,如果使用固定的种子值,则每次运行程序时生成的随机数序列将是相同的。
因此,建议使用不同的种子值来确保每次运行程序时生成的随机数序列不同。
2. 范围限制rand() 函数生成的随机数范围是 [0, RAND_MAX],这意味着它可以生成非常大的数字。
但是,在实际应用中,我们通常只需要生成指定范围内的随机数。
因此,需要注意不要超出所需的范围限制。
3. 与其他函数的配合使用rand() 函数可以与其他函数或表达式配合使用,以生成更复杂的随机数序列。
C语言中获得随机数的方法(读书笔记:-)

C语言中获得随机数的方法(读书笔记:-)现在C语言编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。
它们就是rand()和srand()函数。
这两个函数的工作过程如下。
C语言中rand()函数可以用来生成随机数,但这不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以摸个递推公式推算出来的一系数。
在程序运行前这个种子就已经定了,除非你破坏了系统。
为了改变这个种子的值C语言提供了srand()函数,其原型为void srand(int a).rand()会返回一个随机数,范围在0—RAND_MAX之间。
RAND_MAX定义在stdlib.h中(其值至少为32767)。
在调用rand()函数前,必须先利用srand()设定好随机数种子,如果为摄随机数种子,rand()在调用时会自动设种子为1.一、如何产生不可预见的随机数序列利用srand((unsigned int) time(NULL))是一种方法,因为每一次运行程序的时间是不同的。
1>首先给srand()提供一个种子,他是一个unsigned int类型其取值范围是0—65535;2>然后调用rand(),他会根据提供给srand()的种子值返回一个随机数(在0—32767之间)。
3>根据需要多次调用rang(),从而不间断的得到随机数。
4>无论什么时候都可以给srand()提供一个新种子,从而进一步随机化rand()的输出结果。
下面是0—32767之间的随机数程序:#include<stdlib.h>#include<stdio.h>#include<time.h> //使用当前时间做种子void main(void){int i;srand((unisgned int)time(NULL)); //初始化随机数for(i=0;i<10;i++)printf("%d\n",rand()); //打印10个随机数}根据上面的程序可以很容易的得到0—1之间的随机数#include<stdlib.h>#include<stdio.h>#include<time.h> //使用当前时间做种子void main(void){int i;srand((unsigned int)time(NULL));for(i=0;i<10;i++)printf("%5.2f\n",rand()/32767.0);}产生1—100之间的随机数#include<stdlib.h>#include<stdio.h>#include<time.h> //使用当前时间做种子void main(void){int i;srand((unsigned int)time(NULL));for(i=0;i<10;i++)printf("%5.2f\n",rand()%100+1);}二、如何产生设定范围内的随机数由于rand()产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从x—y的数呢?从x—y有y-x+1个数,所以要产生从x到y的数可以这样写:k=rand()%(y-x+1)+x;这样就可以产生你想要的任何范围随机数了。
c语言如何产生随机数

C语言如何产生随机数1. 基本函数int rand(void);void srand (unsigned int n);#include <stdlib.h>2. 使用方法rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。
RAND_MAX常量被定义在stdlib.h头文件中。
其值等于32767,或者更大。
srand()函数使用自变量n作为种子,用来初始化随机数产生器。
只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。
因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。
如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。
for (int i=0; i<10; i++){printf("%d ", rand()%10);}每次运行都将输出:1 7 4 0 9 4 8 8 2 4srand(1);for (int i=0; i<10; i++){printf("%d ", rand()%10);}每次运行都将输出:1 7 4 0 9 4 8 8 2 4例2的输出结果与例1是完全一样的。
srand(8);for (int i=0; i<10; i++){printf("%d ", rand()%10);}每次运行都将输出:4 0 1 3 5 3 7 7 1 5该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。
srand((unsigned)time(NULL));for (int i=0; i<10; i++){printf("%d ", rand()%10);}该程序每次运行结果都不一样,因为每次启动程序的时间都不同。
c语言中rand()函数产生随机数

srand和rand()配合使用产生伪随机数序列。
rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。
如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列srand函数是随机数发生器的初始化函数。
原型:void srand(unsigned int seed);#include <stdlib.h>#include <stdio.h>#include <time.h>#define D (24*60*60)#define H (60*60)#define M (60)void main(){int i;int s[10];srand((unsigned)time(NULL));//此函数用于产生随机种子//srand函数是随机数发生器的初始化函数。
原型:voidsrand(unsigned int seed);for(i=0;i<10;i++)s[i]=rand();printf("输出产生的10个随机数如下:\n\n");for(i=0;i<10;i++)printf("第%d个随机数为:%d\n\n",i+1,s[i]);time_t t;time(&t);long time=t%D;int h=time/H;time=time%H;int m=time/M;time=time%M;int f=time;printf("time is %02d:%02d:%02d\n",h,m,f);//得到的结果是国际标准时由于中国处在东8区有8个小时的时差printf("得到的结果是国际标准时由于中国处在东8区有8个小时的时差\n");printf("time is %02d:%02d:%02d\n",h+8,m,f);}程序运行结果:。
c语言rand()随机函数

c语⾔rand()随机函数各种编程语⾔返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的⼀组数值,当序列⾜够长,这组数值近似满⾜均匀分布。
c的标准函数库提供⼀随机数⽣成器rand(定义在stdlib.h),能返回0~RAND_MAX之间均匀分布的伪随机整数(RAND_MAX⾄少为32767,⼀般都默认为32767)。
⽤rand()随机⽣成在[x,y]内的整数int k;k=x+rand()%(y-x+1),k即为所求范围内随机⽣成的数,rand()%a的结果最⼤为a-1.rand( )%20的意思的⽣成20以内的随机数。
例如:#include<stdio.h>#include<stdlib.h>void main(){for(int i=0;i<10;i++)printf("%d\n",rand());}如果我们是第⼀次运⾏,⽽且对其不太清楚,那么它⽣成的基本上算是0-RAND_MAX之间的等概率随机数列了。
但是如果你第⼆次运⾏的时候会发现输出结果仍和第⼀次⼀样。
原来rand()⽣成伪随机数时需要⼀个种⼦(计算伪随机序列的初始数值)才⾏,如果种⼦相同就会得到相同的序列结果(这就是函数的好处T-T)。
这个“优点”被有的软件利⽤于加密和解密。
加密时,可以⽤某个种⼦数⽣成⼀个伪随机序列并对数据进⾏处理;解密时,再利⽤种⼦数⽣成⼀个伪随机序列并对加密数据进⾏还原。
这样,对于不知道种⼦数的⼈要想解密就需要多费些事了。
当然,这种完全相同的序列对于你来说是⾮常糟糕的。
要解决这个问题,需要在每次产⽣随机序列前,先指定不同的种⼦,这样计算出来的随机序列就不会完全相同了。
srand()⽤来设置rand()产⽣随机数时的随机数种⼦。
在调⽤rand()函数产⽣随机数前,必须先利⽤srand()设好随机数种⼦seed, 如果未设随机数种⼦, rand()在调⽤时会⾃动设随机数种⼦为1(有⼈说默认是0,困惑中)。
C语言库函数rand()源代码

【C语言库函数rand()源代码】【本程序在Dev C 4.9.9.2 下编译通过】/*这两个函数是C库中产生随机数的程序。
你需要先使用srand()函数赋随机数种子值。
然后再使用rand()函数来产生随机数。
但是产生随机数的算法较简单,srandom()和random()函数是对这两个函数的改良,用法也很类似。
*/#define RANDOM_MAX 0x7FFFFFFFstatic long my_do_rand(unsigned long *value){/*这个算法保证所产生的值不会超过(2^31 - 1)这里(2^31 - 1)就是 0x7FFFFFFF。
而 0x7FFFFFFF等于127773 * (7^5) 2836,7^5 = 16807。
整个算法是通过:t = (7^5 * t) mod (2^31 - 1)这个公式来计算随机值,并且把这次得到的值得到并且计算,作为下次计算的随机种子值。
*/long quotient, remainder, t;quotient = *value / 127773L;remainder = *value % 127773L;t = 16807L * remainder - 2836L * quotient;if (t <= 0)t = 0x7FFFFFFFL;return ((*value = t) % ((unsigned long)RANDOM_MAX 1)); }static unsigned long next = 1;int my_rand(void){return my_do_rand(&next);}void my_srand(unsigned int seed){next = seed;}#include <time.h>int main(){int i;my_srand((unsigned)(time(NULL))); for(i=0;i<100;i ){if(i % 10 == 0)printf("\n");printf("%d\t",my_rand()%99 1); }system("pause");return 0;}。
随机函数rand()的使用方法——C语言

随机函数rand()的使⽤⽅法——C语⾔原理:引⽤⾃百度百科:所需包含的头⽂件:1 #include <stdlib.h>rand()函数是按指定的顺序来产⽣整数,因此每次执⾏上⾯的语句都打印相同的两个值,所以说C语⾔的随机并不是真正意义上的随机,有时候也叫伪随机数,使⽤ rand() ⽣成随机数之前需要⽤随机发⽣器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中)进⾏伪随机数序列初始化,seed ⼜叫随机种⼦,通俗讲就是,如果每次提供的 seed 是⼀样的话,最后每⼀轮⽣成的⼏个随机值也都是⼀样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常⽤时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头⽂件:#include <time.h>案例分析:1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4int main()5 {6 srand(1);7int i;8for (i = 0; i < 10; i++)9 printf("%d ", rand()%11);10 }以上是⽤伪随机数的代码,运⾏结果:89917551010⽆论运⾏多少次,结果都依然是以上随机数,不会改变,因为每次设置的种⼦seed都是1。
如把seed换成time(NULL),每次就不⼀样了,如下:1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4int main()5 {6 srand(time(NULL));7int i;8for (i = 0; i < 10; i++)9 printf("%d ", rand()%11);10 }运⾏结果:163455981010426424325129这⾥的time(NULL)的结果是⼀个类似于1524655706的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的⽬的,不断⽣成新的随机数。
C语言中rand()函数

C语⾔中rand()函数函数说明 :因为rand() 的内部实现是⽤线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有⼀定的范围⾥可看成是随机的,rand() 会返回⼀随机数值,范围在 0 ⾄ RAND_MAX 间。
在调⽤此 函数产⽣随机数前,必须先利⽤ srand()设置好随机数种⼦,如果未设随机数种⼦,rand()在调⽤时会⾃动设随机数种⼦为 1。
rand()产⽣的是假随机数字,每次执⾏时是相同的。
若要不同,以不同的值来初始化它.初始化的函数就是 srand()。
返回值:返回 0 ⾄ RAND_MAX 之间的随机整数值,RAND_MAX 的范围最少是在 32767 之间(int),即双字节(16位数)。
若⽤unsigned int 双字节是 65535,四字节是 4294967295 的整数范围。
0~RAND_MAX 每个数字被选中的机率是相同的。
1、rand()不需要参数,它会返回⼀个从0到最⼤随机数的任意整数,最⼤随机数的⼤⼩通常是固定的⼀个⼤整数。
2、如果你要产⽣0~99这100个整数中的⼀个随机整数,可以表达为:int num = rand() % 100; 这样,num的值就是⼀个0~99中的⼀个随机数了。
3、如果要产⽣1~100,则是这样:int num = rand() % 100 + 1;4、总结来说,可以表⽰为:int num = rand() % n +a;其中的a是起始值,n-1+a是终⽌值,n是整数的范围。
5、⼀般性:rand() % (b-a+1)+ a ; 就表⽰ a~b 之间的⼀个随机整数。
6、若要产⽣0-1之间的⼩数,则可以先取得0-10的整数,然后均除以10即可得到“随机到⼗分位”的10个随机⼩数。
若要得到“随机到百分位”的随机⼩数,则需要先得到0~100的10个整数,然后均除以100,其它情况依 此类推。
7、通常rand()产⽣的随机数在每次运⾏的时候都是与上⼀次相同的,这样是为了便于程序的调试。
函数rand的用法

函数rand的用法
函数rand是一个随机数生成函数,在C语言中可以使用。
它的用法如下:
1. 需要包含头文件stdlib.h。
2. 调用rand函数可以生成一个[0, RAND_MAX]范围内的随机数。
其中RAND_MAX是rand函数可生成的最大随机数。
3. 调用rand函数时,可以使用srand函数设定一个种子(即随机数生成的起始点),如果不设置种子,则会默认使用当前时间作为种子。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
// 设置种子
srand(1234);
for(i = 0; i < 10; i++) {
// 生成随机数
int random = rand();
printf("%d\n", random);
}
return 0;
}
```
这段代码会生成10个随机数,并将其输出。
需要注意的是,rand函数生成的随机数并不是真正的随机数,而是伪随机数,即它们是通过一定的算法计算得到的。
所以如果需要更为随机的结果,可以使用srand函数设定一个不同的种子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用c语言产生随机数rand()
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。
可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。
rand()会返回一随机数值,范围在0至RAND_MAX 间。
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
一般用for语句来设置种子的个数。
具体见下面的例子。
一如何产生不可预见的随机序列呢
利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。
在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。
它们就是rand()和srand()函数。
这二个函数的工作过程如下:
1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
下面是0~32767之间的随机数程序:
#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( " %d\n", rand() );
}
根据上面的程序可以很容易得到0~1之间的随机数:#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%5.2f\n", rand()/32767.0);
}
而产生1~100之间的随机数可以这样写:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%d\n", rand()%100+1);
}
二,三个通用的随机数发生器,推荐用第三个
函数名: rand
功能: 随机数发生器
用法: void rand(void);
程序例:
#include <stdlib.h>
#include <stdio.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);
return 0;
}
函数名: random
功能: 随机数发生器
用法: int random(int num);
程序例:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* prints a random number in the range 0 to 99 */
int main(void)
{
randomize();
printf("Random number in the 0-99 range: %d\n", random (100));
return 0;
}
函数名: randomize 这个比较好!
功能: 初始化随机数发生器
用法: void randomize(void);
程序例:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
在《计算机常用算法》中有介绍随机数的生成算法
三如何产生设定范围内的随机数
由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
k=rand()%(Y-X+1)+X;
这样,就可以产生你想要的任何范围内的随机数了。
四,产生不重复的随机数
1)#include <stdlib.h>
#include <stdio.h>
#include<stdio.h>
#include <time.h>
swap(int *pm,int *pn) /*必须用指针进行交换*/
{
int temp;
temp=*pm;
*pm=*pn;
*pn=temp;
}
int main(void)
{
int i,a[513];
/*int *pa,*pb;*/
srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/
for(i=1; i<=512; i++){a[i]=i;printf("%4d",a[i]);}
for(i=512; i>=1; i--)
{
/* pa=&a[i]; pb=&a[rand()%i+1];*/
swap(&a[i], &a[rand()%i+1]); /*加一是从一到i的随机,就不会包含0*/
/*不用再定义指针,这样结论是一样的*/
}
printf("\n") ;
for(i=1; i<=64; i++)
printf("%4d",a[i] );
getch(); /*wintc的输出*/
}
2)
#include <stdlib.h>
#include <stdio.h>
#include<stdio.h>
int main(void)
{
int a[100]={0}; int i,m;
for(i=1; i<=99; ++i)
printf("%4d",a[i] );
srand( (unsigned)time( NULL ) ); for(i=1; i<=99; i++)
{
while(a[m=rand()%100+1]);
a[m] = i;
}
for(i=1; i<=99; ++i)
printf("%4d",a[i] ); getch();
}。