C/C++产生指定范围和不定范围随机数的实例代码

一. 不指定范围产生随机数
用到函数rand(),函数原型为int ra
nd(),无参数。此时会产生一个介于0~RAND_MAX间的整数。RAND_MAX的大小可以查看,在include文件夹(linux在usr目录、windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关。
参考代码:

代码如下:

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

int main()
{
        int i;
        for(i=0; i<10; i++)  //随机产生10个数。
        {
            printf("%d\n", rand());
        }
        return 0;
}

二. 指定范围产生随机数,产生0到某个数的随机数

没有现成的函数,但是可以通过取余得到

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define Random(x) (rand() % x) //通过取余取得指定范围的随机数
int main()
{
        int i;
        int dis;               //产生[0, dis)之间的随机数,注意不包括dis
        for(i=0; i<10; i++)
        {   
            printf("%d\n", Random(dis));
        }
        return 0;
}

说明下:假设dis取5

注意一个问题:以上两个程序每次执行产生的结果是相同的,既是个伪随机数。rand()产生随机数与具体的种子有关,当不特意用srand()获取种子时,种子的默认值为1,因此需要用srand()函数产生不同的种子,srand函数原型:void srand(unsigned seed);为了产生不同的种子值,通常用时间作为参数值。例如对于一,修改程序如下:

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
        int i;
        srand((int)time(NULL));     //每次执行种子不同,生成不同的随机数
        for(i=0; i<10; i++)
        {
          printf("%d\n", rand());  //因为执行太快,不到一秒钟,10个随机数是相通的,但是每次执行是不同的
        }
        return 0;
}

三. 指定范围产生随机数

要求:指定范围(m,n),m、n关系不定,随机数包括m和n
想方设法,把范围(m,n)改变到(0,X),到最后再转移回去。三种情况

代码如下:

1:m=n此时不该叫随机数,这里返回m
2:m>n:
        标记pos=n,距离差pos=m-n+1
     返回 rand() % dis + pos

3:n>m:
        标记pos=m,距离差=n-m+1
     返回rand()%dis + pos

参考代码:

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Random(int m, int n)
{
        int pos, dis;
        if(m == n)
        {
            return m;
        }
        else if(m > n)
        {
            pos = n;
            dis = m - n + 1;
            return rand() % dis + pos;
        }
        else
        {
            pos = m;
            dis = n - m + 1;
            return rand() % dis + pos;
        }
}
int main()
{
        int i, m, n;
        srand((int)time(NULL));
        m = -3;
        n = -7;
        for(i=0; i<10; i++)
        {
            printf("%d\n", Random(m, n));
        }
        return 0;
}

升华
srand((unsigned)time(null));
(a,b) (rand()%(b-a+1))+a-1
[a,b) (rand()%(b-a))+a
(a,b] (rand()%(b-a))+a+1
[a,b] (rand()%(b-a+1))+a

(0)

