问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用c语言产生一定范围内的随机数?

发布网友 发布时间:2022-04-23 18:27

我来回答

15个回答

热心网友 时间:2022-04-12 00:39

利用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 <stdlib.h>

#include <stdio.h>

#include <time.h>           // 使用当前时钟做种子

void main(void)

{int i;

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

for(i = 0; i < 10;i++)                          // 打印出 10 个随机数

printf("%d\n", rand() );

}

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

#include <stdlib.h>

#include <stdio.h>

#include <time.h> 

int main( )

{int i;

srand((unsigned)time( NULL ) );  

for(i = 0; i < 10;i++)

printf("%5.2f\n", rand()/32767.0);

}

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

#include <stdlib.h>

#include <stdio.h>

#include <time.h> 

int main( )

{int i;

srand((unsigned)time( NULL ) );  

for(i = 0; i < 10;i++)

printf("%d\n", rand()%100+1);

}

扩展资料:

C语言高效编程技巧:

一:以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题

二:数学方法解决问题 

数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。

三:使用位操作

实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。

参考资料来源:百度百科-C语言

热心网友 时间:2022-04-12 01:57

srand((int)time(NULL));设定随机数种子

例子如下:

直接编译,程序执行结果如下图所示:

扩展资料:

随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。

产生随机数有多种不同的方法。这些方法被称为随机数发生器。随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系。



热心网友 时间:2022-04-12 03:32

srand((int)time(NULL));设定随机数种子
rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!

下面是搜回来的:

问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。

专家解答:

之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。

问题2: 我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
专家解答:
你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
//相关语句
}

参考资料:http://www.china-askpro.com/msg22/qa36.shtml

热心网友 时间:2022-04-12 05:23

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,可以称它为种子。
为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。
C语言产生一定范围的随机数的源代码如下:
#include<stdio.h>
#include<stdlib.h>
int
main()
{
int
i;
for(i=0;
i<10;
i++)
//随机产生10个数。
{
printf("%d\n",
rand());
}
return
0;
}
扩展资料
1、如果要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int
number)函数,然后在main()里面直接调用random()函数。
2、在对rand()的前三次调用中,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此,只有再次给srand()提供一个随机的“种子”值,才能再次得到一个随机数。

热心网友 时间:2022-04-12 07:31

随机生成在[x,y]内的整数
int
k;
k=x+rand()%(y-x+1)
//即为所求范围内随机生成的数,rand()%a的结果最大为a-1
使用:#include<stime.h>
strand(time(0));
则每次生成不同的随机数

热心网友 时间:2022-04-12 09:56

srand(seed);
//产生随机种子seed,可以手动指定,也可以取当前系统时间。取系统时间则为srand((unsigned)time(NULL));
//(需要事先包含time.h);
int
randnum=rand()
%
N;
//调用rand()函数,根据seed产生一个0~N(N为任意整数)以内的随机数,将值返回给整型变量randnum。

热心网友 时间:2022-04-12 12:37

要想应用好c语言产生的影响。就要学会网络上的语言。

热心网友 时间:2022-04-12 15:35

C语言的获取随机数的函数为rand(),
可以获得一个非负整数的随机数。要调用rand需要引用头文件stdlib.h。
要让随机数限定在一个范围,可以采用模除加加法的方式。
要产生随机数r,
其范围为
m<=r<=n,可以使用如下公式:
rand()%(n-m+1)+m
其原理为,对于任意数,
0<=rand()%(n-m+1)<=n-m
于是
0+m<=rand()%(n-m+1)+m<=n-m+m

m<=rand()%(n-m+1)+m<=n

热心网友 时间:2022-04-12 18:50

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,可以称它为种子。
为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。
C语言产生一定范围的随机数的源代码如下:
#include<stdio.h>
#include<stdlib.h>
int
main()
{
int
i;
for(i=0;
i<10;
i++)
//随机产生10个数。
{
printf("%d\n",
rand());
}
return
0;
}

热心网友 时间:2022-04-12 22:21

也要大概接近呀,因为两次调用rand函数的时间通常是不同的,则计算出来的伪随机序列就是完全相同的。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值;
for(int i=0;100000;i++)
{
//相关语句
}

