当前位置:  编程技术>c/c++/嵌入式

使用c语言生成随机数的示例分享

    来源: 互联网  发布时间:2014-10-24

    本文导语:  这是一个自己用c写的不重复产生随机数的代码,且只有输入q才能退出程序。 代码如下:#include #include #include #define MAX  100 int main(void){ int i, j, flag, num, a[MAX] = { 0 }, max, ch; srand((unsigned)time(NULL));  printf("Please input max number(q to quit...

这是一个自己用c写的不重复产生随机数的代码,且只有输入q才能退出程序。

代码如下:

#include
#include
#include
#define MAX  100

int main(void)
{
 int i, j, flag, num, a[MAX] = { 0 }, max, ch;
 srand((unsigned)time(NULL));

 printf("Please input max number(q to quit): ");

  a:while ((scanf("%d", &max)) == 1)
 {
  if (max >= 40)
  {
   printf("Please input max number(q to quit): ");
   while (getchar() != 'n')
    continue;
   continue;
  }


  for (i = 0; i < max; ++i)
  {
   do{num = rand() % 41 + 1;
   }while(num==8||num==36);
   flag = 1;
   for (j = 0; j < i; ++j)
   {
    if (num == a[j] || num == 8 || num == 36)
    {
     flag = 0;
     break;
    }
   }
   if (flag)
    a[i] = num;
   else
    --i;
  }
  while
   (getchar() != 'n') continue;
  for (i = 0; i < max; ++i)
   printf("%d ", a[i]);
  printf("n");
  printf("Please input max number(q to quit): ");
 }
 if (getchar() != 'q')
 {
  puts("q to quit,please!");
  printf("Please input max number(q to quit): ");
  while (getchar() != 'n')
   continue;
  goto a;
 }
 printf("Bye!");
 return 0;
}



这里有一个比较详细的说明,大家可以看一下

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。

可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。

rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。 在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一 如何产生不可预见的随机序列呢

利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

下面是0~32767之间的随机数程序:

代码如下:

#include
#include
#include     //使用当前时钟做种子

void main( void )
{int i;
srand( (unsigned)time( NULL ) );   //初始化随机数
     for( i = 0; i < 10;i++ )     //打印出10个随机数
   printf( " %dn", rand() );
}

根据上面的程序可以很容易得到0~1之间的随机数:

代码如下:

#include
#include
#include
main( )
{int i;
srand( (unsigned)time( NULL ) ); 
for( i = 0; i < 10;i++ )
  printf( "%5.2fn", rand()/32767.0);
}

而产生1~100之间的随机数可以这样写:

代码如下:

#include
#include
#include
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%dn", rand()%100+1);
}

二,三个通用的随机数发生器,推荐用第三个

函数名: rand
功能: 随机数发生器
用法: void rand(void);
程序例:

代码如下:

#include
#include
int main(void)
{
int i;
printf("Ten random numbers from 0 to 99nn");
for(i=0; i

    
 
 

您可能感兴趣的文章:

  • 请问Java随机数的使用?
  • php使用codebase生成随机数
  • C#使用伪随机数实现加密用户密码的方法
  • 不使用Math.random方法生成随机数(随机数生成器)
  • Python random模块(获取随机数)常用方法和使用例子
  • Django项目使用示例步骤及代码
  • linux使用shell脚本,如何创建用户,并设置用户密码?能否给出示例?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • curl不使用文件存取cookie php使用curl获取cookie示例
  • python使用循环实现批量创建文件夹示例
  • jQuery 回车事件enter使用示例
  • jquery中交替点击事件toggle方法的使用示例
  • php中的strpos使用示例
  • sql使用cast进行数据类型转换示例
  • mysql求和函数使用示例
  • c#闭包使用方法示例
  • java使用正则表达校验手机号码示例(手机号码正则)
  • 使用java执行定时任务示例
  • java的split方法使用示例
  • c++11可变参数使用示例
  • c#的params参数使用示例
  • android开发教程之switch控件使用示例
  • 使用python实现strcmp函数功能示例
  • c#使用资源文件的示例
  • 不使用php api函数实现数组的交换排序示例
  • java协变返回类型使用示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何使用arm-uclibc-gcc将.c文件编译生成.a,将.c文件编译生成.cgi?
  • 如何使用gcc生成dynamic objs
  • 在Linux下使用GCC如何编译生成Windows下使用的DLL?
  • vim生成的.cpp~是什么文件?我使用vim编辑的时候出现了好多.cpp~文件
  • 请教各位高手,怎么才能使用XML生成一个数型菜单
  • 不知为何?使用aclocal不能生成aclocal.m4文件?请问是什么原因?
  • 使用GetInvalidFileNameChars生成文件名
  • 欢迎使用、加入Arrow项目开发--一个自动化代码生成工具
  • 寻 懂的redhat linux 下 . 使用automake和autoconf 自动生成Makefile 的 达人。
  • 请问在linux下面用flex生成的c程序在windows下可以正确使用吗?
  • oracle使用sql脚本生成csv文件案例学习
  • 如何在使用nohup的时候不让它生成nohup.out
  • 哪位高手指点一下:使用libxml2是否可以动态生成xml文件?
  • 使用log4j生成的.log文件,前缀中是不是必须含有当日日期?
  • LINUX 交叉编译后 生成的库如何使用 ?
  • gvim下如何使用已经用Ctags生成好的C++标准库的Tags?
  • 我想在任何地方使用package aaa;都能使aaa目录生成在同一个地方,而不是当前目录?
  • 在使用TC编译由 lex 生成的.c文件时遇到的一些问题,请高手指教!!!
  • 生成so共享库和使用
  • c++生成dll使用python调用dll的方法
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • java协变返回类型使用示例 iis7站长之家
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3