1. ホーム
  2. c

[解決済み] whileループの最後にあるn++と++nの違い?(ANSI C)

2022-03-06 05:43:05

質問

これは多分馬鹿な質問だと思うのですが、どうしても分かりません。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);
}

ここで、アルゴリズムAがアルゴリズムBをどの時点で上回るか試していることがわかると思います。

ところで、whileループの最後では、"++"の順番は関係ないとずっと思っていました。しかし、n++の代わりに++nを置くと、間違った答えになります。誰か理由を説明してください。

編集:そうですね、++nで24、n++で25と表示されましたが、別の理由だったのでしょう。というのも、今確認したところ、何の違いもなかったからです。しかし、私は今確認しましたが、違いはありませんでした。

解決方法は?

との唯一の違いは n++++n は、その n++ の元の値が得られる。 n であり、かつ ++n の値が得られる。 n がインクリメントされた後です。 両方とも n をインクリメントすることで

あなたのコードのように、結果が破棄される場合は、効果的な違いはありません。

を書くかどうかで、プログラムの動作が変わってしまうのであれば、そのようなことはありません。

n++;

または

++n;

何か他の理由があるのでしょう。

実際、私のシステムであなたのプログラムをコンパイルして実行すると、どちらの場合もまったく同じ出力が得られます。 出力フォーマットに改行を加えると、こうなります。

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

どのような出力が得られているのか、教えていただけません。 両方の場合の出力を表示するように質問を更新してください。