文档库 最新最全的文档下载
当前位置:文档库 › C语言随机函数

C语言随机函数

C语言随机函数
C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令.

# include “stdio.h”

# include “stdlib.h”

# include “time.h” /*需引用的头文件*/

srand((unsigned)time(NULL)); /*随机种子*/

n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/

int rand(void)

函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。

void srand( unsigned int seed )

改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。

一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节

主要是对rand()函数的使用//#include

原型int rand(void);

例如:void myrand(int imax)

{

assert(imax>0);

int num = rand();

if(num<=imax)

{

return num;

}

else

{

return (num%imax);

}

}

功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义.

像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法.

srand()函数:

原型: void srand(unsigned seed)

功能: 产生随机数的起始发生数据,和rand函数配合使用

头文件: stdlib.h time.h

例:

#include

#include

#include

int main(void)

{

int i;

time_t t;

srand((unsigned) time(&t));

printf("Ten random numbers from 0 to 99\n\n");

for (i=0; i<10; i++)

printf("%d\n", rand()%100);

return 0;

}

运行时你会发现,的确产生随机了.所以,只要在每次调用rand()函数之前调用srand()函数就可以了.当然,可以看到,刚刚这个例子中我们用到了time.h函数. 因为srand()播下随机种子的时候.用到了int

time(time_t t).但这样似乎有点复杂,下面还有更简洁的函数. randomize()函数:

原型: int randomize(void)

功能: 通过time函数来得到一个随机数

头文件: stdlib.h time.h

该函数就相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h。

如果你要取得两个数之前的随机数值,除了对文章开头的例子作适当的修改外.还可以像如下编写程序:

return rand()%(second-first+1)+first;

以上所说的每次都随机.并不能排除相同的情况再一次出现.比如在输出的100个随机数中.有可能有一个数要出现多次.这就需要重新加上一些限制条件来解决.当然,也有许多编译器的库实现了这样的功能.但为了让程序适用于多种平台.用rand()自己实现出来的函数比较适用.至于各种平台上对应的随机函数.也是通过对它进行封装的.

以上都只对产生整数形式的作了讨论.文章开始就说了.我们产生的是0到RAND_MAX之间的整数.那我们如果想产生随机小数又如何做呢.这里我想出了一些办法.也许还有更好的方法.也希望大家给出建义.

float k = (float) rand()/RAND_MAX; //这就产生了一个0-1之间的随机小数

那如果我们要产生0-10之间的随机小数.那只要k*10就可以了.以此类推

若要产生x y之间的随机小数.那么只要float k = (float) rand()/RAND_MAX 然后再执行

k*(y-x) + x; 就可以了.

方法有很多种.并且都是很简单的编程实现.要看大家有没有想到了.

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

用C语言产生随机数

用c语言产生随机数 在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 #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); } 根据上面的程序可以很容易得到0~1之间的随机数:

C语言中的22个数学函数

C语言的22个数学函数 在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include 或#include "math.h",这里的<>跟""分别表示:前者表示系统到存放C库函数头文件所在的目录寻找需要包含的文件,这是标准方式;后者表示系统先在拥护当前目录中寻找要包含的文件,若找不到,再按前者方式查找。为节省时间,在使用自己编写的文件时使用的是“”,自己编写的文件一般是在当前目录下。 22个数学函数中只有abs的数据类型是:”整型“,”int“。 log10、logE中的10与E是在log的左下角位置。其余求弧度函数需要看清楚是不是指数。排列方式如下:函数名:函数功能参数介绍,返回值,说明。函数原型。 1.abs: 求整型x的绝对值,返回计算结果。 int abs(int x); 2.acos:计算COS-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleacos(double x); 3.asin: 计算SIN-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleasin(double x); 4.atan: 计算TAN-1(x)的值,返回计算结果。double atan(double x); 5.atan2: 计算TAN-1/(x/y)的值,返回计算结果。 double atan2(double x,double y); 6.cos: 计算COS(x)的值,返回计算结果,x的单位为弧度。 double cos(double x); 7.cosh: 计算x的双曲余弦COSH(x)的值,返回计算结果。 double cosh(double x); 8.exp: 求e x的值,返回计算结果。 double exp(double x); 9.fabs: 求x的绝对值,返回计算结果。 duoblefabs(fouble x); 10.floor: 求出不大于x的最大整数,返回该整数的双精度实数。 double floor(double x); 11.fmod: 求整除x/y的余数,返回该余数的双精度。 doublefmod(double x,double y);

