C程序设计--随机函数(rand())

随机函数

1. 概念 ( 随机函数 r a n d ( ) rand() rand() )

库函数中系统提供了两个函数用于产生随机数:srand()和rand()。

函数原型含义
int rand(void);返回一个[0,RAND_MAX]间的随机整数。
void srand(unsigned seed);参数seed是srand()的种子,用来初始化srand()的起始值。
  • 一个最简单的随机函数代码:
#include<stdio.h>
#include <stdlib.h>
int main(){
	for(int i=0;i<5;i++){
		printf("%d\n",rand());//需要头文件stdlib.h
	}
	return 0;
}

运行结果:
在这里插入图片描述

2. 注意点(也是该函数使用时的难点)
  • “伪随机数”
  1. 问题引出:

如果读者多次运行上述程序,会发现:上述代码虽然每个数字都是随机数,但是每次运行的结果都一样。即:

在这里插入图片描述

  1. 概念解释:
    1)系统在调用rand()之前都会自动调用srand(),
    2) 如果在srand()里给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;
    3)而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值,
    4) 如果初始值是此时的1或是其他定值,那么每次rand()产生的随机数序列都是一样的,这也就是所谓的“伪随机数”。
  2. 解决办法:
    配合srand函数使用:
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main(){
	srand(time(0));//需要头文件time.h
	for(int i=0;i<5;i++){
		printf("%d\n",rand());//需要头文件stdlib.h
	}
	return 0;
}

  1. 代码解释
    1)srand()里给参数seed指定了一个值(我们通常使用 time(NULL) 或者写成 time(0) 作为 seed ,因为时间值每秒都不同,)
    2)值得注意的是,如果srand()括号中没有参数的话,程序是会报错的,因为在函数原型中,srand()函数是要求加上内容的。
  • 头文件
    在上述代码中额外使用了两个头文件,需要注意
语句所需头文件作用
srand(time(NULL));#include<time.h>保证随机序列种子不同
rand()#include <stdlib.h>能够生成随机数
  • 具体使用规则
    在实际应用中,我们往往需要产生某一区间内的随机数,怎么办呢?
    例如:用rand()函数产生 10~20 的随机整数
    解决思路:10~20共有11个数字,所以是 rand()%11+10;
    又如:用rand()函数产生学生成绩 score 属于[0,100]区间内
    解决思路:0-100共有101个数字,所以是 rand()%101;
    又如:用rand()生成-5~5的随机数
    -5~5共有11个数字,所以是 rand()%11-5;
    总结:用rand()生成 m~n (或者[m,n]) 的随机数
    m~n共有n-m+1个数字,所以是 rand()%(n-m+1)+m;
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 随着社会的发展进步,各式有趣的小电动玩具已经遍布我们得生活。大街上随处可见 拿着只有几个按键的打地鼠游戏机。简单的几个按键,就可以给人们带来娱乐。 打地鼠游戏是电子技术发展的产物。打地鼠有软件版也有硬件版得。而软硬件打地鼠 的游戏规则类似。现在我们来讨论用单片机制作打地鼠游戏机。根据打地鼠的游戏规则 ,先制定特定位置,在确认按下了该位置的按钮。这种这种规则很容易用单片机实现。 单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成 为不可替代的一部分。本文的主要内容是用STC89C52单片机为核心控制元件,设计一个 打地鼠游戏机。以单片机作为主控核心,与键盘、蜂鸣器、数码管等模块组成核心主控 制模块,在主控模块上设有4×4的矩阵键盘、数码管和蜂鸣器。本系统运行稳定,其优点 是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参 考价值。 关键词:STC89C52单片机 打地鼠游戏机 数码管 蜂鸣器 目 录 摘 要 1 目 录 2 1.引 言 3 2. 总体设计 4 2.1基本原理 4 2.2系统总体框图及设计思路 4 3.详细设计 5 3.1 硬件设计 5 3.2 软件设计. 6 3.2.1程序设计思路 6 3.2.2 程序流程图 7 3.2.3 程序代码 8 4. 系统调试及分析 22 5.心得体会 23 参考文献 23 1.引 言 单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高 性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传 统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的 一项重大课题。 打地鼠游戏机是现代电子技术发展的产物。是一种按键式的游戏机。是人们的休闲娱乐 的好选择。单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的 生活中,成为不可替代的一部分。本文的主要内容是用STC89C52单片机为核心控制元件 ,设计一个打地鼠游戏机。以单片机作为主控核心,4×4矩阵键盘、蜂鸣器等模块组成核 心主控制模块。 本文主要对使用单片机设计打打地鼠游戏机进行了分析,并介绍了基于单片机打地鼠游 戏机硬件组成。利用单片机产生随机数来点亮指定的位置的led发光管。在判断是否按下 了对应位置的按键。根据游戏规则判断是该加分还是加错。错5次则本次游戏结束。并且 本文分别从原理图,主要芯片,以及程序的调试来详细阐述。 游戏流程是先由单片机产生随机数,点亮对应位置的了点发光管,并记录被点亮的位置 。这时就开始扫描键盘,按键结果用来判断游戏规则。如果正确游戏的分加1,如果错误 错分加1。错分加到5则游戏结束。游戏期间还得用数码管动态显示游戏的分,游戏结束 后显示over。用单片机产生随机数类似电脑上产生随机数。需要开系统时钟,即定时器 。我们可以利用单片机的定时/计数器T0来提供系统时钟。矩阵键盘需要扫描才能应用。 数码管显示位数是动态的,即有几位数就显示几位数,数据的前面不会有0出现。 2. 总体设计 2.1基本原理 先由单片机产生随机数,点亮对应位置的了点发光管,并记录被点亮的位置。这时就开 始扫描键盘,按键结果用来判断游戏规则。用单片机产生随机数类似电脑上产生随机数 。需要开系统时钟,即定时器。我们可以利用单片机的定时/计数器T0来提供系统时钟。 矩阵键盘需要扫描才能应用。数码管显示位数是动态的,即有几位数就显示几位数,数 据的前面不会有0出现。 若要产生随机数,只要提供系统时钟,即定时器,然后调用rand()函数获得随机数 。期间一定要保证系统时钟一直开着,这就要求一定是用中断方式处理定时器/计数器0 ,是定时器/计数器一直开着。另外,经过试验发现,单片机产生随机数的随机性和单片 机的时钟值和要获得的数据范围有关。 利用STC89C52的内部定时器使其工作在定时器方式1下,设置计数值TH0及TL0初值,根据 要去数据范围合理设定。 2.2系统总体框图及设计思路 总体设计思路: 本设计利用单片机P0口连接4×4矩阵按键,作为功能控制键。其中,左上角的是1号键 右下的是16号键。进行编号是为了处理游戏功能是方便。硬件部分是用点阵连接成4×4的 矩阵,与矩阵键盘的位置相对应。一个数码管用于显示得分和游戏结束时显示over。蜂 鸣器用于添加游戏声音。 3.详细设计 3.1 硬件设计 1.芯片及原理介绍 1. STC89C52   STC89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz~33MHz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值