‘壹’ C语言的随机抽样怎么编程
用rand函数或srand函数
rand和srand的用法
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。
rand(产生随机数)
表头文件: #include<stdlib.h>
定义函数 :int rand(void)
函数说明 :
因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
返回值:
返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。
范例:
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
执行:
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数
srand(设置随机数种子)
表头文件:#include<stdlib.h>
定义函数:void srand (unsigned int seed);
函数说明:
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
范例
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
执行:与rand范例比较
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7
又或:
用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))产生一个0到n之间的随机数
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
除以上所说的之外,补充一点就是srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字。
MSDN中的例子。
// crt_rand.c
// This program seeds the random-number generator
// with the time, then displays 10 random integers.
//
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main( void )
{
int i;
// Seed the random-number generator with current time so that
// the numbers will be different every time we run.
//
srand( (unsigned)time( NULL ) );
// Display 10 numbers.
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
printf("\n");
// Usually, you will want to generate a number in a specific range,
// such as 0 to 100, like this:
{
int RANGE_MIN = 0;
int RANGE_MAX = 100;
for (i = 0; i < 10; i++ )
{
int rand100 = (((double) rand() /
(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
printf( " %6d\n", rand100);
}
}
总结:
我们知道rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是
初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,
那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的,对了,你知道time() 函数的功能是返回从1970/01/01到现在的秒数的吧,可能这个起始时间不正确,你查一下对不对吧,C还提供了另一个更方便的函数, randomize()
原形是void randomize(),功能是用来始初rand() 的种子的初始值,而且该值是不确定的,它相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h罢了
‘贰’ C语言如何编程产生随机数
楼主你好,给你个最简单的C程序
#include<stdio.h>
#include<stdlib.h>//这个是随机数函数rand()所在头文件,就像使用scanf要包含stdio.h。
voidmain()
{
inti=100;
while(i--)
{
printf("-------%d---",rand()%1000);
}
}
‘叁’ 用C语言编写程序:随机步
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
intmain()
{
chara[10][10];
inti=0,j=0,lettercount=1,ran=-1;
constcharbase_letter='A';
/*初始化*/
memset(a,'.',100);
a[0][0]=base_letter;
srand((int)time(0));
///////开始随机选择//////
while(1)
{
ran=((double)rand()/(RAND_MAX+1))*4;//获取随机数
switch(ran)
{
case0://向左走
if((i-1)>=0)
{
if(a[i-1][j]=='.')
{
a[i-1][j]=base_letter+lettercount;
++lettercount;
i-=1;
}
}
break;
case1://向右走
if((i+1)<10)
{
if(a[i+1][j]=='.')
{
a[i+1][j]=base_letter+lettercount;
++lettercount;
i+=1;
}
}
break;
case2://向上走
if((j-1)>=0)
{
if(a[i][j-1]=='.')
{
a[i][j-1]=base_letter+lettercount;
++lettercount;
j-=1;
}
}
break;
case3://向下走
if((j+1)<10)
{
if(a[i][j+1]=='.')
{
a[i][j+1]=base_letter+lettercount;
++lettercount;
j+=1;
}
}
break;
}
if(lettercount==26)//如果到Z就退出
break;
}
//打印
for(i=0;i<10;++i)
{
for(j=0;j<10;++j)
printf("%c",a[i][j]);
printf(" ");
}
return0;
}
现写的
‘肆’ C语言 随机函数
i++;是i=i+1;的缩写,c++之所以后面有++,就是因为有这样的缩写。
rand()是个函数,每次调用会给你返回一个unsigned int数,即无符号整数,具体这个函数可以网络rand(),返回的数用伪随机算法,在你看起来是随机变化的,范围在0~4294967295之间
%是c++的整数运算符,如果写a%b就是求a除以b以后的余数
rand()生成的数大于0~100之间的范围,rand()%100就会生成在0~99之间的随机整数
由于题目要求生成1~100之间的整数,所以用表达式rand()%100+1
如果想生成[0~3000)的随机数可以用表达式rand()%3000
如果想生成[a,b]范围的随机数,可以用表达式rand()%(b-a+1)+a来生成
比如要生成10~20之间的随机数,包含10和20在内,那么表达式是rand()%(20-10+1)+10
‘伍’ c语言,如何产生随机数
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函数
int main()
{ int i,number;
srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
for (i=0; i<50; i++)
{
number = rand() % 101; //产生0-100的随机数
printf("%d ", number);
}
return 0;
}
有以下几种情况:
(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。
(2) 如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:
例如:
rand()%100是产生0-99的随机数。
(3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。
srand()函数定义 : void srand (unsigned int seed);
通常可以利用geypid()或time(0)的返回值来当做seed。如果你用time(0)的话,要加入头文件#include<time.h>
‘陆’ C语言怎么编写指定个数的随机数
int
number[max]={0};
int
i;
srand((unsigned)time(null));/*播种子*/
for(i=0;i<max;i++)
{
number[i]=rand()%8+5;/*产生5-12以内的随机整数*/
printf("%d,",number[i]);
}
printf("\n");
‘柒’ C语言抽取随机数怎么编写
源程序代码以及算法解释如下:
产生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 = 1; i < n; i++)//其余随机数循环产生
{
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;
}
程序运行结果如下:
(7)c语言随机怎么编程扩展阅读:
利用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 = 0; i < n; i++)
{
number.push_back(i + 1);//从尾部添加元素
cout << number[i] << " ";
}
cout << endl;
srand((unsigned)time(NULL));
for (int j = 0; j < n; j++)//其余随机数循环产生
{
randnum = rand() % (n - j);//rand函数生成的随机数是0-(n-1)
cout << number.at(randnum) << " ";
number.erase(number.begin() + randnum);
}
cout << endl;
return 0;
}
‘捌’ C语言随机函数怎么弄
C++的随机函数
C++/c语言里,是没有办法得到一个真正的随机数序列的.想要等到一个真正的随机数序列,必须使用特定的随机数硬件发生器.也就是说,软件是没有办法产生真正的随机数.因为软件必须按照一定的逻辑来编写.既然是按照特定的逻辑(也就是说算法)来编写 ,那么产生的运算结果就是一定的.这一点,就是软件天生的特性.想想看,如果一个软件,同样的代码喝条件下,每次运行的结果不一样,那还有谁会用?
所以,在C++/C语言中,就有了"伪随机数"的概念.意思也就是说,通过一个特定的算法,产生一个假的随机数序列.那么,程序员又希望这个随机数序列跟接近真正的随机数序列,也就是希望得到的序列的不一样,所以有了一个"播种"的概念.
srand(unsgined int seed);
这个函数就是用来"播种"的.通过一个"种子"(SEED),来控制随机数的序列不一样.只要种子不一样,那么通过rand()得到的随机数序列就不一样.反过来说,如果种子一样,那么通过srand()得到的随机数就是一样的.
srand(0);
for( int i = 0; i < 10; i++)
{
cout<<rand()<<' ';
}
你试着将这个程序执行两次,你会发现两次的结果一样。那是因为,一旦“种子”确定了,那么这个随机数序列就确定了。软件天生的“行为可重复性”决定了这一点。
所以,一般在播种的时候,喜欢用一个随机的种子.在绝大多数的情况下,会使用当前的系统时间.这个数字在每次程序运行的时候都不一样.除非你手动的改系统时间.
编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令.
# include “stdio.h”
# include “stdlib.h”
# include “time.h” /*需引用的头文件*/
srand((unsigned)time(NULL)); /*随机种子*/
n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/
进一步解释
有
srand()设置随机数种子,rand()得到随机数
random()的函数原型为int random(int num)
它的作用是Returns an integer between 0 and (num-1)
而randomize的函数原型为void randomize(void)
它的作用是Initializes the random number generator with a random value.
它们的区别是前者限定随机数的产生范围,而后者这完全是随机的,另外使用这两个函数时
应含入
#include <stdlib.h>
#include <time.h>
头文件。
一个例子:
用法如下:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) ); //用系统时间当种子,对随机函数进行初始化
for( i = 0; i < 10;i++ )
{
k=rand()%100; //产生各个随机数
printf( " k=%d\n", k );
}
}
再抄个~
在VC中设计到随机数有两个函数
srand() and rand()
srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数
注意
1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数
2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下
如果我们想得到一个 0-60的随机数那么可以写成
int i;
i=rand()%60;
就可以了。
当然最好有个统一的标注如下:
int i;
srand((unsigned)time( NULL ));
i=rand()%60;
这样就OK了
例题随机取数,取1到99之间
1、#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n;//n为随机数
srand(time(NULL));
n=1+rand()%99;
cout<<n;
return 0;
}
2、#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a;
srand((unsigned) time(NULL));
a=rand()%99+1;
cout<<a;
}
3、#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int j;
srand((unsigned)time(NULL));
loop:
j=rand()%100;
if(j==0)
{
cout<<"error"<<endl;
goto loop;
}
else cout<<j<<endl;
}
4、如果象楼上的你的那种做法做下去
那应该是100%而不是98%
你一定是少了
srand(...........);
其实这个程序也不错
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int counter;
for(counter=0;counter<10;counter++)
{
srand(counter+1);
cout<<"Random number"<<counter+1<<":"<<rand()<<endl;
}
system("pause");
return 0;
}
5、#include <iostream.h>
#include <stdlib.h>
int main()
{
int shu =100;
int n;//n为随机数
srand(shu);
n=rand() % shu;
cout<<n;
return 0;
}
不拿时间作随机数,可以设一个种子数不清100这样就产生0~99间的随机数。
不过我没有测试从复率,谁测了告诉我一下。
‘玖’ C语言编程产生随机数
#include<stdio.h>
#include<math.h>
#define M 100
#define N 1000
main()
{
int a,b;
while(a=rand())
if(a>=M &&a<=N) {printf("%d\n",a);break;}
}
‘拾’ c语言随机编程
设置2个数组,一个保存素数,一个保存整数
设置一个素数算法,如果一个数是素数就存到素数数组,否则存到整数数组