C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令. # include “stdio.h” # include “stdlib.h” # include “time.h” /*需引用的头文件*/ srand((unsigned)time(NULL)); /*随机种子*/ n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ int rand(void) 函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 void srand( unsigned int seed ) 改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节 主要是对rand()函数的使用//#include 原型int rand(void); 例如:void myrand(int imax) { assert(imax>0); int num = rand(); if(num<=imax) { return num; } else { return (num%imax); }

} 功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义. 像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法. srand()函数: 原型: void srand(unsigned seed) 功能: 产生随机数的起始发生数据,和rand函数配合使用 头文件: stdlib.h time.h 例: #include #include #include int main(void) { int i; time_t t;

C语言生成随机函数

程序有一个参数,表示生成的密码的长度 运行的时候要加上,比如./password 8 我写的很简单,参数没做检查,你应该自己去完善一下。 #include #include #include void generate(int len,char* buffer) { /*产生密码用的字符串*/ static const char string[]= "0123456789abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 0; for(; i < len; i++) { buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/ } } int main(int argc, char* argv[]) { int len = atoi(argv[1]); /*指定生成的密码长度*/ srand(time(0)); /*设定随机数种子*/ char *buffer = (char*)malloc(len + 1); /*分配内存*/ generate(len,buffer); /*生成密码*/ puts(buffer); /*输出到屏幕*/ FILE* fp = fopen("pass","w"); /*打开输出文件*/ if(fp == NULL) return -1; fwrite(buffer, sizeof(char), len, fp); /*写文件*/ fclose(fp); /*关闭文件*/ free(buffer); /*释放动态分配的内存*/ return 0; /*程序结束*/ } 自己可以写一个函数。 IT生活系列群: 50337593 IT-live(软件开发) 计算机软件技术群,技术是相通的,大家取长补短,共同进步吧!--软件不仅仅是一种思想。他是一门艺术 30633141 IT-live(网站建设)

C语言产生随机整数的方法

产生随机整数的方法: #include #include …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; /*rand()在C语言中称为随机函数,它的功能是产生一个不超过RAND_MAX的随机非负整数,RAND_MAX是符号常量,代表整型最大值,即随机数的最大值 32767。limit变量表示随机数的范围。例如产生一个100以内的随机数rand()*100.00/ RAND_MAX */ b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 计算机产生随机数,后一个是根据前一个产生的,这样第一个随机数称为种子。如果没有种子,计算机按默认计算,每次产生的数都一样。种子通常是利用系统时钟设定的:srand((unsigned long)time(0)) 产生随机整数的模板: #include "time.h" #include “stdlib.h” …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; //limit表示随机数范围0~limit。

b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 【例题】两个随机数的加减法 #include "time.h" #include "stdlib.h" #include "stdio.h" int main() { int a,b,z,limit; /* limit随机数的最大值——范围*/ printf("please input the limit\n"); scanf("%d",&limit); while(1) { srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; printf("%d+%d=",a,b); scanf("%d",&z); if((a+b)==z) printf("good!\n"); else printf("error!\n"); } while(1); return 0; }

实用C语言中有关随机函数的使用详解

c语言中有关随机函数的使用详解 在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 #inl #include #include #include main( ) { int i; srand( (unsigned)time( NULL ) ); for( i = 0; i 10;i++ )

用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()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

C语言库函数手册

C语言库函数手册 分类函数,所在函数库为 ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9') 返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值, 否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母 ('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母 ('A'-'Z') 数学函数,所在函数库为 math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数e^x的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回ln(x)的值 double log10(double x) 返回log10(x)的值 double pow(double x,double y) 返回x^y的值 double pow10(int p) 返回10^p的值 double sqrt(double x) 返回x的正平方根 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度

用c语言产生随机数

用c语言产生随机数 c learning 2007-11-29 21:51:21 阅读4755 评论7 字号:大中小 在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之间的随机数程序:

C语言随机数产生原理即用法

产生随机数原理: 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为种子的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。种子的值通常是用快速计数寄存器或移位寄存器来生成的。 下面讲一讲在C语言里所提供的随机数发生器的用法。现在编译器都提供了一个基于标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1.首先给srand()提供一个种子,它是一个unsigned int类型,其取 值范围从0~65535; 2.然后调用rand(),它会根据提供给srand()的种子值返回一个随机数0 到32767之间) 3.根据需要多次调用rand(),从而不间断地得到新的随机数; 4.无论什么时候,都可以给srand()提供一个新的种子,从而进一步随机 化”rad() 的输出结果。 这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。 rand()通常的使用方法: rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的10个整数,可以表达为: int N=rand()%11; 这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样: int N=1+rand()%11; 总结来说,可以表示为: a+rand()%n 其中的a是起始值,n是整数的范围。 若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十 分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到

