C语言生成随机数【简易抽卡代码为例】

这篇具有很好参考价值的文章主要介绍了C语言生成随机数【简易抽卡代码为例】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言生成随机数【简易抽卡代码为例】


前言

本文将详细解释如何在C语言中生成随机数,并介绍应用的小技巧


一、生成随机数

c语言生成一个真正的随机数需要用到三个函数:rand()、srand()和time()。

函数介绍

rand() 函数

头文件#include<stdlib.h>
函数声明int rand(void)
作用生成一个伪随机数序列,随机数取值范围是0~RAND_MAX

PS - RAND_MAX其实是一个宏名,在头文件<stdlib.h>中存在宏定义
#define RAND_MAX 32767
不同的编译器会将它定义为不同的数值,本文使用的编译器讲它定义成了32767

函数逻辑函数声明中函数调用符号()中是void,所以不需要参数,函数rand()就会返回一个伪随机数 rand()函数和srand()函数一定是配合使用的,rand()函数只靠自己生成不了随机数,必须要在srand()函数中设置种子(起点)rand()函数才会返回随机数。rand()函数调用前会检查是否定义了srand(),如果没有定义将自动生成srand(1)并且调用它


srand()函数

头文件#include<stdlib.h>
函数声明void srand (unsigned int seed);
作用配合rand()函数一起使用才有意义,只有对srand()函数进行如srand(1)、srand(2),这样的设置种子,rand()才会返回伪随机数序列

rand()函数和srand()函数必须放在一起使用,srand()函数是种下的种子,rand()函数是它结出的果子,没有种子(srand)就没有果子(rand)

函数逻辑srand():伪随机数生成器。函数声明的函数调用符()中为unsigned int seed(seed中文翻译为种子),所以我们需要传人一个无符号整数作为seed(种子),才能生成随机数序列。但每一个种子如srand(1),生成的随机数序列都是固定的,所以才叫srand()函数为伪随机数生成器

伪随机数序列
种什么样的种子结什么样的果,每定义一个种子,编译器都会生成一个固定的伪随机数序列
下面我用种子srand(1)生成10个伪随机数

#include <stdio.h>
#include <stdlib.h>

int main()
{
	srand(1);
	for (int i = 1;i<=10; i++)//十个伪随机数
	{
		printf("%d\n", rand());
	}
	
}

运行代码
C语言生成随机数【简易抽卡代码为例】

十个固定的数已经由编译器生成,我使用的编译器伪**visual studio 2019**,也就是说不论我什么时候、什么地点、在别人的电脑还是在自己的电脑,只要编译器是**visual studio 2019**,种子srand(1)生成的前十个伪随机数就是这十个数.

不同编译器种子生成的伪随机数序列是不一样的,我这里是visual studio 2019环境

那我们怎么样才可以获得真正的随机数呢?其实问题很简单,我们只需要在srand()中放入一个不断变化的数就可以生成一个真正的随机数序列,
那么现实中有什么数字一直在变化呢?没错那就是时间,C中生成时间的函数就是time()函数


time()函数

头文件#include<time.h>
函数声明time_t time (time_t* timer);

头文件中存在 typedef _int64 time_t
其中 _int64 其实就是long long,所以time_t代表长长整型

作用time() 函数用于获取当前系统时间的时间戳(time stamp),即自 1970 年 1 月 1 日 00:00:00 UTC 起至当前时间所经过的秒数
函数逻辑time()函数的函数声明的函数调用符()中为time_t* timer,这里是通过指针获得时间戳,但我们更多的是使用time(NULL) 这样time(NULL)就不要创建指针,直接返回当前时间。

生成一个真正的随机数

我们可以对srand进行这样设置
srand((unsigned)time(NULL));
此时srand()函数中的种子参数是不断变化的,生成随机数也是不断变化的

time()函数是time_t型(long ong型)的,但srand函数()的种子参数需要unsigned int型的,所以这里最好使用:()强制类型转换进行转换

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int main()
{
	
	
	srand((unsigned)time(NULL));//时间中作为种子
	for (int i = 1; i <= 10; i++)
	{
		printf("%2d:%d\n", i,rand());
	}

}

运行代码
C语言生成随机数【简易抽卡代码为例】
如果现在如果复制这段代码,生成的十个数肯定是和我这上面生成的数是不一样的

二、使用小技巧

使用%可以将产生的随机数限制在一定的范围中
生成0~9的随机数

int a=rand()%10;printf("%d",a);

生成生成10~20的随机数

int a=10+rand%11;printf("%d",a)

%a,的取值范围是0~a-1,通过对其合理使用,可以生成符合自己要求的随机数

三、使用代码实例(简易抽卡)

在编程中,随机数的出现为我们带来了许多便利
如编写一个石头剪刀布小游戏,电脑出手可以用rand()%3生成的“0”、“1” ‘“2”分别代表“石头”、“剪刀”和“布”,等······

下面我将使用srand()、 rand()和time()生成10个取值范围为3~6随机数,用代码模拟一次十连抽卡
简易抽卡系统

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int main()
{
	int three_star = 0;
	int four_star  = 0;
	int five_star  = 0;
	int six_star   = 0;
	srand((unsigned)time(NULL));
	for (int i = 1; i <= 10; i++)
	{
		int a = 3 + rand() % 4;//生成3~6的随机数
		switch (a)
		{
		
		case 3:three_star++; break;
		case 4:four_star++; break;
		case 5:five_star++; break;
		case 6:six_star++; break;

		}
	}
	printf("本次抽卡结果如下\n");
	printf("三星干员:%d名\n", three_star);
	printf("四星干员:%d名\n", four_star);
	printf("五星干员:%d名\n", five_star);
	printf("六星干员:%d名\n", six_star);

	return 0;

}

运行代码
C语言生成随机数【简易抽卡代码为例】

哈哈哈,运气还行,出货了一个六星,读者有兴趣的话可以复制这段代码测测运气,在评论区分享一下自己的出货情况


总结

本文介绍的是其基本原理,这里只是展示这些函数的了冰山一角,技艺高超的程序员们会对它们进行出神入化的使用
整理不易,对你有帮助的话,那就给个三联吧,谢谢了文章来源地址https://www.toymoban.com/news/detail-441626.html

到了这里,关于C语言生成随机数【简易抽卡代码为例】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言随机数生成和范围设置详解【超详细教程】

    本文详细介绍了C语言中如何使用rand函数生成随机数以及利用srand函数设置随机数的种子,同时解释了如何控制随机数的范围。适合初学者学习和实践。

    2024年02月05日
    浏览(50)
  • C语言中随机数的生成(rand函数和srand函数)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢? 目录 一.rand函

    2024年02月04日
    浏览(46)
  • R语言【base】——.Random.seed(),RNGkind(),RNGversion(),set.seed():随机数生成器

    Package  base  version 4.2.0 .Random.seed是一个整数向量,包含R中生成随机数的随机数生成器(RNG)状态。它可以保存和恢复,但不应该被用户更改。 RNGkind是一个更友好的接口,用于查询或设置正在使用的RNG类型。 RNGversion在早期的R版本中可以用来设置随机生成器(为了再现性)。 set

    2024年02月22日
    浏览(54)
  • 【安全密钥交换协议】基尔霍夫定律-约翰逊噪声(KLJN)方案的随机数生成器攻击研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2  2.3 算例3 🎉3 参考文

    2024年02月04日
    浏览(56)
  • Unity 中的随机数的基础常用的随机数生成方法

    在 Unity 中,可以使用 Random 类来生成随机数。以下是一些常用的随机数生成方法: Random.Range(min, max):生成一个在[min, max)范围内的随机整数。 Random.value:生成一个在[0, 1)范围内的随机浮点数。 Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。 Random.insideUnitSphere:生成

    2024年02月20日
    浏览(54)
  • JS - 生成随机数的方法汇总(不同范围、类型的随机数)

    (1)使用 random() 方法可以返回一个介于 0 ~ 1 之间的伪随机数(包括 0,不包括 1)。 (2)下面是一个测试样例 (1)这种最简单,因为和 random 的特点保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范围内的随机浮点数。 因为 random 的特点,要取得这几个区间

    2023年04月08日
    浏览(52)
  • C语言/C++随机数生成,程序运行时间计时器(含高精度计时器),包括Windows环境与Linux环境

      🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  数据结构与算法_勾栏听曲_0 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人

    2023年04月26日
    浏览(52)
  • 【安全密钥】对基尔霍夫-洛-约翰逊噪声(KLJN)安全密钥交换协议的统计随机数生成器攻击(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年04月12日
    浏览(56)
  • java生成随机数

       bound 必须是正数。 以下代码生成的是 0 到 30 的随机数。 生成区间的随机数:[最小值,最大值] 学的不是技术,更是梦想!!!

    2024年02月07日
    浏览(66)
  • Flutter 生成随机数

    如何让随机数变化? 我们尝试过的都知道,当你创建出来一个随机数后,调用他他的值是随机的,但是,这时候他的值就会固定住,不管怎么样都是随机出来的那个数,如果想要他每次都不一样的话,我们就想要使用刷新来让他变化了。 我们可以使用这样的方法来使他每次不一

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包