1 产生随机数的函数为:rand()
2 所在的库函数的头文件为#include<stdlib.h>
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<stdio.h> #include<stdlib.h> #include<time.h> int main() { int i; 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<stdio.h> #include<stdlib.h> #include<time.h> double get_num(int max,double min){ return rand()*1.0/RAND_MAX*max+min; } int main(){ FILE *f; f=fopen("data.txt","w"); char pid[11]; int i,j,row; double score,price; srand((unsigned)time(NULL)); row=100; for (i=0;i<row;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]='