随机语句源码
1. 如何在c语言中生成正态分布的随机数,要源代码~谢谢
随机生成一百个1至100的随机数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int main(int argc, char *argv[])
{
int i;
int a[N];
srand(time(NULL));
for(i=0;i<N;i++)
a[i]=rand()%100+1;
printf("生成的随机数为:\n");
for(i=0;i<N;i++)
{
printf("%5d",a[i]);
if((i+1)%10==0)
printf("\n");
}
system("PAUSE");
return 0;
}
输出结果如下:
生成的随机数为:
41 15 82 1 23 51 16 96 92 17
86 71 87 69 74 5 50 18 42 52
46 34 52 18 40 74 79 35 22 36
65 94 80 91 18 72 61 79 4 11
61 30 95 55 11 19 38 87 78 52
95 30 99 53 99 99 10 79 70 33
91 85 10 99 47 58 93 41 19 71
56 60 10 24 73 87 18 38 13 73
57 22 91 4 37 60 67 58 85 48
46 7 57 100 73 96 60 44 24 23
请按任意键继续. . .
2. 急!!!!!用c语言编写的产生正态随机数的源代码!!!
一般有两种算法:
算法一产生12个(0,1)平均分布的随机函数,用大数定理可以模拟出正态分布。
算法二用到了数学中的雅可比变换,直接生成正态分布,但此算法在计算很大规模的数时
会出现溢出错误。
测试程序:
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
double _random(void)
{
int a;
double r;
a=rand()%32767;
r=(a+0.00)/32767.00;
return r;
}
double _sta(double mu,double sigma)
{
int i;
double r,sum=0.0;
if(sigma<=0.0) { printf("Sigma<=0.0 in _sta!"); exit(1); }
for(i=1;i<=12;i++)
sum = sum + _random();
r=(sum-6.00)*sigma+mu;
return r;
}
double _sta2(double mu,double sigma)
{
double r1,r2;
r1=_random();
r2=_random();
return sqrt(-2*log(r1))*cos(2*M_PI*r2)*sigma+mu ;
}
int main()
{
int i;
double mu,sigma;
srand( (unsigned)time( NULL ) );
mu=0.0;
sigma=1.0;
printf("Algorithm 1:\n");
for(i=0;i<10;i++)
printf("%lf\t",_sta(mu,sigma));
printf("Algorithm 2:\n");
for(i=0;i<10;i++)
printf("%lf\t",_sta2(mu,sigma));
return 0;
}
//由均匀分布的随机数得到正态分布的随机数
#include <math.h>
float gasdev(im)
int *im;
{
static int iset=0;
static float gset;
float fac,r,v1,v2;
float ran1();//产生均匀分布的随机数,可利用系统函数改写
if (iset == 0) {
do {
v1=2.0*ran1(im)-1.0;
v2=2.0*ran1(im)-1.0;
r=v1*v1+v2*v2;
} while (r >= 1.0);
fac=sqrt(-2.0*log(r)/r);
gset=v1*fac;
iset=1;
return v2*fac;
} else {
iset=0;
return gset;
}
}
原理可找本数值算法方面的书看看。
3. 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;
}
(3)随机语句源码扩展阅读
不指定范围产生随机数的源代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //随机产生10个数。
{
printf("%d
", rand());
}
return 0;
}
4. 急 求c语言随机抽取姓名源码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct
{
charstr[20];//名字
intno;//号码
}a[99]={{"",0}};//初始化
intmain()
{
FILE*fp;
charch;
inti,n=0,choice,who;
fp=fopen("name.txt","r");
if(fp==NULL)
{
printf("cannotopenthefile ");
return1;
}
while((ch=fgetc(fp))!=EOF)
{
if(ch==' ')n++;//一行一个名字,计算人数
}
rewind(fp);
for(i=0;i<n;i++)
{
a[i].no=i;//每人对应的号码
fscanf(fp,"%s ",a[i].str);
}
srand(time(NULL));
for(i=1;i<n;i++)
{
printf("============= 1.抽取0.退出 ============= ");
scanf("%d",&choice);
if(choice==1)
{
loop:
who=rand()%n+1;
if(a[who].no==0)gotoloop;
puts(a[who].str);
a[who].no=0;//抽取过的标志为0
}
elsebreak;
}
fclose(fp);
return0;
}
5. 易语言随机抽签源码
变量A取随机数
变量B取随机数
变量C=A+"-"+B
6. vb 随机数 源代码
A为数组变量. 如果要读取A的数值,用循环就可以读出
'需要控件:command1,text1,text2
Dim A(20) As Single
Private Sub Command1_Click()
Call RndNum(Text1, Text2)
End Sub
Private Sub Form_Load()
Text1 = 2 '起点
Text2 = 100 '终点
End Sub
Sub RndNum(S1 As Long, S2 As Long)
For i = 1 To 20
A(i) = Format(Rnd() * S2, "#.00")
If A(i) < S1 Then A(i) = A(i) + S1
Print A(i)
Next i
End Sub
7. c/c++的随机函数的源代码怎么写
static int next=1;
int rand(void)
{
next = next * 1103515245 + 12345;
return (next/65536) % 32768;
}
return一句的功能只是把得数的绝对值控制在0~32767之间,关键是next = next * 1103515245 + 12345一句。next变量是静态的,变化以后的值是不消失的,下一次还可用,所以每执行一次next = next * 1103515245 + 12345就获得一个新值,这个新值被return取整除、取余除后控制在0~32767之间就形成了0~32767的随机数。比如第一次,next=1*1103515245 + 12345=1103527590,经return中的对65536取整、对32768取余后就是16838;若再来一次,next已经是1103527590了,那么next = next * 1103515245 + 12345就为next = 1103527590 * 1103515245 + 12345=1217759518843121895;但这个数已经溢出了,实际上表示成了-1770082073,经return中取整取余后返回的就是-27009;可以算出来,再下一次是10113……不过,你这个函数并不能产生真正意义上的“随机”数,因为作为基数的1103515245在每次开始时是不变的,所以只能得出同样的序列,即每次执行都产生16838、-27009、10113……这样一组无限多的数。所以实际的C随机函数rand()的形参并不是void而是一个长整型变量,通常来调用实时时间函数获取实时时间值来得到,因为时间是每时每刻都在变化的,所以充当"1103515245”角色的数就每调用一次的值都不同。这样每次执行就都能得到不重复的序列。至于12345,我想随便取个数都行!仅供参考……
8. 易语言随机抽取一个数值的源码
.程序集 窗口程序集1
.程序集变量 名字组, 文本型, , "0"
.子程序 __启动窗口_创建完毕
名字组 = { “赵1”, “赵2”, “赵3”, “赵4”, “赵5”, “赵6”, “赵7”, “赵8” }
置随机数种子 ()
编辑框1.标记 = “1”
编辑框2.标记 = “2”
编辑框3.标记 = “3”
编辑框4.标记 = “4”
编辑框5.标记 = “5”
编辑框6.标记 = “6”
编辑框7.标记 = “7”
编辑框8.标记 = “8”
.子程序 _按钮1_被单击
.局部变量 文本, 文本型
.局部变量 临时数组, 文本型, , "0"
.局部变量 y, 整数型
.局部变量 x, 整数型
.局部变量 编辑框变量, 编辑框
临时数组 = 名字组
.判断循环首 (取数组成员数 (临时数组) > 0)
x = 取随机数 (1, 取数组成员数 (临时数组))
文本 = 文本 + “[” + 临时数组 [x] + “]”
编辑框变量 = 取标记组件 (取数组成员数 (临时数组))
编辑框变量.内容 = 临时数组 [x]
清除数组 (临时数组)
.计次循环首 (取数组成员数 (名字组), y)
.如果真 (寻找文本 (文本, “[” + 名字组 [y] + “]”, 0, 假) < 0)
加入成员 (临时数组, 名字组 [y])
.如果真结束
调试输出 (名字组 [y])
.计次循环尾 ()
.判断循环尾 ()
9. randomize()源代码是什么
我知道C语言的随机数,Randomize应该是初始化随机函数吧,源代码可能很简单
seed = i;
其中i可能是当前系统时间,或者是快速变化着的CPU时钟,只要你想得到是可以的,都可以当做i
seed就是随机种子,不同的种子种下之后,理论上就可以产生不同的果实(随机数列)
而rand () (在C中的随机数)其实也复杂不到那里去,毕竟是伪随机数。
它采用一种叫做线性同余法的方法生成随机数的。
实际上就是这个递推公式
Xn+1 = (AXn + B) mod M
mod就是求余(求模)的意思,也就是第二个随机数是根据第一个生成出来的,所以为什么第一个叫种子就不难理解了。
M是周期(T = M - 1)的重要标志,M越大周期就越长,如果不想随机数经常重复就把它设置大一点吧。
A和B都是常量,M是素数(质数),A则是M的原根
如果不知道这些是什么,那我给出我试过的一组数吧
M = 32719
A = 2
B = 17
效果还可以,毕竟是伪随机数吧,不能要求太高,一下是我用C语言的实现
#include <stdio.h>
#include <windows.h>
// Global variable
int seed = 0;
// Initialize the Seed
void Srand ( int inSeed )
{
seed = inSeed;
}
// Random Arithmetic
int Random ( void )
{
const unsigned int m = 32719;
const int a = 2;
const int b = 17;
seed = (seed*a + b)%m;
return seed;
}
// CPU clock
int Clock ( void )
{
_asm
{
RDTSC
}
}
int main ( void )
{
int inSeed;
int randNumber;
int count0 = 0, count1 = 0;
printf ( "Please type the initial seed\n0 for default\n" );
scanf ( "%d", &inSeed );
if ( inSeed != 0 )
Srand ( inSeed );
else
Srand ( Clock () );
for ( int i = 0; i < 1000; i++ )
{
randNumber = Random () % 2;
printf ( "%d\n", randNumber );
if ( randNumber == 0 )
count0++;
else
count1++;
}
printf ( "output 0 : %d\n", count0 );
printf ( "output 1 : %d\n", count1 );
system ( "pause" );
return 0;
}
如果不明白,用网络HI我吧
10. 求VB设计一个随机抽题程序源码
楼主你好,假设有十道题,Rnd函数返回[0,1)之间的一个随机数,Randomize是将随机数初始化,代码如下:
Private Sub cmdok_click()
Randomize
Label1.Caption="随机题数为:"&Int((Rnd*10)+1)
End Sub