2014-09-06 10 views
0

это, наверное, немой вопрос, но я просто не могу понять это. Это связано с различиями между n ++ и ++ n (которые, как я думал, я понял, но, по-видимому, нет).Разница между n ++ и ++ n в конце цикла while? (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

+0

@mlwn Я думаю, что вы получили это назад. – csmckelvey

+0

@Takendarkk lol .. просто удалил его .. :) mis typing .. – mlwn

ответ

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 может помочь вам.

 Смежные вопросы

  • Нет связанных вопросов^_^