C语言产生随机数的方法

1、基本函数

  • 所需要包含的头文件:
#include <stdlib.h> 
  • 取随机数所需要的函数是:

int rand(void);

void srand(unsigned int n);


2、使用方法

(1) rand()函数会产生0至RAND_MAX(其值大于等于36767)之间的伪随机数(pseudorandom);  计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数
例如:

for(int i=0; i<10; i++)
{
printf("%d ", rand()%10); //产生0至9的随机数;
} 
                   编译运行,发现每次运行程序产生的随机数都是一样的; 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。C语言中由于采用固定的序列作为"种子",所以每次运行所取的是同一个数。


(2) 为了产生不同的随机数列,需要srand函数来改变随机数“种子”。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把 时间作为srand()函数的种子,就可以避免重复的发生。如果调用rand()之前没有先调用srand(),就会导致每次运行产生的结果一样。
例如:

srand((unsigned)time(NULL)); //调用time()函数前必须包含头文件time.h

for(int i=0; i<10; i++)
{
printf("%d ", rand()%10);
} 
          该程序每次运行结果都不一样,因为每次启动程序的时间都不同。



(3)产生一定区间内的随机数:

       (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



(4)产生伪随机浮点数:
  • 要取得0~1之间的浮点数,可以用:
             rand() / (double)(RAND_MAX)
  • 如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:

            rand() /((double)(RAND_MAX)/100


例如:

srand(time(NULL));
printf("%lf\n",(double)rand()/RAND_MAX);



3、例子:

  • 程序示例

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
//使用rand()函数产生伪随机数
printf("rand()函数产生的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand());
}
//使用rand()函数产生0-20伪随机数
printf("\n\nrand()函数产生1-20的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand()%20);
}
//使用rand()函数产生a-b的伪随机数a=3;b=42;(rand()%(b-a)+a)
printf("\n\nrand()函数产生3-42的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 39+3);
}
//关于浮点数可以使用RAND_MAX
//用时间作为种子,获得随机数
printf("\n\n获取真随机数:\n");
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
//采用时间作为种子是为了保证获得不同的随机序列
//我们会发现相同的种子可以获得相同的随机序列
printf("\n\n采用相同的种子获得相同的时间序列:\n");
printf("\n序列1的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
printf("\n序列2的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
printf("\n序列3的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
return 0;
} 

  • 运行结果:



### C语言生成随机数方法 在C语言中,可以通过标准库 `<stdlib.h>` 和 `<time.h>` 提供的功能来生成随机数。以下是具体方法及其示例代码: #### 随机数生成的核心函数 1. **`rand()` 函数** `rand()` 是C语言的标准库函数,用于返回一个介于 `[0, RAND_MAX]` 的伪随机整数值[^3]。 2. **`srand(unsigned int seed)` 函数** `srand(seed)` 用于设置随机数生成器的种子值。如果未调用此函数,则默认种子为固定值(通常是1),导致每次运行程序时产生随机序列相同[^4]。 为了获得不同的随机数序列,通常使用当前时间作为种子值,通过 `srand(time(NULL))` 实现[^5]。 --- #### 完整示例代码 以下是一个完整的C语言程序,展示如何生成多个随机数并打印到控制台: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i; int n = 5; // 要生成的随机数数量 // 设置随机数种子为当前时间戳 srand((unsigned) time(NULL)); printf("生成的 %d 个随机数为:\n", n); for (i = 0; i < n; i++) { int random_num = rand(); // 生成随机数 printf("%d\n", random_num); } return 0; } ``` 上述代码中: - 使用 `srand(time(NULL))` 初始化随机数种子,确保每次执行程序时得到不同结果[^1]。 - 循环调用 `rand()` 来生成指定数量的随机数,并将其逐一打印至屏幕。 --- #### 控制随机数范围 有时需要生成特定范围内的随机数,例如 `[min, max]`。可以采用以下公式调整随机数范围: ```c int random_in_range(int min, int max) { return rand() % (max - min + 1) + min; } ``` 该函数的作用是将 `rand()` 返回的结果映射到 `[min, max]` 区间内[^2]。 --- #### 注意事项 1. 如果多次运行同一程序而未重新设置种子值(即不调用 `srand()` 或每次都传递相同的种子值),则会重复生成相同的随机数序列。 2. 默认情况下,`RAND_MAX` 值可能较小(如某些平台上的最大值为32767)。对于更高精度的需求,可考虑其他算法或扩展库。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值