c語言產生隨機數范圍
⑴ c語言怎麼產生30-100的隨機數
利用C提供的偽隨機數產生函數rand實現。為了獲得「逼真隨機」效果,隨機數產生前應當用當前時間值調用庫函數srand來設定偽隨機數產生器的初始值(常稱下種子)。rand函數默認生成0~32767的隨機數,為達到題設30~100的要求,要將由rand生成的隨機數對71取模處理來獲得0~70的范圍,然後再+30便得到題解。代碼如下(以產生100個0~70的范圍隨機數為例):
#include"stdio.h"
#include"stdlib.h"//調用srand和rand需包含此文件
#include"time.h"//調用time需包含此文件
intmain(intargc,char*argv[]){
intn,l;
srand((unsigned)time(NULL));//調用庫函數sran為偽隨機產生器下種子
for(l=n=0;n<100;n++)
printf(++l%15?"%4d":"%4d ",rand()%71+30);//由rand()%71+30獲得30~100的范圍
if(l%15)
printf(" ");
return0;
}
運行樣例如下:
⑵ 如何在C語言中生成一定范圍內的隨機數
srand((int)time(NULL));設定隨機數種子
rand()%100;產生0-99的隨機數。
高級點的,假如要產生16-59之間的數,你可以這樣寫:rand()%44+16(這里44由59-16+1得到)。其他情況如法炮製!
⑶ C語言中生成0~1之間的隨機數有什麼函數
C語言中生成1個0到1的隨機數可以執行語句:float b=rand()/(RAND_MAX+1.0);
解析:
標准C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。rand()函數沒有輸入參數,直接通過表達式rand()來引用;
用函數rand取得的隨機數除以(RAND_MAX+1.0),即可確保得到的結果在0到1之間。ISO IEC 9899 2011 (C11)標准中未規定 RAND_MAX 的具體數值。但該標准規定了RAND_MAX 的值應至少為32767。編程的時候,不應該對 RAND_MAX 的具體數值做任何假設。
(3)c語言產生隨機數范圍擴展閱讀:
相關說明:
1、因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機。
2、為了使程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。
3、隨機種子(Random Seed)是計算機專業術語,一種以隨機數作為對象的以真隨機數(種子)為初始條件的隨機數。一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的演算法不停迭代產生隨機數。
⑷ C語言怎樣產生一定范圍的隨機數
在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子。
為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
C語言產生一定范圍的隨機數的源代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //隨機產生10個數。
{
printf("%d ", rand());
}
return 0;
}
(4)c語言產生隨機數范圍擴展閱讀
1、如果要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數。
2、在對rand()的前三次調用中,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此,只有再次給srand()提供一個隨機的「種子」值,才能再次得到一個隨機數。
⑸ c語言產生隨機數的函數
在c語言中要產生隨機數可以用rand函數。
默認情況下這個函數產生的隨機整數的范圍是[0,RAND_MAX]。
RAND_MAX是一個預定義的宏,其值等於平台上int類型的最大值。
可以使用如下公式來產生一個[min,max]之間的隨機整數:
rand()%(max-min+1)+min
下面這個例子可以產生10個[1,100]的隨機數,並輸出了它們:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
//初始化隨機數種子
srand(time(NULL));
//printf("%d ",RAND_MAX);
for(i=0;i<10;i++)
printf("%d ",rand()%100+1);
return 0;
}
下面是運行結果的截圖:
⑹ C語言中獲得隨機數的方法
問題1: 怎樣獲得一個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。
專家解答:
之所以rand()每次的隨機數都一樣是因為rand()函數使用不正確。各種編程語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成一個偽隨機序列並對數據進行處理;解密時,再利用種子數生成一個偽隨機序列並對加密數據進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在調用rand()函數之前調用srand( (unsigned)time( NULL ) ),這樣以time函數值(即當前時間)作為種子數,因為兩次調用rand函數的時間通常是不同的,這樣就可以保證隨機性了。你也可以使用srand函數來人為指定種子數。Windows 9x/NT的游戲FreeCell就允許用戶指定種子數,這樣用戶如果一次游戲沒有成功,下次還可以以同樣的發牌結果再玩一次。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
專家解答:
你的程序是有問題的,你每產生一個隨機數之前,都調用一次srand,而由於計算機運行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在循環外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
//相關語句
}
⑺ C語言如何編程產生隨機數
1、首先打開Visual stdio 2019,依次點擊文件,新建,項目新建以一個空白的項目: