【C语言】随机数函数rand和srand

    科技2022-07-16  161

    文章目录

    一、随机数函数

    1.rand()、srand()

    2.time()

    二、案例实现

    1.案例描述

    2.代码实现


    一、随机数函数

    1.rand()、srand()

    C语言产生随机数要用到的函数是rand()和srand()。random()函数不遵循ANSIC标准,在gcc、vs等编译器下不能通过编译。

    (1)若是为了生成一个无范围限制的随机数,只需要使用rand()即可。

    rand()返回一个随机数,范围为0~RAND_MAX。RAND_MAX定义在stdlib.h中,其值为2147483647。

    (2)如果要生成某个范围内的随机数,有两种情况:

    ①从0开始的随机数,例如:生成0~10的随机数,利用rand()函数对10求余,即rand();

    ②不从0开始的随机数,例如:生成5~25的随机数,利用rand()函数对25-5=20求余再加上5,即rand() +5.

    (3)以上两种情况生成的随机数都是一次性的,以后无论再运行几次,输出的结果都将与第一次相同。为了使程序在每次执行时都能生成一个新序列的随机值,需要为随机数生成器提供一个新的随机种子。此时需要使用srand()函数,该函数为随机数生成器播撒种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。

    函数原型:void srand(unsigned int seed);

    该函数的参数seed是种子,用来初始化rand()的起始值。

    功能为:从srand(seed)中所指定的seed开始,返回一个在[0,RAND_MAX]之间的随机整数。rand()函数是真正的随机数生成器,srand()为rand()提供随机数种子。srand((unsigned int)time(NULL)) 表示使用系统定时器的值作为随机数种子。

    系统在调用rand()函数之前会自动调用srand()函数,如果用户在调用rand()函数之前没有调用srand()函数,那么系统就会默认将1作为伪随机数的初始值。如果用户调用过srand(),并给参数seed赋一个值,那么rand()函数就会将此值作为产生随机数的初始值。如果给seed一个固定值,那么rand()函数产生的随机数将会是一样的。

    2.time()

    通常使用系统时间来进行初始化,即使用time()函数获取系统时间,它的返回值为time_t类型,要转换为unsigned int 类型之后再传给srand()函数。使用time()函数还需要调用“time.h”头文件。

    使用time()函数,其参数一般为NULL,即直接传入空指针即可。如果觉得时间间隔太小,可以乘上合适的整数,例如:srand((unsigned int)time(NULL)*5)。


    二、案例实现

    1.案例描述

    一盘游戏,两个人轮流掷骰子5次,并将每次掷骰子的点数累加,5局后,累计点数较大的一方获胜,否则为平局。

    2.代码实现

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand((unsigned int)time(NULL));//使用系统计时器的值作为随机种子 int res1 = 0, res2 = 0; for (int i = 1; i <= 5; i++) { res1 += rand() % 6 + 1;//生成1~6的随机数,并进行累加 res2 += rand() % 6 + 1;//生成1~6的随机数,并进行累加 } printf("甲方点数:%-5d 乙方点数:]\n", res1, res2); if (res1 > res2) { printf("甲方获胜\n"); } else if (res1 < res2) { printf("乙方获胜\n"); } else { printf("平局"); } }

     

    Processed: 0.010, SQL: 8