参考资料:C语言函数库
1、rand()
定义:
int rand(void);
返回值:返回一个伪随机数,该数的范围是:[0,RAND_MAX)
2、srand()
定义:
void srand(unsigned int
seed);
返回值:该函数是随机数发生器的初始化函数;如果使用相同的种子给rand用,那么rand()会产生相同的伪随机数。常用的用法如下:
(1) srand((unsigned)time(&t));(2) srand((unsigned)time(NULL));这两个都是用当前时间去初始化种子;
(3) srand((int)getpid());使用程序的PID来作种子,那么在这个程序运行时种子固定那个。
3、实战经验
(1)使用math.h中的函数floor时报如下错误,经查是没有指定链接库。使用gcc -o randint randint.c -lm即可
相关讨论:点击打开链接
(2)采用下面这个例子,生成随机数,如果个数多了,偶尔会有重复的值
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUMBER_MAX 100
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
num[i] = rand()%900 + 100;
fprintf(rand_num_file,"%d
",num[i]);
}
return 0;
}
(3)Makefile的学习刻不容缓,十一之后来了主攻《git权威指南》和《shell编程学习指南》
(4)按照网上的一种解法,实现randint和bigrand:用rand实现bigrand和randint
仍然会有重复的数值,那么我们怎么解决这个问题呢?我们要的是100~999之间的任意100个随机数,要求不能重复!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define NUMBER_MAX 100
int randint(int l, int u);
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
//num[i] = rand()%900 + 100;//生成[100,999)之间的随机数
num[i] = randint(100,1000);
fprintf(rand_num_file,"%d
",num[i]);
}
return 0;
}
//实现randint(l,u),返回[l,u]范围内的一个随机整数
int randint(int l,int u)
{
int temp;
temp = floor(l + (1.0*rand()/RAND_MAX)*(u - l + 1 ));
return temp;
}
补上:
今天看到用java语言生成随机数,有这么一个想法,也能满足我们的要求:生成[n,m]之间的k个不重复的随机数。参见:点击打开链接