找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1941|回复: 8
收起左侧

关于单片机C语言随机函数rand()的使用

[复制链接]
ID:977804 发表于 2022-3-24 13:21 | 显示全部楼层 |阅读模式
#include<STC15W.H>
#include <stdlib.h>           //随机函数包含
P2=rand()%8;    //获得0~8之间的随机数,函数rand()在stdlib.h

假设P2接的LED口,1秒钟变换一个随机数,会出现这样的情况:3  3   2   3   6  3  ……。
但是想要的结果是: 4   3   7    1    6   2   5  这样,就像音乐播放器一样,随机播放,就把所有的歌随机排了个序,从上到下放一遍。
百度查要加这个参数 seed  ,查来查去也没看明白
回复

使用道具 举报

ID:883242 发表于 2022-3-24 21:38 | 显示全部楼层
seed要用定时器的值来赋予的。
回复

使用道具 举报

ID:827243 发表于 2022-3-25 09:06 | 显示全部楼层
这个和seed无关,你要的算法叫发。
1 生成 8 以内的随机数 rand()%8
2 生成 7 以内的随机数 rand()%7
3 生成 6 以内的随机数 rand()%6
...
4 生成 1 以内的随机数,最后一张。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:161164 发表于 2022-3-25 09:26 | 显示全部楼层
daemondong 发表于 2022-3-25 09:06
这个和seed无关,你要的算法叫
1 生成 8 以内的随机数 rand()%8
2 生成 7 以内的随机数 rand()%7

重点是如何保证不重复
回复

使用道具 举报

ID:827243 发表于 2022-3-25 12:49 | 显示全部楼层
有很多办法,拿数组举例
1 初始化  a[8]={1,2,3,4,5,6,7,8}
2 取 rand()%8 比如 2, 取出 a[2] =2 , 然后 a[2]=a[8]  取出的数就去除了
3 取 rand()%7 比如 2, 取出 a[2] =8 , 然后 a[2]=a[7]  取出的数就去除了
... 直到为1
回复

使用道具 举报

ID:311903 发表于 2022-3-25 13:07 | 显示全部楼层
设置不同的随机种子,srand()
回复

使用道具 举报

ID:977804 发表于 2022-3-25 14:09 来自手机 | 显示全部楼层
daemondong 发表于 2022-3-25 12:49
有很多办法,拿数组举例
1 初始化  a[8]={1,2,3,4,5,6,7,8}
2 取 rand()%8 比如 2, 取出 a[2] =2 , 然后 ...

我试试
回复

使用道具 举报

ID:883242 发表于 2022-3-25 15:00 | 显示全部楼层
daemondong 发表于 2022-3-25 09:06
这个和seed无关,你要的算法叫发
1 生成 8 以内的随机数 rand()%8
2 生成 7 以内的随机数 rand()%7

不可能无关。rand()产生的随机数不是天上掉下来的,好好看书吧!
回复

使用道具 举报

ID:161164 发表于 2022-3-25 15:59 来自手机 | 显示全部楼层
daemondong 发表于 2022-3-25 12:49
有很多办法,拿数组举例
1 初始化  a[8]={1,2,3,4,5,6,7,8}
2 取 rand()%8 比如 2, 取出 a[2] =2 , 然后 ...

受教了~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表