⑴ c语言如何产生一定范围内一定数量的不同随机数
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#define a 16807//or 48271
#define m 2147483647
#define q (m/a)
#define r (m%a)
static long int seed = 1;
//return rand long in [1,m]
long int pm_rand(void)
{
long hi = seed / q;
long lo = seed % q;
long tmp = a * lo - r * hi;
if(tmp > 0)
seed = tmp;
else
seed = tmp + m;
return seed;
}
int main(void)
{
for(int i = 0;i < 100;++i)
printf("%ld ",pm_rand());
puts("");
return 0;
}
(1)c语言产生随机数范围内扩展阅读
不指定范围产生随机数的源代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //随机产生10个数。
{
printf("%d
", rand());
}
return 0;
}
⑵ 如何在C语言中生成一定范围内的随机数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
srand()((int)time(NULL));设定随机数种子
rand()()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()()%44+16(这里44由59-16+1得到)。其他情况如法炮制!
各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。
参考资料:http://..com/question/132839023.html
⑶ c语言怎样产生一定范围的随机数
#include <stdlib.h>
int a = rand() %100;
产生0-99的随机数
#include <time.h>
srand(unsigned(time));
用来重置种子时间,不然生成出来的都是跟第一次一样的数
⑷ 如何在C语言中生成一定范围内的随机数
srand((int)time(NULL));设定随机数种子
rand()%100;产生0-99的随机数。
高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!
⑸ C语言:用rand函数 产生1到10范围内的随机数的问题,有点地方求教
这样写,count[10]={0};
intn;
while(1)
{
n=random();
if(n%10==0)
count[9]++;
else
count[n%10-1]++;//注意count的下标是n%10-1不是n%10+1
}
⑹ 如何用c语言产生一定范围内的随机数
利用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 ", 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 ", 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 ", rand()%100+1);
}
(6)c语言产生随机数范围内扩展阅读:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
⑺ C语言 关于产生指定范围内的随机数
以下代码供参考,注释比较详细了,有不懂再问:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main(){
int aim,i;
int poker[52]={0};/*已发的牌在数组中,初始状态为0,表示没发过,置为1表示已发过,避免重复发放*/
srand((unsigned)time(NULL)); /*随机数初始化*/
/*产生一个随机数0-51,并保存到aim变量中*/ aim = rand()%52;
/*模拟发不含大小王牌的扑克牌,
将生成的随机数映射为每张扑克牌。
按照花色(梅花、方块、红桃、黑桃)和大小(2~10、J、Q、K、A)顺序进行映射。
映射规则如下:
梅花:0-12
方块:13-25
红桃:26-38
黑桃:39-51
*/
/*以下模拟发52张牌,可以根据需要修改循环次数发任意张*/
for(i=1;i <= 52; i++)
{
aim = rand()%52;
/*已发的牌在数组中置为1,避免重复发放*/
while(poker[aim] == 1)
{
aim = rand()%52;
}
poker[aim] = 1;
printf("\n第 %d张牌:",i);
switch(aim/13)
{
case 0:
printf("梅花 ");
break;
case 1:
printf("方块 ");
break;
case 2:
printf("红桃 ");
break;
case 3:
printf("黑桃 ");
break;
default:break;
}
switch(aim%13+1)
{
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
printf("%2d",aim%13+1);
break;
case 1:
printf(" A");
break;
case 11:
printf(" J");
break;
case 12:
printf(" Q");
break;
case 13:
printf(" K");
break;
default:break;
}
}
}
⑻ 如何在C语言程序中产生一个有范围的随机数
C语言产生有范围随机数需要random函数。
random即随机数发生器,使用之前需要使用Randomize语句进行随机数种子的初始化。RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。
VB里用
NEW
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;
}
⑼ C语言限制范围产生随机数
你可以用循环语句的循环次数决定产生多少个随机数,也可以自己设个计数器统计个数。
例如,产生20个随机整数:
int a[20], i, n=20;
for (i=0;i<n;i++) a[i]=rand()%101-50; 产生20个-50到+50间的随机数。
例如, 产生m个随机数:
double b,n=0,m;
printf("input m: "); scanf("%d",&m);
while (n<m){
b = rand();
printf("%lf\n",b);
n++;
}
(随机数种子 用 srand(time(0)); 设定, 包含 time.h 头文件)
⑽ c语言中生成指定大小范围内(10…200以内)的一个随机数
您好,这样就可以了
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain()
{
intn;
srand(time(NULL));//初始化随机数种子
n=rand()%191+10;
printf("%d ",n);
}