随机数相关函数rand与srand 以及drand48()与srand48

您所在的位置:网站首页 c语言随机数函数rand 随机数相关函数rand与srand 以及drand48()与srand48

随机数相关函数rand与srand 以及drand48()与srand48

2023-09-11 14:47| 来源: 网络整理| 查看: 265

c语言中为了产生随机数需要用到rand函数那么我们来看一下rand函数的具体用法

#include #include int main() { //rand不加括号随机生成一个相同的值,无论多少遍都一样 //rand()生成随机值,值不一定相同,多数不同,偶尔相同 //多次实验后我们会发现实际上随机生成的数字也并不是随机的 //程序会输出一个固定的随机数序列——rand函数默认种子是常量1,每次随机数都一样 //要生成不同的随机数序列就要改变种子的值 //rand主要取决于你的编程环境,也就是说,我们每次产生的随机数都是一样的 int num; for (int i = 0; i < 5; i++) { num = rand(); printf("%d\n", num); printf("------------------"); printf("%p\n", &num);//打印变量的地址 } printf("*************************\n"); int n; for (int i = 0; i < 5; i++) { n = rand; printf("%d\n", n); printf("------------------"); printf("%p\n", &n);//打印变量的地址 } }

为了让rand函数不再生成一个固定序列我们要改变rand函数中的种子 方法:srand函数——srand(time(NULL)); 注意: 头文件一定要加上和! 下面是优化代码:

#include #include #include int main() { //采用srand接收当前时间作为随机种子来改变rand函数的生成的随机序列 printf("max = %d \n",RAND_MAX); int num; srand(time(NULL)); for (int i = 0; i < 5; i++) { num = rand(10); printf("%d\n", num); printf("------------------"); printf("%p\n", &num);//打印变量的地址 } printf("*************************\n"); int n; for (int i = 0; i < 5; i++) { n = rand; printf("%d\n", n); printf("------------------"); printf("%p\n", &n);//打印变量的地址 } }

代码运行结果如下:发现没有我们现在得到的随机数2次运行的结果不一样,因为我们现在随机种子是系统时间,每次程序运行的时间都不一样,所以得到的随机数也就不一样。

优化后我们增加需求:要指定范围来输出 代码实现: 

#include #include #include //rand函数生成的范围是0---RAND_MAX(多为32767),我们来修改一下这个范围 //如果我们需要大于等于0但小于等于10的随机数——rand() % 11 //原因0——10内任意数除余11得到的就是0——10内的每一个数 //例:5 % 11 = 5 10 % 11 = 10 //总结:得到具体自己希望的随机数—— rand() % (末数+1) int main() { //我希望得到随机数的范围在0——51之间 //结果发现的确随机数的范围得到了变化,但RAND_MAX依然是一个固定值(32767) srand(time(NULL)); int num; int choose; /*printf("max = %d\n",RAND_MAX);*/ do { num = rand() % 52; /*printf("max = %d\n", RAND_MAX);*/ printf("随机数为:%d\n",num); printf("输入你的选择:1.再生成一个 2.结束\n"); scanf_s("%d", &choose); if (choose == 2)//可以不写 { break; } } while (choose == 1); return 0; }

代码运行如下:现在我们就可以得到指定范围的随机数了

最后我们来写个综合实例

#include #include #include //原始随机序列 void randnum() { int n; int printnum; printf("请输入你要生成随机数(原始序列)的个数:"); scanf("%d", &n); for (int i = 0; i < n; i++) { printnum = rand(); printf("%d\n", printnum); } } //0——999第一种写法 void randnum1() { int n; int printnum; printf("请输入你要生成随机数(0——999)的个数:"); scanf("%d",&n); for (int i = 0; i < n; i++) { printnum = rand() % 1000; printf("%d\n", printnum); } } //1——999 void randnum2() { int n; int printnum; printf("请输入你要生成随机数(0——999)的个数:"); scanf("%d", &n); for (int i = 0; i < n; i++) { printnum = 1 + (rand() % 999); printf("%d\n", printnum); } } //100——999显示三位整数 void randnum3() { int n; int printnum; printf("请输入你要生成随机数(0——999)的个数:"); scanf("%d", &n); for (int i = 0; i < n; i++) { printnum = 100 + (rand() % 900); printf("%d\n", printnum); } } int main() { int choose; int n1; srand(time(NULL)); while (1) { printf("=========================rand()操作集合========================\n"); printf("-------------------------1.随机生成(0——999①)\n"); printf("-------------------------2.随机生成(原始随机序列)\n"); printf("-------------------------2.随机生成(1——999②)\n"); printf("-------------------------4.随机生成(100——999的三位整数③)\n"); printf("===============================================================\n"); printf("请输入你的选择:"); scanf("%d",&choose); switch (choose) { case 1: randnum1(); printf("\n"); break; case 2: randnum(); printf("\n"); break; case 3: randnum2(); printf("\n"); break; case 4: randnum3(); printf("\n"); break; default: printf("error\n"); break; } } return 0; }

代码运行如下:

 接下来我们来看一下drand48()与srand48函数

 这是网上找的介绍,看了还是不知道说什么,我们会通过代码来看一下,就理解了。drand48()函数会产生0-1之间的随机数,而且是float型的,但是它的随机种子也是固定的,对于同一个操作系统,而srand48就是改变它的随机种子的,我们这里随机种子是选用的输入的数字作为它的随机种子,每次输入的数字不一样,它的随机种子不一样,最后产生的随机数也就不一样,可以看下面的代码运行结果,就能够理解了。

#include #include int main(int argc, char *argv[]) { if(argc>1) { srand48(atol(argv[1])); } for (int i=0; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3