大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
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
}
============================
LZ我真的佩服你,都已经给你写到这个份上了,
产生0~1的很简单嘛:
float y;
y=(MyRand()%100)/100.00;//这不是产生了0~1的随机数吗?
rand函数会返回一个 [0, RAND_MAX] 间的随机整数,RAND_MAX至少为32767。
如下代码,生成一个随机整数数组
#include stdio.h
#include stdlib.h
#include time.h
#include conio.h
#define ARR_LEN 255 /* 数组长度上限 */
#define elemType int /* 元素类型 */
/* 生成n项min~max范围的随机数并存入数组randArr */
void randomArray (elemType randArr[], int n, elemType min, elemType max) {
int i;
srand ((unsigned)time(NULL)); /* 用时间做种,每次产生随机数不一样 */
for (i=0; in; i++)
randArr[i] = rand() % (max-min+1)+min; /* 产生min~max的随机数 */
}
/*打印数组*/
/* elemType arr[]: 打印目标数组; int len: 元素个数 */
void printArray (elemType arr[], int len) {
int i;
for (i=0; ilen; i++)
printf ("%d\t", arr[i]);
putchar ('\n');
}
int main (void) {
elemType arr[ARR_LEN];
randomArray (arr, 10, 1, 50); /* 随机生成10项1~50的数组 */
printArray (arr, 10);
getch (); /*屏幕暂留*/
return 0;
}
是的,头文件stdlib.h里包含了srand和rand函数。如果没有调用srand,那么rand将产生相同的随机数“序列”——就是说如果第一次循环调用rand产生的随机数序列是88,2,33,55……的话,第二次启动循环调用rand产生的随机数序列仍然是88,2,33,55……产生这一问题的根本原因是伪随机序列发生器的初始状态没有发生变化造成的。srand函数的功能就是来改变伪随机序列发生器的初始状态。srand向伪随机序列发生器的初始状态寄存器写入不同的值(状态字),就能使rand函数产生不同的序列,就解决了“序列重复”的问题。显然,人为安排状态字是不现实的,因为安排了就变不了了。所以用NULL来调用time函数获致系统时钟值转换成无符号整数数作为srand的参数,这样每调用一次srand都会写入不同的初始状态字(因为时钟每时每刻都是变化的),就达到目的了。
那就算了吧!我不知道与哪个长得像,这里没有一个像的,也没有一个真正讲出要用srand的原因。我写的时候谁的都没有参考,别说是复制。如果可以,把认为复制的答案弄出来我看看。