源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C/C++产生指定范围和不定范围随机数的实例代码

  • 时间:2021-12-11 02:39 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C/C++产生指定范围和不定范围随机数的实例代码
[b]一. 不指定范围产生随机数 [/b]用到函数rand(),函数原型为int ra nd(),无参数。此时会产生一个介于0~RAND_MAX间的整数。RAND_MAX的大小可以查看,在include文件夹(linux在usr目录、windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关。 参考代码:
[u]复制代码[/u] 代码如下:
#include<stdio.h> #include<stdlib.h> int main() {         int i;         for(i=0; i<10; i++)  //随机产生10个数。         {             printf("%d\n", rand());         }         return 0; }
[b]二. 指定范围产生随机数,产生0到某个数的随机数 [/b]没有现成的函数,但是可以通过取余得到
[u]复制代码[/u] 代码如下:
#include<stdio.h> #include<stdlib.h> #define Random(x) (rand() % x) //通过取余取得指定范围的随机数 int main() {         int i;         int dis;               //产生[0, dis)之间的随机数,注意不包括dis         for(i=0; i<10; i++)         {                printf("%d\n", Random(dis));         }         return 0; }
说明下:假设dis取5 [img]http://files.jb51.net/file_images/article/201311/20131120110707.jpg?20131020111422[/img] 注意一个问题:以上两个程序每次执行产生的结果是相同的,既是个伪随机数。rand()产生随机数与具体的种子有关,当不特意用srand()获取种子时,种子的默认值为1,因此需要用srand()函数产生不同的种子,srand函数原型:void srand(unsigned seed);为了产生不同的种子值,通常用时间作为参数值。例如对于一,修改程序如下:
[u]复制代码[/u] 代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() {         int i;         srand((int)time(NULL));     //每次执行种子不同,生成不同的随机数         for(i=0; i<10; i++)         {           printf("%d\n", rand());  //因为执行太快,不到一秒钟,10个随机数是相通的,但是每次执行是不同的         }         return 0; }
[b]三. 指定范围产生随机数 [/b]要求:指定范围(m,n),m、n关系不定,随机数包括m和n 想方设法,把范围(m,n)改变到(0,X),到最后再转移回去。三种情况
[u]复制代码[/u] 代码如下:
1:m=n此时不该叫随机数,这里返回m 2:m>n:         标记pos=n,距离差pos=m-n+1      返回 rand() % dis + pos 3:n>m:         标记pos=m,距离差=n-m+1      返回rand()%dis + pos
参考代码:
[u]复制代码[/u] 代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> int Random(int m, int n) {         int pos, dis;         if(m == n)         {             return m;         }         else if(m > n)         {             pos = n;             dis = m - n + 1;             return rand() % dis + pos;         }         else         {             pos = m;             dis = n - m + 1;             return rand() % dis + pos;         } } int main() {         int i, m, n;         srand((int)time(NULL));         m = -3;         n = -7;         for(i=0; i<10; i++)         {             printf("%d\n", Random(m, n));         }         return 0; }
升华 srand((unsigned)time(null)); (a,b) (rand()%(b-a+1))+a-1 [a,b) (rand()%(b-a))+a (a,b] (rand()%(b-a))+a+1 [a,b] (rand()%(b-a+1))+a
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部