<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>随机函数</title>
	<atom:link href="https://www.aitaocui.cn/tag/197860/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Thu, 24 Nov 2022 03:12:35 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>随机函数</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>随机函数(计算机术语)</title>
		<link>https://www.aitaocui.cn/article/307153.html</link>
					<comments>https://www.aitaocui.cn/article/307153.html#respond</comments>
		
		<dc:creator><![CDATA[邻苯二甲酸氢钾]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 03:12:35 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[随机函数]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=307153</guid>

					<description><![CDATA[随机函数就是产生数的函数，是EXCEL中很重要的函数，C语言里也有rand(),srand()等随机函数。标准C库中函数rand（）可以生成0~RAND_MAX之间的一个随机数，其...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>随机函数就是产生数的函数，是EXCEL中很重要的函数，C语言里也有rand(),srand()等随机函数。标准C库中函数rand（）可以生成0~RAND_MAX之间的一个随机数，其中RAND_MAX是stdlib.h中定义的一个整数，它与系统有关。C语言中还有一个random()函数可以获取随机数，但是random()不是标准函数，不能在VC/VS等编译器通过，所以比较少用。</p>
</article>
<article>
<h1>生成数字</h1>
<p>(1)生成随机数比较简单，=rand()即可生成0-RAND_MAX之间的随机数；(#define RAND_MAX 0x7fffu)</p>
<p>(2)如果要是整数，就用=int(rand()%10)，表示0至9的整数，以此类推；</p>
<p>(3)如果要生成a与b之间的随机实数，就用=rand()%(b-a)+a，就能产生固定位数的整数了，以此类推。</p>
<p>注意：如果要使用函数rand()生成一随机数，并且使之不随单元格计算而改变，可以在编辑栏中输入“=rand()”，保持编辑状态，然后按F9，将公式永久性地改为随机数。</p>
<p>不过，这样只能一个一个的永久性更改，如果数字比较多，也可以全部选择之后，另外选择一个合适的位置粘贴，粘贴的方法是点击右键，选择“选择性粘贴”，然后选择“数值”，即可将之前复制的随机数公式产生的数值（而不是公式）复制下来。</p>
<p>在实际编程中，我们经常需要生成随机数，例如，贪吃蛇游戏中在随机的位置出现食物，扑克牌游戏中随机发牌。</p>
<h1>字母</h1>
<p>随机小写字母：=CHAR(INT(RAND()*26)+97)</p>
<p>随机大写字母：=CHAR(INT(RAND()*26)+65)</p>
<p>随机大小写混合字母：=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))</p>
<p>有些情形下，我们需要生成一个不重复的随机序列。</p>
<p>比如：我们要模拟洗牌，将一副扑克牌去掉大小怪后剩下的52张打乱。</p>
<p>比较笨的方法是在1-52间每生成一个随机数后，检查该随机数是否出现过，如果是第一次出现，就放到序列里，否则重新生成一个随机数作检查。在excel worksheet里面用这种办法，会造成if多层嵌套，不胜其烦，在VBA里面做简单一些，但是效率太差，越到序列的后端，效率越差。</p>
<p>当然也有比较好的办法，在VBA里面，将a(1)-a(52)分别赋予1-52，然后做52次循环，例如，第s次生成一个1-52间的随机数r，将a(s)与a(r)互换，这样的话，就打乱了原有序列，得到一个不重复的随机序列。</p>
<p>VBA里这个算法是很容易实现的，但是，出于通用性和安全考虑，有的时候我们并不希望用VBA，我们来看看在worksheet里面如何利用内置函数实现这个功能。</p>
<p>(1)在A1-A52间填入&quot;=INT(RAND()*52)+1&quot;，产生1-52间的随机数，注意这里是有重复的。</p>
<p>(2)在B1-B52间填入1-52。</p>
<p>(3)在C54-BB54填入1-52。</p>
<p>(4)在C1填入&quot;=IF(ROW()=C$54,INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX(B$1:B$52,C$54),B1))&quot;。</p>
<p>(5)将C1复制到C1:BA52这个区域里面。</p>
<p>(6)在BA1:BA52中，我们就得到了一个不重复的随机序列，按F9可以生成一个新序列。</p>
<p>随机产生六位数字密码=INT(RAND()*(899999-10001))+100001。</p>
<p>EXCEL生成前2位是大写字母，中间4位是小写字母，后两位是数字。</p>
<p>=CHAR(65+INT(RAND()*16))&amp;CHAR(65+INT(RAND()*16))&amp;CHAR(97+INT(RAND()*16))&amp;CHAR(97+INT(RAND()*16))&amp;CHAR(97+INT(RAND()*16))&amp;CHAR(97+INT(RAND()*16))&amp;INT(RAND()*10)&amp;INT(RAND()*10)。</p>
<p>在A1中输入公式=rand()*100000，表示随机数乘以一个比较大的数，然后往下填充N个单元格。在B1中输入排序公式=rank(A1,A:A)，双击填充，或往下填充N个单元格，B1到BN就是你所需要的N个不同随机数了。</p>
<h2 id="a-ea850e2e">解释</h2>
<p>rand（）函数没有输入参数，直接通过表达式rand（）来引用；例如可以用下面的语句来打印两个随机数：printf(&quot;Random numbers are:%i%i//n&quot;,rand(),rand())。</p>
<p>因为rand（）函数是按指定的顺序来产生整数，因此每次执行上面的语句都打印相同的两个值，所以说C语言的随机并不是真正意义上的随机。</p>
<p>为了使程序在每次执行时都能生成一个新序列的随机值，我们通常通过为随机数生成器提供一粒新的随机种子。函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。</p>
<h2 id="a-9b4af491">例程</h2>
<p>当提供的种子相同时，随机数序列也时相同的。而且当种子为1时，与不使用srand()函数时一样的，也就是说rand()函数默认情况下初始化种子值为1。</p>
<p>在stdlib.h中这两个函数的原型是：</p>
<p>int rand();</p>
<p>void srand(unsigned int);</p>
<p>srand(time(0));i=rand();这样i就是一个真正意义上的随机数。</p>
<h2 id="a-6325a92f">原因</h2>
<p>rand()产生伪随机数，srand函数提供种子，种子不同产生的随机数序列也不同，所以通常先调用srand函数time(0)返回的是系统的时间（从1970.1.1午夜算起），单位：秒，种子不同当然产生的随机数相同几率就很小了。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/307153.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
