⑴ 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);
}