① 如何應用c語言實現隨機數的產生
(1)添加頭文件 #include"windows.h"
然後在文件中添加srand((unsigned)GetCurrentTime());或srand((unsigned)GetTickCount());
或者
(2)添加頭文件 #include<time.h>
然後在文件中添加 srand((unsigned)time(NULL));
解釋:
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同餘法做的,它不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的.
上面是有個隨機種子的說明及方法,為了避免重復.然後再 用 隨機函數,rand() 就行了.
頭文件是 stdlib.h
② C語言 如何連續產生隨機數
很好解決,用gettickcount
函數
做種子,精確到毫秒。我剛剛用它解決了16毫秒產生65000個不同
隨機數
③ 請問C語言中clock()函數該怎麼用
clock()是C/C++中的計時函數,而與其相關的數據類型是clock_t。
它的具體功能是返回處理器調用某個進程或函數所花費的時間。函數返回從「開啟這個程序進程」到「程序中調用clock()函數」時之間的CPU時鍾計時單元(clock tick)數,其中clock_t是用來保存時間的數據類型。
在time.h文件中,我們可以找到對它的定義:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
clock_t其實就是long,即長整形。該函數返回值是硬體滴答數,要換算成秒或者毫秒,需要除以CLK_TCK或者 CLK_TCK CLOCKS_PER_SEC。比如,在VC++6.0下,這兩個量的值都是1000,這表示硬體滴答1000下是1秒,因此要計算一個進程的時間,用clock()除以1000即可。
clock的返回值一直是0的原因:
1、編譯器優化,for循環實際根本沒執行,直接跳過去了,所以時間為0。
2、clock計算的是程序佔用cpu的時間,如果你的程序執行的動作很少,那麼clock算出的時間也很少。
3、建議使用time gettimeofday函數來計時。
(3)c語言gettickcount擴展閱讀:
C語言中clock()函數的程序例1:(TC下運行通過)
#include<stdio.h>
#include<time.h>
intmain(void)
{
clock_tstart,end;
start=clock();
delay(2000);
end=clock();
printf("Thetimewas:%f ",(double)(end-start)/CLK_TCK);
return0;
}
說明:CLK_TCK定義在TC中的time.h中:#defineCLK_TCK18.2。
在VC6.0中也有關於CLK_TCK的宏定義,不過其值不再是18.2,而是1000。
實際上在VC6.0中CLK_TCK已完全等同CLOCKS_PER_SEC。
④ 請教C語言的一個問題,關於GetTickCount!
這是VC的問題,不是C語言本身的問題。具體請參考MSDN。
⑤ 如何用C語言獲取當前系統時間
需要利用C語言的時間函數time和localtime,具體說明如下:
一、函數介面介紹:
1、time函數。
形式為time_t time (time_t *__timer);
其中time_t為time.h定義的結構體,一般為長整型。
這個函數會獲取當前時間,並返回。 如果參數__timer非空,會存儲相同值到__timer指向的內存中。
time函數返回的為unix時間戳,即從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
由於是秒作為單位的,所以這並不是習慣上的時間,要轉為習慣上的年月日時間形式就需要另外一個函數了。
2、localtime函數。
形式為struct tm *localtime (const time_t *__timer);
其中tm為一個結構體,包含了年月日時分秒等信息。
這種結構是適合用來輸出的。
二、參考代碼:
#include<stdio.h>
#include<time.h>
intmain()
{
time_tt;
structtm*lt;
time(&t);//獲取Unix時間戳。
lt=localtime(&t);//轉為時間結構。
printf("%d/%d/%d%d:%d:%d ",lt->tm_year+1900,lt->tm_mon,lt->tm_mday,lt->tm_hour,lt->tm_min,lt->tm_sec);//輸出結果
return0;
}
注意事項:
struct tm中的tm_year 值為實際年減去1900, 所以輸出的時候要是lt->tm_year+1900。
⑥ C語言怎麼獲取時間戳
DWORD tm = ::GetTickCount();
……
#ifndef _TIME32_T_DEFINED
typedef _W64 long __time32_t; /* 32-bit time value */
#define _TIME32_T_DEFINED
#endif /* _TIME32_T_DEFINED */
#ifndef _TIME64_T_DEFINED
#if _INTEGRAL_MAX_BITS >= 64
typedef __int64 __time64_t; /* 64-bit time value */
#endif /* _INTEGRAL_MAX_BITS >= 64 */
#define _TIME64_T_DEFINED
#endif /* _TIME64_T_DEFINED */
#ifndef _TIME_T_DEFINED
#ifdef _USE_32BIT_TIME_T
typedef __time32_t time_t; /* time value */
#else /* _USE_32BIT_TIME_T */
typedef __time64_t time_t; /* time value */
#endif /* _USE_32BIT_TIME_T */
#define _TIME_T_DEFINED /* avoid multiple def's of time_t */
#endif /* _TIME_T_DEFINED */
……
⑦ c語言如何計時
C語言中提供了許多庫函數來實現計時功能
下面介紹一些常用的計時函數
1. time()
頭文件:time.h
函數原型:time_t time(time_t * timer)
功能:返回以格林尼治時間(GMT)為標准,從1970年1月1日00:00:00到現在的時此刻所經過的秒數
用time()函數結合其他函數(如:localtime、gmtime、asctime、ctime)可以獲得當前系統時間或是標准時間。
用difftime函數可以計算兩個time_t類型的時間的差值,可以用於計時。用difftime(t2,t1)要比t2-t1更准確,因為C標准中並沒有規定time_t的單位一定是秒,而difftime會根據機器進行轉換,更可靠。
說明:C標准庫中的函數,可移植性最好,性能也很穩定,但精度太低,只能精確到秒,對於一般的事件計時還算夠用,而對運算時間的計時就明顯不夠用了。
2. clock()
頭文件:time.h
函數原型:clock_t clock(void);
功能:該函數返回值是硬體滴答數,要換算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,這兩個量的值都是1000。
說明:可以精確到毫秒,適合一般場合的使用。
3. timeGetTime()
頭文件:Mmsystem.h引用庫: Winmm.lib
函數原型:DWORD timeGetTime(VOID);
功能:返回系統時間,以毫秒為單位。系統時間是從系統啟動到調用函數時所經過的毫秒數。注意,這個值是32位的,會在0到2^32之間循環,約49.71天。
說明:該函數的時間精度是五毫秒或更大一些,這取決於機器的性能。可用timeBeginPeriod和timeEndPeriod函數提高timeGetTime函數的精度。如果使用了,連續調用timeGetTime函數,一系列返回值的差異由timeBeginPeriod和timeEndPeriod決定。
4. GetTickCount()
頭文件:windows.h
函數原型:DWORD WINAPI GetTickCount(void);
功能:返回自設備啟動後的毫秒數(不含系統暫停時間)。
說明:精確到毫秒。對於一般的實時控制,使用GetTickCount()函數就可以滿足精度要求。
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
頭文件:windows.h
函數原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者獲得的是CPU從開機以來執行的時鍾周期數。後者用於獲得你的機器一秒鍾執行多少次,就是你的時鍾周期。
補充:LARGE_INTEGER既可以是一個8位元組長的整型數,也可以是兩個4位元組長的整型數的聯合結構, 其具體用法根據編譯器是否支持64位而定:
在進行定時之前,先調用QueryPerformanceFrequency()函數獲得機器內部定時器的時鍾頻率,然後在需要嚴格定時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差及時鍾頻率,計算出事件經歷的精確時間。
說明:這種方法的定時誤差不超過1微秒,精度與CPU等機器配置有關,一般認為精度為透微秒級。在Windows平台下進行高精度計時的時候可以考慮這種方法。
6. gettimeofday()
Linux C函數。
頭文件:sys/time.h
函數原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
說明:其參數tv是保存獲取時間結果的結構體,參數tz用於保存時區結果(若不使用則傳入NULL即可)。
timeval的定義為:
structtimeval{
longtv_sec;//秒數
longtv_usec;//微秒數
}
可見該函數可用於在linux中獲得微秒精度的時間。
說明:使用這種方式計時,精度可達微秒。經驗證,在arm+linux的環境下此函數仍可使用。
⑧ C語言計算時間函數
標准庫的time.h里有時間函數
time_t time (time_t *timer)
計算從1970年1月1日到當前系統時間,並把結果返回給timer變數,
函數本身返回的也是這個結果.time_t這個類型其實就是一個int.
另有:
double difftime ( time_t timer2, time_t timer1 )
把返回time2和time1所儲存的時間的差.
⑨ C語言 GetTickCount()函數
函數原型:
DWORD GetTickCount(void);
函數作用:
1、一般用作定時相關的操作。GetTickCount() 返回開機以來經過的毫秒數
2、在要求誤差不大於1毫秒的情況下,可以採用GetTickCount()函數,該函數的返回值是DWORD型,表示以毫秒為單位的計算機啟動後經歷的時間間隔。使用下面的編程語句,可以實現50毫秒的精確定時,其誤差小於1毫秒。
函數舉例:
實現延時
Public Sub Sleep(numa As Long)
Dim num1 As Long
Dim num2 As Long
Dim numb As Long
numb = 0
num1 = GetTickCount
Do While numa - numb > 0
num2 = GetTickCount
numb = num2 - num1
DoEvents
Loop
End Sub
C++版
DWORD k=::GetTickCount(); //獲取毫秒級數目
int se = k/1000; // se為秒
cout<<se<<endl;
庫文件:kernel32.dll
C/C++頭文件:winbase.h
windows程序設計中可以使用頭文件windows.h