参考资料.h>time,而由于计算机运行很快;i<i++)
{
srand( (unsigned)time( NULL ) ):

问题1;设定随机数种子
rand()%100,需要在每次产生随机序列前。

热心网友 时间:2022-04-13 02:09

头文件添加
#include<stdlib.h>
随机函数:rand()%X
X就是你要的范围,不过这里是默认0开始的,要除掉0的话,就写成rand()%X+1,就可以了
int i;
i=rand()%20;
类似这样用

热心网友 时间:2022-04-13 06:14

1.此方法并不保证 每个数字是等可能的
//在程序中初始化随机种子 一个程序只需一次
srand((unsigned int)time(NULL));
//再用rand()返回的值%范围的大小
//rand()%(B-A);
//比如要求100~10000之间的随机数
rand()%(10000-100)+100;

2.
//注意1的方法不能求范围超过65535的随机数
//在程序中初始化随机种子
srand((unsigned int)time(NULL));
//rand()/(65536.0)*(B-A)+A;
//比如要求10~100000000之间的随机数
rand()/(65535.0)*(100000000-10)+10;

热心网友 时间:2022-04-13 10:35

借用楼上的程序说明一下,谢谢

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

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

int main(void)
{
int i;

randomize();/*初始化随机种子,如果没有这句,就会一直生成相同的数*/
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);/*这里,是生成100以内的数,如果是10以内,就%10,如果55以内,就%55,明白?*/
return 0;
}

热心网友 时间:2022-04-13 15:13

整数还是小数啊。
整数好办,比如要产生N到M的,其中N-M=Q

a = rand()%Q+N;

记得在前面加上#include <time.h>
并在程序一开始处
void main ()
{
这里加上
srand (time(0)) ;

热心网友 时间:2022-04-13 20:08

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

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

int main(void)
{
int i;

printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
函数名: random
功 能: 随机数发生器
用 法: int random(int num);
程序例:

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

/* prints a random number in the range 0 to 99 */
int main(void)
{
randomize();
printf("Random number in the 0-99 range: %d\n", random (100));
return 0;
}

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

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

int main(void)
{
int i;

randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
母亲55岁得了糖尿病,吃药控制在9以内,最近有点效果不好,到13点几了... ...很害怕发展成糖尿病足,有什么方法控制血糖吗? 我的妈妈得了糖尿病,那个什么值8点多,似乎不能治好,那么如果能控制血糖... 由糖尿病引起的白内障怎样才能控制?最好用中药的方法或者说按摩哪个穴位... 新凯美瑞2.5发动机和8自动变速箱是进口的吗? 网页图片下载神器!图片收集与管理利器Eagle ...怎么弄到自己的电脑里面去自己玩,不用4399游戏盒。 关于足部反射区,懂中医的入 脚部反射区图解图片 足部反射区疼痛怎么办 C语言如何编程产生随机数? C语言怎样产生一定范围的随机数? C语言的发展史是怎样的? C语言的产生与发展 小学生学雷锋活动方案 吉多乡小学师生健康中国健康主题教育活动实施方案 小学四年级的班队会活动的方案,急急急!!! 小学生呵护心灵关爱成长活动方案 念慈菇的功效和作用 慈菇能生吃吗,山慈菇的功效与作用及禁忌分别是什么 慈姑怎么做好吃 慈菇瘦肉汤要怎样制作? 茨菇片怎么做 慈菇的营养价值 慈菇的作用与功效有哪些 茨菇的特性及功效.禁忌搭配哪些食物 茨菇怎样烧最美味? 慈姑有什么作用? 茨菇的功效与作用 茨菇怎样做好吃 慈菇的功效与作用是怎样的? c语言,如何产生随机数 C语言如何产生一定范围内一定数量的不同随机数 在C语言中如何产生随机数 c语言如何产生在一定范围内的随机数 C语言如何srand和rand函数产生10个1-100内的随机数 领克09phev没电了还是四驱吗 领克09P电池是36a吗? 领克09申请的充电桩多少kw 领克09PHEV挂倒挡有杂音 还在纠结领克09 PHEV和理想one?这里有答案! 兰州地区领克09等车时间 领克09phev保持电量每次都要调吗 领克09tjp跟车时长 30多万预算,国产混动SUV,到底怎么选? 领克09PHEV的工具在哪儿 领克09mhev驾驶模式有几种 领克09预售一个月订单破万,高端及新能源车型更受欢迎 怎样远程控制风行电视? 领克09+PHEV33.59W那款6座, 26.59万起售,领克09导购分析,哪一个版本值得选?