rand函數(shù)
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比江陰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式江陰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋江陰地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
函數(shù)頭文件:stdlib.h
函數(shù)定義:int rand(void)
函數(shù)功能:產(chǎn)生一個隨機數(shù)
函數(shù)說明:
rand函數(shù)產(chǎn)生的隨機數(shù)嚴格意義講不是真正的隨機數(shù),它里面采用了線性同余法計算出隨機數(shù),所謂的線性同語法簡單來說就是使用了一個公式。
該方法有個最大周期M,也就是說該方法實在一定的范圍內(nèi)生成一串數(shù)字,不過這個M一般來說比較大,所以正常使用時一般看起來就是產(chǎn)生了隨機的數(shù)。
不過這個函數(shù)由于默認種子是1,所以每次產(chǎn)生的隨機數(shù)都是相同的,也就是說每次運行程序,產(chǎn)生的隨機數(shù)都是一樣的,失去了部分隨機的意義,所以一般會配合srand函數(shù)使用。
返回值: 返回0至RAND_MAX之間的隨機整數(shù)值,RAND_MAX的范圍最小在32767之間。若用unsigned int 雙字節(jié)是65535,四字節(jié)是4294967295的整數(shù)范圍。且0-RAND_MAX每個數(shù)字被選中的機率是相同的。
srand函數(shù)
函數(shù)頭文件:stdlib.h
函數(shù)定義:void srand(unsigned int seed)
函數(shù)功能:設(shè)置隨機數(shù)種子
函數(shù)說明:通??梢杂胓etpid()(獲取當前進程的進程識別碼)或者time(NULL)(獲取當前系統(tǒng)的時間信息)來充當種子,保持每次運行時種子是不一樣的。
擴展資料
當srand()的內(nèi)容相同時,則在rand()后產(chǎn)生相同的隨機數(shù)列;所以當用time(NULL)來進行初始隨機數(shù),根據(jù)時間來產(chǎn)生隨機數(shù),這樣就能產(chǎn)生不同的。
調(diào)用方法是srand(GetTickCount()),但是又不能在每次調(diào)用rand()的時候都用srand(GetTickCount())來初始化。
因為現(xiàn)在計算機運行時間比較快,當連續(xù)調(diào)用rand()時,系統(tǒng)的時間還沒有更新,所以得到的隨機種子在一段時間內(nèi)是完全相同的,因此一般只在進行一次大批隨機數(shù)產(chǎn)生之前進行一次隨機種子的初始化。
參考資料:百度百科——rand函數(shù)
1、添加線程相關(guān)的頭文件:#includepthread.h
2、線程創(chuàng)建函數(shù)是pthread_create()函數(shù),該函數(shù)的原型為:
int?pthread_create(pthread_t?*thread,pthread_attr_t?*attr,void*?(*start_routine)(void*),void?*arg);
3、線程退出函數(shù)是pthread_exit()函數(shù),該函數(shù)的原型為:
void?pthread_exit(void?*retval);
創(chuàng)建線程的示例程序如下:
/*
**程序說明:創(chuàng)建線程函數(shù)pthread_create()函數(shù)的使用。
*/
#include?stdio.h
#include?pthread.h
#include?unistd.h
#include?stdlib.h
#include?string.h
//打印標識符的函數(shù)
void?print_ids(const?char?*str)
{
pid_t?pid; //進程標識符
pthread_t?tid; //線程標識符
pid=getpid(); //獲得進程號
tid=pthread_self(); //獲得線程號
printf("%s?pid:%u?tid:%u?(0x%x)\n",
str,(unsigned?int)pid,(unsigned?int)tid,(unsigned?int)tid);?//打印進程號和線程號
}
//線程函數(shù)
void*?pthread_func(void?*arg)
{
print_ids("new?thread:"); //打印新建線程號
return?((void*)0);
}
//主函數(shù)
int?main()
{
int?err;
pthread_t?ntid; //線程號
err=pthread_create(ntid,NULL,pthread_func,NULL); //創(chuàng)建一個線程
if(err?!=?0)
{
printf("create?thread?failed:%s\n",strerror(err));
exit(-1);
}
print_ids("main?thread:"); //打印主線程號
sleep(2);
return?0;
}
頭文件stdlib.h中
srand,
rand兩個函數(shù)
其中
srand一般取當前時間做初始值,所以還要用
time.h
=================
srand函數(shù)是隨機數(shù)發(fā)生器的初始化函數(shù)。原型:void
srand(unsigned
seed);
用法:它需要提供一個種子,如:
srand(1);
直接使用1來初始化種子。不過常常使用系統(tǒng)時間來初始化,即使用
time函數(shù)來獲得系統(tǒng)時間,它的返回值為從
00:00:00
GMT,
January
1,
1970
到現(xiàn)在所持續(xù)的秒數(shù),然后將time_t型數(shù)據(jù)轉(zhuǎn)化為(unsigned)型再傳給srand函數(shù),即:
srand((unsigned)
time(t));
還有一個經(jīng)常用法,不需要定義time_t型t變量,即:
srand((unsigned)
time(NULL));
直接傳入一個空指針,因為你的程序中往往并不需要經(jīng)過參數(shù)獲得的t數(shù)據(jù)。srand((int)getpid());
使用程序的ID(getpid())來作為初始化種子,在同一個程序中這個種子是固定的。
===============================
功
能::偽隨機數(shù)發(fā)生器所屬庫:stdlib.h用
法:
需要先調(diào)用srand初始化,一般用當前日歷時間初始化隨機數(shù)種子,這樣每次執(zhí)行代碼都可以產(chǎn)生不同的隨機數(shù)。
函數(shù)原型:int
rand(void);