1 产生随机数的函数为:rand()
2 所在的库函数的头文件为#include
3 rand() ,它返回一个[seed, RAND_MAX(0x7fff))间的随机整数,RAND_MAX=32767
4 问题来了,如何产生一个指定范围里的随机数呢
(0,1):rand()/(float)(RAND_MAX)
(4,7):rand()/(float)(RAND_MAX)*4+3
5 每次调用rand()的时候产生的随机数都是死的,结果不会因为多次运行而不同
rand()在产生随机数时,会默认调用srand(1),即种子永远是1,区间都是:[1,32767]
6 那么问题来了,如何改变呢?
就是使用另外一个配合使用的函数:srand(),该函数来提供不同的种子
s:seed rand-----srand(变化的值)----时间值函数----time(0);
7 示例代码如下:
#include#include#include
intmain()
{inti;
srand((unsigned)time(0));
printf("%d",RAND_MAX);for(i=0;i<10;i++){
printf("%lf",rand()/(float)(RAND_MAX)*4+3);
printf("%lf",rand()/(float)(RAND_MAX));
}
system("pause");return 0;
}
8 两次运行产生的结果:
32767
5.681234 0.548845
6.095187 0.419202
4.266640 0.239814
6.094089 0.313181
5.484573 0.369121
4.006989 0.297861
4.425214 0.254189
6.400861 0.165288
4.976623 0.434645
3.333750 0.471908
-------------------------------
32767
5.688803 0.781152
3.528092 0.371929
4.189611 0.516678
5.312937 0.615864
3.780419 0.804254
3.663839 0.323405
3.772607 0.848323
5.871914 0.218482
3.176519 0.118198
3.579730 0.112278
9 应用示例:
1 需要产生随机的三个属性值:评分,价格,产品ID;
2 评分,价格给予指定的区间,产品ID为10个A-Z组成的字母;
代码如下:
#include#include#include
double get_num(int max,doublemin){return rand()*1.0/RAND_MAX*max+min;
}intmain(){
FILE*f;
f=fopen("data.txt","w");char pid[11];inti,j,row;doublescore,price;
srand((unsigned)time(NULL));
row=100;for (i=0;i
score= get_num(9,1.0);
price= get_num(99,1.0);for (j=0;j<10;j++)
pid[j]= 'Z'-(int)get_num(25,1.0);
pid[j]='