C語言執行一條語句所用時間如何計算

2022-10-09 08:51:30 字數 5109 閱讀 7777

1樓:

把time.h include進來

然後在**的前面和後面都加一條**,獲得時間 long start=clock();

long end=clock();

兩個減一下就是秒數

2樓:匿名使用者

使用time函式:

time函式舉例

int main()

c語言中,乙個語句執行一般(家用pc)需要多少時間?

c語言的for迴圈中執行一次需多少機器週期?

3樓:萬能導師

機器迴圈,當然只是在微控制器中,不同的微控制器使用不同的編譯軟體,最終都轉換成彙編,把機器**燒錄成微控制器。

不同的編譯軟體可以用不同的方式編譯語句。以keil為例。(我= 0;我< 1;n + +我+ +);(i, n是char或unsigned char)

賦值語句(i=0)有兩個機械迴圈,

乙個判斷語句(i <1) 4個機械迴圈,

乙個自加語句(n++) 1機械迴圈,

另乙個自我遞增語句(i++)1機械迴圈,

另乙個判斷語句(i <1) 4個機械迴圈,結束。

擴充套件資料:

指令週期:

每次cpu獲取一條指令並執行它,它就完成一系列操作,通常稱為指令週期。換句話說,指令週期就是獲取一條指令並執行它所花費的時間。由於每條指令的操作功能不同,每條指令的指令週期也不同。

例如加法指令的指令週期與乘法指令的指令週期是不同的。指令週期通常以cpu週期的數量表示,也稱為機器週期。所需的機器週期數隨指令的不同而變化。對於一些簡單的單位元組指令。

在指令取出週期中,將指令取出到指令暫存器後,立即對其進行解碼並執行,不需要其他機器週期。對於更複雜的指令,例如轉換和乘法指令,需要兩個或更多的機器週期。

具有乙個機器週期的指令通常稱為單週期指令,具有兩個機器週期的指令稱為雙週期指令。

4樓:小雨手機使用者

機器週期當然是在微控制器上才有的說法,不同的微控制器採用不同的編譯軟體,最終都是轉成彙編、機器碼燒錄進微控制器。

不同的編譯軟體,對 for 語句的編譯也不盡相同,以keil 為例,對 for(i=0;i<1;i++) n++;(i,n 均為 char 型或 unsigned char 型)進行編譯,得:

①一條賦值語句(i=0) 2個機械週期,

②一條判斷語句(i<1) 4個機械週期,

③一條自增語句(n++) 1個機械週期,

④又一條自增語句(i++) 1個機械週期,⑤又一條判斷語句(i<1) 4個機械週期,結束。

5樓:希聲和寡

***********************************=

問題補充:5樓的朋友,如果我改成

for (i=9;i<100;i++)

x=2;

其延時又是多少?

***********************************=

賦值語句的耗時一般是不計入時間消耗的(就像我們計算時間複雜度時,不考慮賦值的時間消耗一樣)

所以:for (i=9;i<100;i++)

x=2;

的時間消耗就可以理解為for (i=9;i<100;i++);的時間消耗,

大約就是:

92*8*1us=0.736ms(12m晶振)

12m的晶振的機器週期是1/12m*12,就是1us

其次不同的微控制器執行語句的機器週期也不一定一樣(比如:atmel 51系列及大多數51的乙個機器週期是12個時鐘週期,華邦的只需要4個時鐘週期)。不過大體來說,一條for迴圈大概8個機器週期,在12m晶振下,通常用以下**實現1ms的延時:

void delayms(unsigned int ms) }

大概算一下,120*8*1us=1ms,如果需要精確的定時,還是得用定時器。

如果是for (i=0;i<100;i++);的話,

那麼 大概算一下,100*8*1us=0.8ms

6樓:匿名使用者

for(i = 0; i < 100; i++);

這條語句被優化掉了,

你可以將i的宣告新增volatile以阻止編譯器對其進行優化然後在用3樓 giftbowen 的方法試之

7樓:

利用clock()函式

clock_t start=clock();

for(i=0;i<100;i++);

clock_t end=clock();

這裡clock_t 是clock()函式返回型別的別名,意味著可以講變數宣告為clock_t型別,接受clock()函式返回值

clock()函式返回程式開始執行後的系統時間end-start的值就是100次for迴圈所用的系統時間不過我試了一下,好像,就算讓for迴圈不執行空語句,100次for迴圈所用的系統時間也是0.0

