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

文章目录

一、随机数函数

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()%10;

②不从0开始的随机数,例如:生成5~25的随机数,利用rand()函数对25-5=20求余再加上5,即rand()%20+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 乙方点数:%5d\n", res1, res2);
    if (res1 > res2) {
        printf("甲方获胜\n");
    }
    else if (res1 < res2) {
        printf("乙方获胜\n");
    }
    else {
        printf("平局");
    }
}

猜你喜欢

转载自blog.csdn.net/Jacky_Feng/article/details/108920377