C语言怎样产生一定范围的随机数?

C语言怎样产生一定范围的随机数?,第1张

编译环境为:vs2013

产生1到3的整型随机数的代码如下:

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

#define max 3   //这个函数的意义为:随机生成最大的数为3

#define min 1    //这个函数的意义为:随机生成最小的数为1

int main()

{

int num

srand(time(0))

num = rand() % (max - min) + min // 这里的意义,“%”为模运算

printf("随机数为:%d\n", num)

system("pause") //这个代码可以让d出的黑框不会一下就消失

return 0

}

扩展资料:

根据密码学原理,随机数的随机性检验可以分为三个标准:

条件一、统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。

条件二、密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。

条件三、真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。

随机数分为三类:

①伪随机数:满足第一个条件的随机数。

②密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器

计算得出。

③真随机数:同时满足三个条件的随机数。

源程序如下:

#include "pch.h"

#include <iostream>

#include <time.h>

using namespace std

int main()

{

const int n = 10000

int number[n] = { NULL }

srand((unsigned)time(NULL))

number[0] = rand() % n      //第一个随机数无需比较

cout <<number[0] <<" "

for (int i = 1i <ni++)     //其余随机数循环产生

{

int j = 0;

number[i] = rand() % n

while (1)

{

if (number[i] == number[j])   //若有相同则继续循环重新安排随机数

{

number[i] = rand() % n

j = 0       //若遇到相同的就从头遍历

continue

}

if (j == (i - 1))      //若遍历完就跳出

break

j++

}

cout <<number[i] <<" "

}

cout <<endl

return 0

}

程序运行结果:

扩展资料:

其他实现方式:

#include<time.h>//使用 time 函数必须引入 time.h 头文件

#include<stdlib.h>

int main()

{

srand((int)time(0))

int rand_num = rand()

printf("rand_num = %d\n", rand_num)

return 0

}

源程序代码以及算法解释如下:

产生1-10随机数程序:

#include <iostream>

#include <time.h>

using namespace std

int main()

{

const int n = 10//定义随机数个数

int number[n] = { NULL }//定义随机数存储的数组

srand((unsigned)time(NULL))//初始化随机函数

number[0] = rand() % n//第一个随机数无需比较

cout <<number[0] <<" "

for (int i = 1i <ni++)//其余随机数循环产生

{

int j = 0

number[i] = rand() % n//产生随机数

while (1)

{

if (number[i] == number[j])//若有相同则继续循环重新安排随机数

{

number[i] = rand() % n//产生随机数

j = 0//若遇到相同的就从头遍历

continue

}

if (j == (i - 1))//若遍历完就跳出

break

j++

}

cout <<number[i] <<" "

}

cout <<endl

return 0

}

程序运行结果如下:

扩展资料:

利用vector进行随机数输出:

#include <iostream>

#include <vector>

#include <time.h>

using namespace std

int main()

{

const int n = 10

int randnum

vector<int>number

for (int i = 0i <ni++)

{

number.push_back(i + 1)    //从尾部添加元素

cout <<number[i] <<" "

}

cout <<endl

srand((unsigned)time(NULL))

for (int j = 0j <nj++)     //其余随机数循环产生

{

randnum = rand() % (n - j)    //rand函数生成的随机数是0-(n-1)

cout <<number.at(randnum) <<" "

number.erase(number.begin() + randnum)

}

cout <<endl

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11054907.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存