重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言函数名rand()
创新互联建站是一家从事企业网站建设、做网站、成都网站建设、行业门户网站建设、网页设计制作的专业网站制作公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点成百上千家。
简介
功 能::伪随机数发生器 所属库:stdlib.h
用 法: 需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每次执行代码都可以产生不同的随机数。
函数原型:int rand(void); 相关函数:srand、time、GetTickCount
程序例
1: #include "stdio.h"
#include "stdlib.h"
int main(void) {
int i;
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i10; i++)
printf("%d\n", rand() % 100);
return 0; }
例1程序在每次运行时都会生成相同的十个伪随机数,如要每次生成的随机数不同应结合srand函数和time函数。
///////////////////
int i,a;
for(i=0;i3;i++)
{
a=rand()%9;
printf("%d",a);
}
对已经获取到的随机数做标记,如果已经获取到过,那么则放弃该随机数,并继续获取。
直到获取到所有随机数为止。
参考代码如下:
#include stdio.h
#include stdlib.h
#include time.h
int main()
{
int a[10];//存储获取到的随机数。
int f[10] = {0};//存储是否获取到过。
int n = 0; //计数器。
srand(time(NULL));//设置随机数种子。
while(n10)
{
int m = rand()%10; //获取一个0~9的随机数。
if(f[m]) continue;//该数之前已经获取到过。
a[n++] = m;//将该数存入数组。
f[m] = 1;//标记该数已经获取过。
}
for(n = 0; n 10; n++)//打印结果。
printf("%d,",a[n]);
return 0;
}
刚调试了下,弄不明白的是,为什么SZ[10]明明不存在却永远是产生的r对应输出的数。。。
费解呀。但好像用9来说应该会更规范一些。
最后都沉底了。
。。。。又研究了20分钟,终于弄懂了。。。实际上应该是9更标准一些,虽然10不会溢出。。。rang()%(10-i)第一个从0-9里选,然后选过的消失。。。最后一个为9
第二次从0-8里选,选过的消失。。。最后2个为9,以后永远都选不上第8和第九。无论9出没出现过,以此类推。最终全部为九,其余消失。
如果为10的话,其实也影响不了,因为最后几个数永远都不会取到、
采纳了吧。。。。。。
额,其实最标准的应该把那个地方改成9-i,把没选的数字往前推,但是已经出现的过的就不必推了。。。