系統時間的單位是ms可能跟機器週期單位是μs差很多吧

8樓:匿名使用者

clock函式,計算用到的時鐘數。

9樓:世鑲柳

執行時間可能是零!

這和編譯器有關(如優化級別),還和cpu有關(如流水線不一樣)。

在c語言程式設計中,如果先執行一條語句,隔段時間,在執行下一條語言,該怎樣實現呢?

10樓:緋雨閒丸

兩句語句中間加上

sleep(2000);

就是等2秒,引數單位是毫秒

貌似要引用

11樓:匿名使用者

執行完一條語句後寫乙個計算階乘的計算函式,然後可以通過階乘的數值控制計算的時間.

然後再直接下面一條語句

12樓:

#include

#include

void main()

13樓:匿名使用者

我個人膚淺的認為用多執行緒嘛~

51微控制器執行一條c語言程式需要多長時間?

14樓:匿名使用者

那要看你這條語句的步數了,

用彙編解釋這條語句,再查對應會變語句的步數,

晶振頻率的倒數再乘以12再乘以得到的步數就是該條語句執行的時間

15樓:

不好確定,不像彙編每條指令有其指令週期

16樓:

指令週期,和你的晶振有關,然後c語言的內容也是有關係的,不是所有語句都一樣的。不過,都很快。

17樓:匿名使用者

可以在一步步走的時候看當前時間,根據時間差算出執行所需的時間,跟晶振的頻率有關

c語言中 ,乙個語句執行一般(家用pc)需要多少時間?

編寫乙個c語言語句,要求輸出這個程式需要執行的時間(用clock()做) 該怎麼寫?

18樓:

#include

#include

int main(void)

19樓:子爵先生

#include

#include

int main()

c語言演算法的時間複雜度如何計算啊?

20樓:熊貓

看看這個 每個迴圈都和上一層迴圈的引數有關。 所以要用地推公式: 設i(n)表示第一層迴圈的i為n時的迴圈次數,注意到他的下一層迴圈次數剛好就是n,分別是0,1,2...

n-1 所以,把每一層迴圈設乙個函式分別為:j(n),k(n),t(n) 則有 i(n)=j(0)+...+j(n-1) j(n)=k(0)+...

+k(n-1) k(n)=t(0)+...+t(n-1) i(0)=j(0)=k(0)=0 t(n)=1 而總迴圈數是i(0)+i(1)...+i(n-1) 可以根據遞推條件得出準確值 所以演算法複雜度是o(i(0)+i(1)...

+i(n-1))

記得採納啊

21樓:血刺廢車

(1)時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。 (2)時間複雜度 在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。

但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。

記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。 在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。 按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log(2)n),線性階o(n), 線性對數階o(nlog(2)n),平方階o(n^2),立方階o(n^3),..., k次方階o(n^k),指數階o(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

22樓:問豐建思蓮

在計算之前取得系統的滴答數

inttbegin

=gettickcount();

計算完成過後再次呼叫減去滴答數就行了,單位msinttend

=gettickcount()

-tbegin;

還有其他更精確的函式,搞忘了,你最好查下msdn純c下不要用c自帶的計算滴答數的函式,不精確,應該使用系統的

c語言中語句“y x1”是怎麼執行的

埃德蒙 放後邊 x先參與 運算 計算結果賦給y 之後x值自增1。如果x 3,y x 1 之後y 2 x 4就是要記住一個規則 在變數之前時 值先自增1 再參與其他運算,在變數之後 先參與其他運算 變數值再自增1 關燁韋 先執行x 1,然後再賦值給y,然後再x 如果換成y x 1 就會先自增,再運算。...

關於C語言的一道題迴圈語句,C語言迴圈語句裡的一道例題

a.for x i 因為沒有判斷語句,所以就沒有真假判斷,程式就一直迴圈下去咯。b.while 1 因為括弧裡面是1,在邏輯上說就是真,所以迴圈也會繼續。c.for i 10 i sum i 和a一樣,沒有判斷語句。答案是d就不用說了吧。a c缺少終止條件語句,當然死迴圈 b,while 1 1表示...

求一條刪除sql語句

這個方法不錯,觸發器。就是當你刪除student表的資料的時候讓系統自動執行相應的sql語句。我用sqlserver的方式幫你寫個 其實其他資料庫也一樣,差不多 create trigger trg delete on student for delete as 在這裡就把score表的中資料刪除掉...