自己用C语言写随机函数 自己用c语言写随机函数怎么写

c语言随机数怎么生成在实际编程中,我们经常需要生成随机数 。在c语言中我们通常使用rand方法生成随机数,在调用rand前需要调用srand初始化随机数种子 。
【自己用C语言写随机函数 自己用c语言写随机函数怎么写】电脑:华为MateBook14
系统:Windows10
软件:notepad++等编辑器、gcc编译器1.0
1、使用rand函数生成随机数,rand随机生成一个位于0 ~ RAND_MAX之间的整数 。如下图中 , 我们直接使用rand方法生成10个随机数 。
2、程序运行后生成了随机数,但直接使用rand的问题在于 , 在下次程序调用时,生成的随机数与上次一致 。所以,rand函数虽然生成随机数,但可以说是一个伪随机 。因为每次调用时,生成数字顺序都是固定的 。
3、为了在每次调用时生成不同的随机数,使用srand函数初始化随机数种子 。只要随机数种子变化了,那么生成的随机数就会改变 。通常,srand使用当前时间作为种子 。
4、但使用时间作为随机数种子是否安全呢?我们目前程序执行的速度都太快了,一秒钟对于计算机来说太漫长了 。我们将生成随机数的操作定义为函数 , 然后调用函数两次,看生成的随机数仍然时一样 。
5、优化函数也比较简单,在使用时间的基础上,我们还加上一个定增序号 。这样能保证就算同一秒钟内多次调用,随机数的种子都是不一样的 。
6、通常,我们需要获取一定范围内的随机数 。所以,在生成随机数之后我们使用模运算获取对应范围内的数据 。如生成0到100内的随机数 。
C语言抽取随机数怎么编写源程序代码以及算法解释如下:
产生1-10随机数程序:
#include iostream
#include time.h
using namespace std;
int main()
{
const int n = 10;//定义随机数个数
int number[n] = { NULL };//定义随机数存储的数组
srand((unsigned)time(NULL));//初始化随机函数
number[0] = rand() % n;//第一个随机数无需比较
coutnumber[0]" ";
for (int i = 1; in; i++)//其余随机数循环产生
{
int j = 0;
number[i] = rand() % n;//产生随机数
while (1)
{
if (number[i] == number[j])//若有相同则继续循环重新安排随机数
{
number[i] = rand() % n;//产生随机数
j = 0;//若遇到相同的就从头遍历
continue;
}
if (j == (i - 1))//若遍历完就跳出
break;
j++;
}
coutnumber[i]" ";
}
coutendl;
return 0;
}
程序运行结果如下:
扩展资料:
利用vector进行随机数输出:
#include iostream
#include vector
#include time.h
using namespace std;
int main()
{
const int n = 10;
int randnum;
vectorint number;
for (int i = 0; in; i++)
{
number.push_back(i + 1);//从尾部添加元素
coutnumber[i]" ";
}
coutendl;
srand((unsigned)time(NULL));
for (int j = 0; jn; j++)//其余随机数循环产生
{
randnum = rand() % (n - j);//rand函数生成的随机数是0-(n-1)
coutnumber.at(randnum)" ";
number.erase(number.begin() + randnum);
}
coutendl;
return 0;
}
C语言中怎样写一个生成随机数的函数rand函数也是调用dos的时钟,进行的伪随机函数.
你也可以使用时钟来模拟随机函数.
可以试用gettime这个函数:
long int MyRand(int x)
{
struct time t1,t2,t3;
gettime(t1);
int y1=t1.ti_hund;//取1/100s作为基数
gettime(t2);
int y2=t2.ti_hund;//取1/100s作为基数
gettime(t3);
int y3=t3.ti_hund;//取1/100s作为基数
return y1*y2*y3;//产生的随机数0~99*99*99

推荐阅读