随机函数1
当我们要实现几个不同的随机数时可以用rand()函数,但这种实现不是绝对,只是尽可能都不同。rand()函数包含在sdlib.h这个头文件中。
下面给个实例,求随机产生10个不同的数?
#include <stdio.h>
#include <stdlib.h>
void main()
{
for(int i=0; i<10; i++)
{
printf("%d ", rand());
}
}
随机函数2
或许我们想实现的随机数是有范围的,我们就可以用(rand()%(b-a))+a,这里的区间取值范围是[a,b),结果值是包含a不包含b。如果a为0可以简写为rand()%b
下面给个实例,求随机产生10个在区间[10,99)的整数?
#include <stdio.h>
#include <stdlib.h>
void main()
{
for(int i=0; i<10; i++)
{
printf("%d ", (rand()%(99-10))+10);
}
}
随机函数3
我们也可以通过宏定义的方式来实现
下面给个实例,求随机产生10个在区间[0,10)的整数?
#include <stdio.h>
#include <stdlib.h>
#define random(x) (rand()%x)
void main()
{
for(int i=0; i<10; i++)
{
printf("%d ",random(10));
}
}
这里总感觉只能实现以0为下限的区间,其实我们也可以定义复杂一点的
下面给个实例,求求随机产生10个在区间[10,99)的整数?
#include <stdio.h>
#include <stdlib.h>
#define random(a,b) (rand()%(b-a)+a)
void main()
{
for(int i=0; i<10; i++)
{
printf("%d ",random(10,20));
}
}
只不过稍微做了一些变化,这里就不再多介绍宏的定义了
前面有三个随机函数,当我们发现每次运行那个程序随机产生的结果都跟上次的一样,那我们就得用srand()设置种子来产生随机数,在调用rand ()函数之前都得设置好种子,还有注意的是srand()函数一般不放在循环中。
srand()函数的设置可以有多种形式:
srand((unsigned int)time(NULL));
srand((unsigned int)time(0));
srand((int)time(NULL));
srand(((int)time(NULL))*10);
我们目前只要知道为了避免下一次运行程序时不会产生相同的结果,我们得先设置种子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define random(a,b) (rand()%(b-a)+a)
void main()
{
srand((int)time(0));
for(int i=0; i<10; i++)
{
printf("%d ",random(10,20));
}
}