c语言随机函数的使用

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空 声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。 其中,random()和randomize()函数的使用的方法分别与rand()和srand()函数的使用方法对应类似。 下面就开始讲rand()和srand()函数的使用: 首先,让我们从宏观的角度,来理解它们的使用机理: 1、这两个函数都在头文件是stdlib.h中 2、rand()函数和srand()函数必须配套使用。 其中,rand()是用来产生随机数的发生器,而srand()函数是用来给rand()函数提供变量(或者称种子)。 因为“种瓜得瓜,种豆得豆”,如果你不通过srand()函数来提供不同的种子,那么rand()函数产生的数就只能是固定的瓜或者豆(其实,如果你的程序中没有使用srand()函数,rand()在产生随机数时,会默认调用srand(1),即种子永远是1)。达不到我们预期的要求。所以 rand()函数总是和srand()函数一起使用。 接下来,让我们看看具体如何调用rand()和srand()函数 1、srand()函数 在VC++中,它的声明是:void srand(unsigned seed) 是一个无返回值、单无符型形参的函数。 根据上面的分析,我们知道产生随机数的一个关键是:在程序每次运行中,让这个seed(种子)都不一样,即是一个可变常数。通常情况下,我们会使用时间来作为seed,即令srand((unsigned)time(NULL))。其中,time()函数在头文件time.h中。time()的声明是:long time(long *locatime),它返回的是一个以秒为单位的当地时间,例如:2010年4月19日17:57:02,则它的返回值是:N(年)*365*24*60*60(这是年部分,还要加月、日、时、分、秒才完整。因为不知道是初始年是哪一年,所以用N表示)我现在这个时刻运行的结果是:1271673894(挺大的一个整数) 2.、rand()函数 在VC++中,它的声明是:int rand(void) ,它返回一个[seed, RAND_MAX (0x7fff))间的随机整数,其中,RAND_MAX是个定值,我用VC++查看是:32767。

C语言题库-函数

C语言函数练习题 一、选择题 1.在函数的说明和定义时若没有指出函数的类型,则( A ) A: 系统自动地认为函数的类型为整型。 B: 系统自动地认为函数的类型为字符型。 C: 系统自动地认为函数的类型为实型。 D: 编译时会出错。 2.下面正确的函数定义形式是( A ) A: double fun(int x,int y) { } B: double fun(int x;int y) { } C: double fun(int x,int y); D: double fun(int x,y); 3. 若调用一个函数,且此函数中没有return 语句,则正确的说法是:该函数( D ) A: 没有返回值; B: 返回若干个系统默认值; C: 能返回一个用户所希望的函数值; D: 返回一个不确定的值 4. C语言允许函数返回值类型缺省定义,此时该函数隐含的返回值类型是( B ) A: float 型 B: int 型 C: long 型 D: double 型 5. C语言规定,函数返回值的类型是由( D )(二级题) A: return 语句中的表达式类型所决定; B: 调用该函数时的主调函数类型所决定; C: 调用该函数时系统临时决定; D: 在定义该函数时所指定的函数类型所决定 6.下面函数调用语句含有实参的个数为( B ) func((exp1,exp2),(exp3,exp4,exp5)); A: 1 B: 2 C: 5 D: 4 7. 以下错误的描述是( D ) 函数的调用可以 A: 出现在执行语句中;

B: 出现在一个表达式中; C: 为一个函数的实参; D: 作为一个函数的形参; 8.若函数的形参为一维数组,则下列说法中正确的是( B ) A: 调用函数时的对应实参必为数组名。 B: 形参数组可以不指定大小。 C: 形参数组的元素个数必须等于实参数组的元素个数。 D: 形参数组的元素个数必须多于实参数组的元素个数。 9.下面叙述中正确的是( C ) A: 对于用户自己定义的函数,在使用前必须加以说明。 B: 说明函数时必须明确其参数类型和返回类型。 C: 函数可以返回一个值,也可以什么值也不返回。 D: 空函数不完成任何操作,所以在程序设计中没有用处。 10.若使用一维数组名作函数参数,则以下正确的说法是( C ) A: 必须在主调用函数中说明此数组的大小; B: 实参数组类型与形参数组类型可以匹配;必须 C: 在被调函数中,不需要考虑形参数组的大小; D: 实参数组名与形参数组名必须一致 11. 下面说法中不正确的是( B ) 在C 语言中 A: 实参可以是常量、变量或表达式; B: 形参可以是常量、变量或表达式; C: 函数的参数是函数间传递数据的一种手段; D: 实参个数应与对应的形参个数相等,类型匹配 12. 以下叙述中正确的是( B ) A 全局变量的作用域一定比局部变量的作用域范围大 B 静态(static)类别变量的生存期贯穿于整个程序的运行期间 C 函数的形参都属于全局变量 D 未在定义语句中赋初值的auto变量(不确定)和static变量(为0)的初值都是随机值 13.下面程序的输出结果是( B ) #include void num() { extern int x,y; int a=15,b=10; x=a-b;

C语言math函数库手册范本