相关推荐

  • C++随机数生成实例讲解

    如果让你用C++来生成0--N-1之间的随机数,你会怎么做?你可能会说,很简单,看: srand( (unsigned)time( NULL ) ); rand() % N; 仔细想一下,这个结果是随机的吗(当然,我们不考虑rand()函数的伪随机性)? 不是的,因为rand()的上限是RAND_MAX,而一般情况下,RAND_MAX并不是N的整数倍,那么如果RAND_MAX % = r,则0--r之间的数值的概率就要大一些,而r+1--N-1之间的数值的概率就要小一些.还有,如果N > RAN

  • C++ 随机数与随机种子数的实例

    C++ 随机数与随机种子数的实例 实现效果图: 实例代码: #include <stdlib.h> #include <iostream> #include <ctime> using namespace std; void Test() { int ran_num = 0; cout<<"不指定seed, "; for(int i=0; i<10;i++) { ran_num = rand()%6; cout<<ran

  • C++基于随机数实现福彩双色球的方法示例

    本文实例讲述了C++基于随机数实现福彩双色球的方法.分享给大家供大家参考,具体如下: 这是前段时间写的福彩双色球一个小应用 本来可以一个文件搞定,反正也没多大,就分开了. 头文件doubleColorBallR2.h #ifndef _DoubleColorBallR2_h #define _DoubleColorBallR2_h #include <iostream> #include <stdio.h> #include <vector> #include <

  • C++产生随机数的实现代码

    C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C++里没有自带的random(int number)函数. (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX值至少为32767.例如: 复制代码 代码如下: #include<stdio.h>#include <iostream> 复制代码 代码如下: int _tmain(int argc,

  • C++编写生成不重复的随机数代码

    C++编写生成不重复的随机数代码 vector<int> getRandom(int total) { srand((int)time(NULL)); std::vector<int> input = *new std::vector<int>(); for (int i = 0; i < total; i++) { input.push_back(i); } vector<int> output = *new vector<int>();

  • C语言/C++如何生成随机数

    本文分享了C语言/C++如何生成随机数的具体实现方法,供大家参考,具体内容如下 C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数. (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdlib.h, 其值为2147483647. 例如: #include<stdio.h> #i

  • 简单谈谈关于C++中大随机数的问题

    前言 大家都知道C++的随机数最大值是RAND_MAX,在头文件<stdlib.h>中定义.在windows平台下的VS是0x7fff,在MacBook的XCode是int的最大值.看来不同的平台是不同的.但是windows的是在太小了. 先上一个平时的随机函数: int littleRand(int min, int max) { //考虑到不同平台下RAND_MAX可能不等于0x7fff,所以不能把RAND_MAX*RAND_MAX,以免int爆掉 if (min > max) {

  • C语言/C++中如何产生随机数

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件. 使用rand()函数获取一个随机数如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdlib.h, 其值为2147483647. 例子

  • C/C++产生随机数函数简单介绍

    计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了.) 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,

  • C/C++产生指定范围和不定范围随机数的实例代码

    一. 不指定范围产生随机数用到函数rand(),函数原型为int rand(),无参数.此时会产生一个介于0~RAND_MAX间的整数.RAND_MAX的大小可以查看,在include文件夹(linux在usr目录.windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关.参考代码: 复制代码 代码如下: #include<stdio.h>#include<stdlib.h> int main(){        int

  • 线程按指定顺序输出字符到数组的实例代码

    题目: 有三个线程,线程1的功能就是向字符数组输出A,线程2的功能就是向字符数组输出B,线程2的功能就是向字符数组输出C,要求按顺序向数组赋值ABCABCABC,ABC的个数由线程函数1的参数指定. 接口说明: void Init();  //初始化函数 void Release(); //资源释放函数 unsignedint__stdcall ThreadFun1(PVOID pM)  ; //线程函数1,传入一个int类型的指针,用于初始化输出A次数,资源需要线程释放 unsignedint

  • JavaScript截取指定长度字符串点击可以展开全部代码

    文章的篇幅往往不是那么恰到好处,如果以原有的篇幅展示,那么有可能会影响网页的布局或者美观度,这个时候就要根据情况适量截取一定的字符串,以适应布局,不过当点击一个按钮的时候依然可以展开全部的内容,下面就通过一个实例详细介绍一下如何实现此效果,代码示例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" conten

  • js获取指定字符前/后的字符串简单实例

    如下所示: <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <script type="text/javascript"> /* string 字符串; str 指定字符; split(),用于把一个字符串分割成字符串数组; split(str)[0],读取

  • js生成随机数(指定范围)的实例代码

    1.随机生成4位数的随机数 <script language="javascript"> /** * 随机生成4位的随机数 * http://www.yulu.jb51.net */ document.write(parseInt(10*Math.random())); //输出0-10之间的随机整数 document.write(Math.floor(Math.random()*10+1)); //输出1-10之间的随机整数 function RndNum(n){ var

  • Android 删除指定包名的App实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: /** * check and delete the old package app if it exists. */ private void checkOldPackage() { String packageName = "xxx.xxx.xxx.xxx"; if (isAvilible(this, packageName)) { Intent uninstall_intent = new Intent(); uninstal

  • android指定DatePickerDialog样式并不显示年的实现代码

    有很多地方要用到DatePickerDialog.但有时项目用到的主题样式是很丑的样式,显示出来的真丑. 而我们真正想要的样式是这样的. 这个就漂亮多了.而且很多的时候都不需要显示"年",下面看通过指定主题来显示自己想要的样式,并且通过反射机制来隐藏"年",而且可以举一反三,对这上面的东西做任务的修改. private void showDatePickerDialog() { Calendar calendar = Calendar.getInstance();

  • 设置cookie指定时间失效(实例代码)

    实例如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> // 设置cookie在当天指定时间点过期并提示 function setCookie(name,value,Deadline){ // 获取当前日期对象 var curD

  • mssql中获取指定日期所在月份的第一天的代码

    获取指定日期月份的第一天,你可以使用DATEADD函数,减去指定日期的月份过去了的天数,即可. 复制代码 代码如下: CREATE FUNCTION [dbo].[udf_FirstDayOfMonth] ( @Date DATE ) RETURNS DATETIME AS BEGIN RETURN CAST(DATEADD(day,1 - DAY(@Date), @Date) AS DATETIME) END 或者,用DATEDIFF计算指定日期与日期开始之时,相隔几个月,然后再DATEADD

  • Oracle删除字段中的空格、回车及指定字符的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: create or replace procedure PROC_test is --Description:删除字段中的指定字符(回车chr(13).换行chr(10)) --By LiChao --Date:2016-03-01 colname varchar(20); --列名 cnt number; --包含换行符的列的行数 v_sql varchar(2000); --动态SQL变量 begin --读取表中的列 for col i

随机推荐