C语言如何实现随机事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何实现随机事件相关的知识,希望对你有一定的参考价值。

运行程序让主板蜂鸣器随机发出1-5次声音,然后要求手动输入响应次数,必须与随机响应次数一样,如果一样判断正确,如果不一样判断为错,如何用C语言实现??
1-5次随机不是依次1-5,而是1或2 或3或4或5

哎,还没分!!!!
#include <stdio.h>
#include <stdlib.h>

unsigned int get_rand_num_1_5( void )

/* 获取随机数,并保证每次获得的不一样 */
srand((unsigned)time(NULL));
unsigned int r=rand();
/* 将随机数变为1-5之间 */
r = 1 + r%5;
return r;


int main( void )

/* 自动获取的数字 */
int rand_num;
/* 要手动输入的数字 */
int input_num;
while(1)

rand_num = get_rand_num_1_5();
printf( "The rand num is %d\n",rand_num );
printf("please input the num :\n");
scanf( "%d",&input_num );
if( input_num == input_num )

printf("you are right!\n");

else

printf( "The rand num is %d\n",rand_num );
printf( "The input num is %d\n",input_num );
printf("you are wrong!!!");


return 0;
参考技术A for(n=1;n<int(random()*5+1);n++)beep();
scanf("%d",t);
if (t==n)printf("yes!\n");
else printf("no!\n");
参考技术B 随机数的话可以与时间联系起来,可以近似成为“随机”的

C语言之实现随机数产生算法

随机数,也就是在不同的时刻产生不同的数值。在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现?

如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行。其实就是相当于第1次调用rand返回a1,第2次返回a2,…,第n次返回an,这样每次返回的数值都不一样,也就是相当于随机数了。但是其实不是真正的随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。

      在当前的计算机领域,许许多多的随机数算法正是基于这样的原理产生,一般情况下我们在平时使用rand函数的时候,需要种钟子,也就是种随机数种子,确保每一次产生的数值不一样。这时候我们需要一个srand()的函数,然后在一定的时间里time()函数产生不同的序列。

      一般在写的时候是这样:srand(time(NULL)) ;这样就相当于种种子。接下来我们来看一下具体的代码:

#include <stdio.h>
#include <time.h>
static unsigned int randseed;
/* 实现伪随机数的支持 */
unsigned int Curl_rand(void)
{
  unsigned int r;
  /* 返回一个无符号32位整型的伪随机数. */
  r = randseed = randseed * 1103515245 + 12345;
  return (r << 16) | ((r >> 16) & 0xFFFF);
}

void Curl_srand(void)
{
  /* 产生随机的伪随机数序列。 */
  randseed = (unsigned int) time(NULL);
  Curl_rand();
  Curl_rand();
  Curl_rand();
}

int main(void)
{
	srand();
	unsigned int i ;
	int j = 10;
	printf("产生10个随机数:\n");
	while(j != 0){
		i = Curl_rand() % 100 ;
		printf("i:%d\n",i);
		j-- ;
	}
	return 0 ; 
} 
执行结果:

技术分享
如果不用这样的算法,我们调用系统实现的接口是这样:

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

int main(void)
{
	//种种子 
	srand(time(NULL));
	int i ;
	int j ;
	for(i = 0 ; i < 10 ; i ++)
	{
		//产生10个100以内的随机数 
		j = rand()%100 ;
		printf("j:%d\n",j);
	} 
	return 0 ;
}
运行结果:

技术分享

        






以上是关于C语言如何实现随机事件的主要内容,如果未能解决你的问题,请参考以下文章

用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数?

C语言之实现随机数产生算法

C语言随机数字

c语言 获取鼠标键盘事件

c语言如何实现字符的批量输入和批量输出?

假设输出25个数字,每隔5个数换行,C语言中如何实现?