随机数的生成及三个具体案例

  • rand函数
  • srand函数
  • 实例一:生成10个随机数(不限制大小)
  • 实例二:生成10个随机数并排序
  • 实例三:猜数字游戏

rand函数

首先,我截取了关于rand函数的文档详解,大家一起跟我看一下。

  1. rand函数的作用:Generates a pseudorandom number.

    翻译过来就是生成伪随机数的意思

    注意:我们所说的伪随机数其实不是真正随机的,计算机目前无法真正实现随机数的生成

  2. 调用rand函数需要引头文件:#include<stdlib.h>

  3. 返回值:rand returns a pseudorandom number

    翻译过来就是 rand返回一个伪随机数

  4. 语法:int ret=rand();

    举例:生成1-100之间的随机数

    int ret=rand()%100+1;
    解释一下:rand()%100代表生成0-99之间的随机数(因为一个数对n取模,得到的值一定在0~n-1之间),在+1就生成了1-100的随机数
    
  5. 注意:The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the [srand]function to seed the pseudorandom-number generator before calling rand.

    翻译过来的意思就是函数返回一个介于0到RAND_MAX之间的伪随机整数。在调用rand之前,使用srand函数来建立伪随机数生成器。

    其中有两点:

    1. rand函数返回一个介于0到RAND_MAX之间的伪随机整数,这个RAND_MAX我们可以通过编译器查询。将RAND_MAX及其头文件编写至VS2019中,点击RAND_MAX,右键->转到定义

      我们可以看到#define RAND_MAX 0x7fff这句代码,定义了RAND_MAX为16进制的0x7fff,转换成10进制就是32767,所以随机数的生成范围是0~32767,在int的取值范围内,用int类型的变量接收即可

    2. 在调用rand之前,使用srand函数来建立伪随机数生成器。

      我们先不看srand函数具体内容,通过刚才的rand函数使用一下

      #include<stdio.h>
      #include<stdlib.h>
      int main()
      {int ret = rand() % 100 + 1;printf("ret=%d\n", ret);return 0;
      }

      通过这样一个代码,你在短时间内执行多次,发现生成的随机数竟然一样 !

      那么我们实际正确的方法是:使用srand函数,而且我们在帮助文档中也用到了srand函数

      那么接下来学习一下srand函数


srand函数

这张图片是srand函数的帮助文档,我们大家一起阅读一下

  1. srand函数的作用:Sets a random starting point.

    译文:设置一个随机的起点。

  2. srand函数需要引头文件:

    #include <stdlib.h>
    #include <time.h>
    
  3. 注意:The srand function sets the starting point for generating a series of pseudorandom integers. To reinitialize the generator, use 1 as the seed argument. Any other value for seed sets the generator to a random starting point. rand retrieves the pseudorandom numbers that are generated. Calling rand before any call to srand generates the same sequence as calling srand with seed passed as 1.

    我从中提取了主要内容:在调用rand函数之前要调用srand函数,设置随机数的生成器,而且不能频繁调用,在主函数调用一回即可。

  4. 用法:调用一次srand( (unsigned)time( NULL ) );

实例一:生成10个随机数(不限制大小)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>int main()
{int i = 0;int ret = 0;srand((unsigned)time(NULL));//调用一次即可for (i = 0; i < 10; i++){ret = rand();printf("%d\n", ret);}return 0;
}


实例二:生成10个随机数并排序

#include <stdlib.h>
#include <stdio.h>
#include <time.h>int main()
{int a[10] = { 0 };int i = 0;int ret = 0;srand((unsigned)time(NULL));//调用一次即可for (i = 0; i < 10; i++){a[i] = rand() % 100;}printf("打印前\n");for (i = 0; i < 10; i++){printf("%d\n", a[i]);}for (i = 0; i < 9; i++){int j = 0;for (j = 0; j < 9 - i; j++){if (a[j] > a[j + 1]){int t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}printf("打印后\n");for (i = 0; i < 10; i++){printf("%d\n", a[i]);}return 0;
}


实例三:猜数字游戏

先上代码:

#include<stdio.h>
#include <stdlib.h>
#include <time.h>void menu()
{printf("***************************\n");printf("*****    1. play     ******\n");printf("*****    0. exit     ******\n");printf("***************************\n");
}void game()
{int guess = 0;//猜数字游戏的过程//生成随机数int r = rand() % 100 + 1;//0~99-->1~100//猜数字while (1){printf("猜数字:>");scanf("%d", &guess);if (guess < r){printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;}}
}int main()
{int input = 0;srand((unsigned int)time(NULL));//时间-设置随机数的生成器do{//打印菜单menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

再上截图:

再来讲解:

  1. 首先,我们要在主函数中实现游戏的逻辑:

    1. 选择1:开始游戏
    2. 选择0:退出游戏
    3. 选择其他:输入错误
    int main()
    {int input = 0;//所选择的值srand((unsigned int)time(NULL));//时间-设置随机数的生成器do{//打印菜单menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
    }
    //通过do while循环至少执行一次的特点,先打印菜单让用户进行选择,利用switch语句,输入1开始游戏,输入0退出游戏,输入其他数字重新开始,而输入0的时候do while循环的判断条件为假退出达到了退出游戏的目的
    
  2. 实现game函数给予玩家提示

    void menu()
    {printf("***************************\n");printf("*****    1. play     ******\n");printf("*****    0. exit     ******\n");printf("***************************\n");
    }
    
  3. 进行游戏部分的实现

    void game()
    {int guess = 0;//玩家所要猜测的值//猜数字游戏的过程//生成随机数int r = rand() % 100 + 1;//0~99-->1~100//猜数字while (1){printf("猜数字:>");scanf("%d", &guess);if (guess < r)//注意不要写反{printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;//猜对退出即可}}
    }
    

随机数的生成以及三个实例已讲解完毕,希望能给你带来帮助,喜欢请多多支持

C语言随机数的生成及三个具体案例详解相关推荐

  1. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  2. 【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  3. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  4. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解

    今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...

  5. 查看登陆系统用户的信息的三种方法详解

    查看登陆系统用户的信息的三种方法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.who这个命令显示可以谁在登陆,但是这个有很多的花式玩法,这个命令超简单 语法:who [O ...

  6. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    目录 一.分词器​ 1. 认识分词器 1.1 Analyzer 分析器 1.2 如何测试分词器 2. 内建的字符过滤器(character filter) 2.1 HTML过滤字符过滤器(HTML S ...

  7. C语言0长度数组(可变数组/柔性数组)详解

    CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 ...

  8. Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

    点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...

  9. eclipse java 逆向工程_Mybatis 逆向工程的三种方法详解

    Mybatis 逆向工程 逆向工程通常包括由数据库的表生成 Java 代码 和 通过 Java 代码生成数据库表.而Mybatis 逆向工程是指由数据库表生成 Java 代码. Mybaits 需要程 ...

最新文章

  1. 菜单样式1:鼠标悬停向下弹出列表
  2. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
  3. 完全平方数的判定及整数平方根的快速求解
  4. 使用GitHub免费搭建属于自己的网站
  5. html如何让条数按序号输出,JS 怎么控制页面序号较智能的生成?
  6. 计算机网络安全课程好吗,浅议计算机网络课程教学问题与对策 计算机网络安全有哪些...
  7. 基于Nexys4DDR的UART实验
  8. 如何修改matlab中的语句,求大神帮忙看一下这个语句怎么改!!!!!
  9. 利润太薄甚至亏损?小米卢伟冰解释红米Note7线下缺货问题
  10. 【报告分享】2020年重点行业薪酬趋势指南.pdf(附下载链接)
  11. redhat 6安装mysql5.7_RedHat6.5/CentOS6.5安装Mysql5.7.20的教程详解
  12. 记录几种常用编码方式:BASE64、MD5
  13. UDK安装和编译UEFI程序
  14. 第6课时 语音识别
  15. 国内Docker镜像加速汇总
  16. (原创)巧用通道作颜色网
  17. ElasticSearch第一讲:ElasticSearch从入门到精通
  18. 拓嘉辰丰电商:拼多多所属哪种电商模式
  19. 2007noip提高组初赛总结
  20. lc电路在计算机中应用,lc振荡电路的应用有哪些

热门文章

  1. (软考)计算机硬件及操作系统
  2. win10系统升级后,蓝牙耳机与电脑已配对但无法连接成功并作为音频输出。
  3. 如何申请苹果开发者公司账号
  4. 杀毒软件、HIPS与微点 分析三者区别
  5. [转]国外软件外包项目网站(适用软件兼职)
  6. 【论文笔记】:DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution
  7. 3款热门报表软件优劣势对比
  8. wear os 自制安卓智能手表音乐播放器
  9. 做软件实施工程师的一点建议
  10. HTML5七夕情人节表白网页制作【爱心雨(满屏爱心飘落)】HTML+CSS+JavaScript