2014-09-06 4 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); 
} 

여기 당신은 아마 내가 알고리즘 A가 숙제 문제에 나에게 주어진 알고리즘 B.에게 기능과 시간의 단위를 능가하는 성능을 어느 시점에서 볼려고 알 수 있습니다.

어쨌든 나는 항상 "++"의 순서가 while 루프의 끝에서 중요하지 않다고 생각했습니다. 하지만 +++ 대신 ++ ++를 넣으면 잘못된 답을 얻습니다. 왜 누군가가 설명 할 수 있습니까?

편집 : 음, 24 ++ n과 25, n ++ 25를 보여 주었지만 다른 이유가있을 수 있습니다. 방금 체크했기 때문에 아무런 차이가 없습니다. 인내심과 시간을 보내 주셔서 감사합니다. 나는 내가 한 일을 알고 싶습니다.

+1

확실하지 않은 직접적인 복제본 (다른 언어)은 문제가 같을 것입니다. [x ++와 ++ x 사이에 차이점이 있습니까?] (http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and-x-in-java?rq=1). – csmckelvey

+0

@ mlwn 나는 거꾸로 생각해. – csmckelvey

+0

@Takendarkk LOL .. 방금 입력 한 내용을 삭제했습니다. :) 입력이 잘못되었습니다. – mlwn

답변

4

n++++n과의 유일한 차이점은 n++n의 원래 값을 얻을 수 있다고하고,이 증가 된 것 이후 ++nn의 값을 산출한다. 두 가지 모두 증분을 통해 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 당신을 도울 수 있습니다.