C语言随机数的介绍(rand函数,srand函数,time函数)

1.rand函数

C语言提供了一个函数叫rand,这个函数可以生成一个随机数,函数原型如下所示:

int rand (void)

rand函数会返回一个数,这个随机数的范围是在0-RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767

注意rand函数的使用需要包含一个头文件是stdlib.h

让我们来测试一下rand函数

从上图中我们可以发现程序成功生成了10个随机数,那我们再一次运行结果,看看会发生什么?

我们发现第二次运行结果和第一次相同,也就是说其实rand函数生成的随机数其实是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数是无法预测下一个值是多少的。而rand函数是一个叫种子的基准值进行运算生成的随机数。

之所以前面每次运行程序产生的随机序列是一样的,那是因为rand函数生成随机数的默认种子是1.如果要生成不同的随机数,就要让种子是变化的

2.srand函数

C语言中又提供了一个函数叫srand,用来初始化随机数生成器的,srand原型如下

void srand (unsigned int seed)

程序在调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了

也就是说srand的种子如果是随机的,rand函数就能生成随机数,但在生成随机数的时候又需要一个随机数,这就矛盾了

3.time函数

在程序中我们一般是使用程序运行的时间作为种子,因为时间时刻在发生变化

在C语言中有一个函数叫time,就可以获得这个时间,time函数原型如下:

time_t time (time_t* timer)

time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到程序运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上实际就是32位或者64位的整型类型

time函数的参数timer如果是非NULL指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去

如果time是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳

time函数使用的时候要包含头文件time.h

我们可以如下改写生成随机数的代码

经过多次运行我们发现每次运行都有差别,符合我们的预期

注意:srand函数是不需要频繁调用的,一个运行的程序只需要调用一次

4.随机数的生成

如果要获得一个0-99的随机数,方法如下:

如果要获得一个1-100的随机数,方法如下

如果要获得一个b-c的随机数,方法如下:

5.随机数的应用--猜数字游戏

参考代码如下

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define op 10 //猜数字的次数


int main()
{
    int i, number, guess_number;
    srand((unsigned int)time(NULL)); //初始化随机数生成器
    number = rand() % 100 + 1; //生成一个1-100之间的随机数
    printf("please input a number between 1 and 100,you have %d chance\n", op);
    for (i = 0; i < op; i++)
    {
        scanf("%d", &guess_number);
        if (guess_number > number)
        {
            printf("too big,you have %d chance left\n", op - i - 1);
        }
        else if (guess_number < number)
        {
            printf("too small,you have %d chance left\n", op - i - 1);
        }
        else
        {
            printf("you are right\n");
            break;
        }
    }
    if (i == op)
    {
        printf("game over,the number is %d\n", number);
    }
    return 0;
}

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C语言随机数函数是一个非常有用的函数,它可以用来产生伪随机数。下面是一个简单的使用示例: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, n; /* 用时间作为种子来初始化随机数发生器 */ srand(time(NULL)); printf("请输入要生成的随机数个数: "); scanf("%d", &n); for(i = 0; i < n; i++) { printf("%d ", rand()); /* 生成随机数并输出 */ } return 0; } ``` 在上面的示例中,我们首先包含了三个头文件:stdio.h、stdlib.h和time.h。其中,stdlib.h头文件包含了rand()和srand()函数time.h头文件包含了time()函数。 在程序的主函数中,我们首先使用time()函数获取当前时间作为种子,然后使用srand()函数将种子传递给随机数发生器。接着,程序要求用户输入要生成的随机数个数,然后使用for循环生成并输出相应个数的随机数。 需要注意的是,rand()函数会生成0到RAND_MAX之间的随机整数,其中RAND_MAX是stdlib.h头文件中定义的一个常量,通常是2147483647。如果想生成一定范围内的随机数,可以使用取模运算来实现。例如,要生成1到100之间的随机数,可以使用rand() % 100 + 1。 希望这个简单的示例可以帮助你理解C语言随机数函数的使用。 ### 回答2: C语言中有一个随机数函数库,名为<cstdlib>,其中包含了一些生成和操作随机数函数。 其中最常用的函数rand(),它能够生成一个范围在0到RAND_MAX之间的伪随机整数。 以下是一个使用rand()函数生成随机数的简单实例: #include <cstdlib> #include <ctime> #include <iostream> int main() { // 使用当前时间作为种子 std::srand(std::time(0)); // 生成10个随机数 for (int i = 0; i < 10; i++) { int random_num = std::rand(); std::cout << random_num << std::endl; } return 0; } 在这个实例中,我们首先使用std::srand(std::time(0))来设置随机数的种子。这里我们使用了当前时间作为种子,确保每次运行时生成的随机数序列不同。 然后我们使用for循环生成10个随机数。每次迭代中,我们调用std::rand()函数生成一个伪随机数,并将其打印出来。 需要注意的是,使用rand()函数生成的随机数是伪随机数,是通过特定的算法生成的,因此在每次程序运行时生成的随机数序列都是相同的。如果需要更好的随机性,可以考虑使用其他随机数生成算法。 ### 回答3: C语言随机数函数是为了生成一组随机数而设计的函数。它使用了一个种子(seed)来初始化随机数发生器,使得每次程序运行时产生的随机数序列都是不同的。在C语言中,我们可以使用rand函数srand函数来实现随机数的生成和初始化。 rand函数是C语言中的一个伪随机数生成函数,它返回一个0到RAND_MAX之间的随机整数。如果要生成一组范围在A到B之间的随机数,我们可以使用以下公式: random_number = (rand() % (B - A + 1)) + A; 下面是一个简单的使用rand函数生成10个1到100之间的随机数的例子: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, random_number; srand(time(NULL)); for(i = 0; i < 10; i++) { random_number = (rand() % 100) + 1; printf("%d\n", random_number); } return 0; } 在上面的例子中,我们首先使用time函数来获取当前时间作为种子,然后使用srand函数将种子传递给rand函数。接下来,我们使用for循环生成10个1到100之间的随机数,并使用printf函数将它们输出到屏幕上。 总结来说,C语言随机数函数能够方便地产生一组随机数。通过合适地使用rand函数srand函数,我们可以根据需要生成不同范围的随机数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值