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;
}

但是当我执行它时,我没有收到任何错误,但每次都给出错误的答案。

为什么它给出输入的 4 次方而不是 2 次方?

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)in printf 删除a = 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))在你的代码中写了两次。

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

你计算平方两次。你在这里的第一个广场a

a = SQR(a);

然后,再次将此数字平方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是输入值的平方。

然后再次在下面的行中,您正在调用宏 on a

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

然后打印当前值的平方a。该值不是您需要获得的重量。

例如,如果你输入 2,你会得到 16,但你需要 4 作为答案。

于 2015-05-10T07:51:31.833 回答