隨機語句源碼
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