C语言随机数的生成【详解】

C语言随机数的生成【详解】(rand函数srand函数)(生成范围随机数公式)(随机数实例:选择排序等)_c语言生成随机数

一、rand 函数 和 srand 函数

在C语言中比较常用的随机函数是 rand 函数,它可以随机的产生 0 ~ rand_max 的随机数,定义类型不同最大值也不同,rand 函数包含在头文件stdlib.h中。

#include <stdio.h>
#include <stdlib.h>
int main()
{ 
   
    int a=rand();
    printf("%d",a);
    return 0;
}

运行结果…………………………………………
在这里插入图片描述
你会发现每次产生的随机数都是相同的,因为rand 函数产生的随机数是伪随机数,是根据一个数按照某个公式推算出来的,这个数我们称之为“种子”,但是这个种子在系统启动之后就是一个定值。

要想每次产生的随机数不一样,那么,我们就要用到 srand 函数。

srand() 函数原型是:

void srand (usigned int seed);

rand() 产生随机数时,如果用srand(seed) 播下种子之后,一旦种子相同,产生的随机数将是相同的。当然很多时候刻意让rand() 产生的随机数随机化,用时间作种子 srand(time(NULL)) ,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。

此段原文链接: C语言随机数的生成【详解】.如果想看rand和srand函数详解,可观看此文。

通常可以利用 time(0) 或 getpid(0) 作为seed的返回值,下面我们只介绍用time(0)实现随机数。

srand((unsigned)time(NULL));   //用时间作种子
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ 
   
    srand((unsigned)time(NULL));
    int n=rand();
    printf("%d\n",n);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

此时我们就可以随机产生一个数了。

二、生成范围随机数公式

但,作题时我们往往不会用到上面这种方式去产生一个随机数,而是希望产生一定范围内的数据。

1产生随机数范围:[0,9]

int a=rand()%10;  //注意10会被整除,所以不包括10

2产生随机数范围:[0,99]

int a=rand()%100;

3产生随机数范围:[66,88]

int a=66+rand()%23;

结论产生随机数范围:[m,n]

int a=m+rand()%(n-m+1);

接下来举几个例子:

注意:下面的程序会将 srand((unsigned)time(NULL)) 换成 srand(time(0)),用srand(time(0))方便,且一样可以满足以上产生范围随机数的各种情况。

三、随机数实例:选择排序等

① 随机产生10个[150,270)范围内随机数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ 
   
    int a[11];
    int i;
    printf("随机产生10个[150,270)范围内随机数:\n\n");
    srand(time(0));   //srand(time(NULL));
    for(i=1;i<=10;i++)
        //一般键盘随机输入10个数方式:scanf("%d",&a[i]);
        a[i]=150+rand()%120;
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0; 
}

运行结果…………………………………………
在这里插入图片描述
② 随机产生10个[0,99)范围内随机数(指针

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ 
   
    int a[10]; 
    int *p; 
    printf("随机产生10个[0,99)范围内随机数:\n\n");
    srand(time(0));    //srand(time(NULL)); 
    for(p=a;p<(a+10);p++)
        *p=rand()%100; 
    for(p=a;p<(a+10);p++)
        printf("%d ",*p);   //使用指针指向当前的数组元素 
    printf("\n"); 
    return 0; 
}

运行结果…………………………………………
在这里插入图片描述
③ 地址 — 随机数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ 
   
    int a[10];
    int i;
    printf("产生10个[0,99]随机数:\n\n");
    srand(time(0));          //srand(time(NULL)); 
    for(i=0;i<10;i++)
    { 
   
        a[i]=rand()%100;      //随机函数产生 [0,100)
        printf("%d ",a[i]); 
    }
    printf("\n\n");
    printf(" 地址 --- 随机数\n\n"); 
    for(i=0;i<10;i++)
        printf(" %d --- %d\n",a+i,*(a+i));   //通过原数组名和元素序号计算地址 
    printf("\n"); 
    return 0; 
}

运行结果…………………………………………在这里插入图片描述

④ 实例:选择排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ 
   
    int a[10];
    int i,t,j,min;
    srand(time(0));
    printf("随机产生10个[0,99]随机数:\n");
    for(i=0;i<10;i++)
        a[i]=rand()%100;      //产生10随机数
    for(i=0;i<10;i++)
        printf("%d ",a[i]);   //输出随机数
    printf("\n\n");
    for(i=0;i<=9;i++)
    { 
   
        min=i;
        for(j=i+1;j<10;j++)
           if(a[min]>a[j])
               min=j;
       if(i!=min)
       { 
   
           t=a[i];
           a[i]=a[min];
           a[min]=t;
       } 
    } 
    printf("由小到大排序:\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}

运行结果…………………………………………
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

今天的文章C语言随机数的生成【详解】分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/72723.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注