2014-09-06 64 views
0

這可能是一個愚蠢的問題,但我無法弄清楚。它與n ++和++ n之間的區別(我認爲我理解但顯然不是)。在while循環結束時n ++和++ n的區別? (ANSI C)

#include <stdio.h> 
#include <math.h> 

long algorithmA(int n); 
long algorithmB(int n); 

int main(){ 
    long A, B; 
    A = B = 0; 
    int n = 1; 
    while(A >= B){ 
     A = algorithmA(n); 
     B = algorithmB(n); 
     n++; 
    } 
    printf("At n = %d, Algorithm A performs in %ld seconds & " 
      "Algorithm B performs in %ld seconds.", n, A, B); 

} 

long algorithmA(int n){ 
    return pow(n,4) * 86400 * 4; 
} 

long algorithmB(int n){ 
    return pow(3,n); 
} 

在這裏,你可能會說我想看看在什麼點算法的性能優於算法B的功能和時間爲單位提供給我的家庭作業的問題。

總而言之,我一直認爲「++」的順序在while循環結束時並不重要。但如果我把++ n而不是n ++,我得到了錯誤的答案。有人可以解釋爲什麼嗎?

編輯:它顯示24與++ n和25與n ++,但它一定是由於另一個原因。因爲我剛剛檢查過,沒有任何區別。感謝您的耐心和時間,我只希望我知道我做了什麼!

+1

不知道如果直接重複(不同的語言),但我敢打賭,問題是相同的。 [x ++和++ x之間有區別](http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and-x-in-java?rq=1)。 – csmckelvey 2014-09-06 21:40:09

+0

@mlwn我認爲你得到了這些倒退。 – csmckelvey 2014-09-06 21:41:18

+0

@Takendarkk大聲笑..剛剛刪除它.. :)打字.. – mlwn 2014-09-06 21:41:59

回答

4

n++++n之間的唯一區別是,n++產生的n原始值,和++n產生的n值,它已經遞增後。兩者都具有通過遞增修改n的值的副作用。

如果結果被丟棄,就像它在代碼中一樣,沒有有效的區別。

如果您的程序取決於你是否寫

n++; 

++n; 

它必須是一些其他的原因,表現不同。

事實上,當我在我的系統上編譯和執行你的程序時,在兩種情況下我都得到完全相同的輸出。添加換行符到輸出格式,我得到:

At n = 25, Algorithm A performs in 114661785600 seconds & 
Algorithm B performs in 282429536481 seconds. 

你還沒有告訴我們你輸出了什麼輸出。請更新您的問題以顯示兩種情況下的輸出。

3

如果您沒有分配增加,沒有區別。但是,在下列情況下,有:

int n = 1; 
int x = n++; // x will be 1 and n will be 2 

在此示例中,語句在增量之前執行。

int n = 1; 
int x = ++n; // both x and n will be 2 

但是,在本例中,增量發生在執行語句之前。

Operator precedence可以幫助你。