while循环结束时n ++和++ n之间的区别?(ANSI C)

Ste*_*ady 0 c increment pre-increment post-increment

这可能是一个愚蠢的问题,但我无法弄清楚。它与n ++和++ n之间的差异有关(我以为我理解但显然不是)。

#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);
}
Run Code Online (Sandbox Code Playgroud)

在这里您可能会告诉我,我正在尝试看算法A在什么时候优于算法B。功课中的功能和时间单位是给我的。

无论如何,我一直认为在while循环结束时“ ++”的顺序无关紧要。但是,如果我使用++ n而不是n ++,则会得到错误的答案。有人可以解释为什么吗?

编辑:好吧,它用++ n显示24,用n ++显示25,但这一定是出于另一个原因。因为我现在才检查,所以没有区别。感谢您的耐心和时间,我只希望我知道自己做了什么!

B.K*_*.K. 5

如果不分配就增加,则没有区别。但是,在以下情况下,存在:

int n = 1;
int x = n++; // x will be 1 and n will be 2
Run Code Online (Sandbox Code Playgroud)

在此示例中,该语句在增量之前执行。

int n = 1;
int x = ++n; // both x and n will be 2
Run Code Online (Sandbox Code Playgroud)

但是,在此示例中,增量发生在语句执行之前。

运算符优先级可以帮助您。


Kei*_*son 5

n++和之间的唯一区别++n是,n++产生 的原始值n,并产生递增后++n的值。n两者都有通过增加 的值来修改它的副作用n。

如果结果被丢弃(就像代码中一样),则没有任何有效的区别。

如果您的程序根据您是否编写而表现不同

n++;
Run Code Online (Sandbox Code Playgroud)

或者

++n;
Run Code Online (Sandbox Code Playgroud)

一定是有其他原因。

事实上,当我在我的系统上编译并执行你的程序时,在这两种情况下我得到完全相同的输出。将换行符添加到输出格式中,我得到:

At n = 25, Algorithm A performs in 114661785600 seconds &
Algorithm B performs in 282429536481 seconds.
Run Code Online (Sandbox Code Playgroud)

你还没有告诉我们你得到了什么输出。请更新您的问题以显示两种情况下的输出。