C语言产生随机数
2015-05-04 21:31
162 查看
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 示例代码如下:
8 两次运行产生的结果:
9 应用示例:
1 需要产生随机的三个属性值:评分,价格,产品ID;
2 评分,价格给予指定的区间,产品ID为10个A-Z组成的字母;
代码如下:
data.txt文件内容如下:
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\n",RAND_MAX); for(i=0;i<10;i++){ printf("%lf ",rand()/(float)(RAND_MAX)*4+3); printf("%lf\n",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]='\0'; fprintf(f,"%s %lf %lf\n",pid,score,price); } system("pause"); return 0; }
data.txt文件内容如下:
OGJLUTLWUJ 7.244545 96.087374 HYIVSCFHBS 8.233894 42.905881 TSGUQIDETM 4.694540 23.085940 NKOULRDQJC 9.165563 78.744926 SUVVIQGBCR 9.577837 56.248085 GCGPSYSOVU 8.250923 88.999329 JHVYPYDGKI 9.578112 1.410901 NRCPNVBQXG 3.369823 44.229225 IMYLXFWDAL 4.325114 74.596637 BDMRLFCLIO 5.596271 86.002167 STBSRLWUEI 5.921476 92.597736 WWUWKAGBRK 4.287210 94.896970 DMJXHGJYYP 4.595111 12.447829 MNLXEITWVJ 5.297708 13.432783 YIQYMORVCX 7.475814 37.787744 BRRRWACAII 7.321177 32.850887 ... ....... ........... ............... .................... 100组数据
相关文章推荐