1

二乗定義ディレクティブを次のように実装しました。

#include <stdio.h>

#define SQR(y) ((y)*(y))

int main() {
    int a;
    printf("Enter : ");
    scanf("%d",&a);
    a = SQR(a);
    printf("The square is: %d\n",SQR(a));
    return 0;
}

しかし、実行するとエラーは発生しませんが、毎回間違った答えが返されます。

入力の 2 乗ではなく 4 乗を与えるのはなぜですか?

4

4 に答える 4

2

あなたはそれを二乗しています。

あなたのコードで:

a = SQR(a);
printf("The square is: %d\n",SQR(a));
  1. これが最初に作るa = a*a

  2. 印刷SQR((a*a)*(a*a))するか、a*a*a*a

を a に置き換えるか、SQR(a)または削除することができますprintfa = SQR(a)

これを試して :

#include <stdio.h>
#define SQR(y) ((y)*(y))

int main() {
    int a;
    printf("Enter : ");
    scanf("%d",&a);
    printf("The square is: %d\n",SQR(a));
    return 0;
}
于 2015-05-10T07:36:18.943 に答える
0

((a)*(a))コードで2回書いているからです。

a = SQR(a); //<-- Here a = a*a printf("The square is: %d\n",SQR(a)); //<-- and here print a*a

于 2015-05-10T07:36:10.113 に答える
0

平方を 2 回計算します。aここで最初に四角にします。

a = SQR(a);

そして、この数を で再度 2 乗しますprintf

printf("The square is: %d\n",SQR(a));

printf上記を次のものに置き換えて問題を修正します。

printf("The square is: %d\n", a);
于 2015-05-10T07:36:20.840 に答える
0

あなたはc マクロの使い方を誤解しています。

マクロ定義に問題はありません。問題は使い方です。

a = SQR(a);

上記の行では、 の二乗を計算し、a結果をa再度割り当てます。したがって、上記の行の後にa、入力値の 2 乗の値を実行します。

次に、再び下の行で、 でマクロを呼び出していaます。

printf("The square is: %d\n",SQR(a)); 

次に、 の現在の値の 2 乗を出力しますa。その値は、取得する必要がある wt ではありません。

たとえば、2 を入力すると 16 になりますが、答えとして 4 が必要です。

于 2015-05-10T07:51:31.833 に答える