函数名称: abs 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数返回: 计算结果 参数说明: 所属文件: , 使用例: #include #include int main() { int number=-1234; printf("number: %d absolute value: %d",number,abs(number)); return 0; } 函数名称: fabs 函数原型: double fabs(double x); 函数功能: 求x的绝对值. 函数返回: 计算结果 参数说明: 所属文件: 使用例: #include #include int main() { float number=-1234.0; printf("number: %f absolute value: %f",number,fabs(number)); return 0; } 函数名称: cabs 函数原型: double cabs(struct complex znum) 函数功能: 求复数的绝对值 函数返回: 复数的绝对值 参数说明: zuum为用结构struct complex表示的复数,定义如下:struct complex{ double m; double n; } 所属文件:

#include #include int main() { struct complex z; double val; z.x=2.0; z.y=1.0; val=cabs(z); printf("The absolute value of %.2lfi %.2lfj is %.2lf",z.x,z.y,val); return 0; } 函数名称: ceil 函数原型: double ceil(double num) 函数功能: 得到不小于num的最小整数 函数返回: 用双精度表示的最小整数 参数说明: num-实数 所属文件: #include #include int main() { double number=123.54; double down,up; down=floor(number); up=ceil(number); printf("original number %5.2lf",number); printf("number rounded down %5.2lf",down); printf("number rounded up %5.2lf",up); return 0; } 函数名称: sin 函数原型: double sin(double x); 函数功能: 计算sinx的值.正弦函数 函数返回: 计算结果 参数说明: 单位为弧度 所属文件: 使用例: #include

C语言生成随机数的方法及注意事项

C语言生成随机数 1.可能用到的函数:randomize(),srand(),rand(),random(). ◎void randomize(void) 通过time函数来得到一个随机数,此数将成为起始发生数据 (stdlib.h | time.h) ◎void srand(unsigned number) 该函数和rand函数配合使用,产生随机数的起始发生数据 ◎int rand(void) 产生一个随机数(0到0x7fff 之间) (stdlib.h) ◎int random(int num) 得到一个在0和参数num之间的随机数 (stdlib.h) 2.随机数生成的原理 “计算机产生的随机数一般都只是一个周期很长的数列,不是真的随机数。也就是说,随机数一般是伪随机数,每个随机数都是由随机种子开始的一个已定的数列(周期很长)。一般地,为了随机数更真一点,随机种子在系统中通常是参照系统时钟生成的。” 以上引用了别人的话。有几个关键点:一是所谓的随机数是伪随机数,二『伪随机数生成器返回的每一个值完全由它返回的前一个值所决定数(最终,该种子决定了一切)。所以产生随机数,首先要解决随机数种子的问题。下面举几个可能遇到的问题: 一、两次运行产生的随机数列相同 …… for(i=0;i<10;i++) printf("%d",rand()); …… 上面的程序本意是每次运行后,屏幕输出10个随机数。但如果紧紧只是这段代码,那后果就是,无论运行多少次,每次产生的这10个随机数都和前一次生成的10个数一一对应。 可做如下修改: …… randomize(); for(i=0;i<10;i++) printf("%d",rand()); …… 如此,每次运行产生的随机数列就是不同的啦。因为randomize()是以系统时间为随机数种子的。如果两次运行时间间隔大于一秒,那么种子就会不同。 下面这个例子的结果我想大家应该猜得到 …… for(i=0;i<10;i++) { printf("%d",rand()); randomize(); } …… 这将产生10个完全相同的数,下次运行又会产生另外10个相同的数。

C语言程序随机数的产生方法

随机数的产生方法 瑞达路水瓶酒窝哥由于老师布置了产生随机数的作业,要求编一个程序能够产生0000到9999总共10000个不重复的随机数,可能大家在网上看了一些方法,都用了函数Rand与Brand的结合,可以产生10000个随机数,并且大家都是用公式(rand() % (b-a))+ a来约束产生随机数的范围和个数的,但是大家几乎忘了不能重复的要求,所以产生的随机数是有很多重复的,不能满足要求,鉴于这种情况,我把大众化随机数的产生方法以及自己的一点改进措施与大家共享如下: 一、可重复随机数的产生方法: 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。但是有一个函数srand()可以初始化这个种子函数。 1、函数rand()用法: 说明:rand是包含在头文件stdlib.h中,跟stdio.h是一个道理,具体运用方法如下: 代码: # include "stdio.h" # include "stdlib.h" int main()

{int k; k=rand(); printf("%d",k); return 0; } 程序在编译软件中的运行截图过程如下: 当运行这个程序时,我们会发现,产生的随机数永远都是一个值,例如我的电脑是41,这是因为计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意:小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。

用c语言产生随机数的方法

用c语言产生随机数的方法 在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 #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); }

相关文档